ส่งคืนนาฬิกาอิโมจิที่ใกล้เคียงที่สุดกับเวลาปัจจุบันเมื่อทำงาน


20

ฉันสามารถมีif/elseสภาพขนาดใหญ่ในแต่ละ 30 นาที แต่ฉันกำลังมองหาวิธีแก้ปัญหาทางคณิตศาสตร์และ Unicode เพิ่มเติม

นี่คือนาฬิกาอิโมจิ: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧 หากคุณขาดการสนับสนุนการเรนเดอร์ที่เหมาะสมคุณสามารถดูพวกเขาด้านล่าง (พวกเขาไม่ได้อยู่ในลำดับเดียวกันและพวกเขาอาจดูแตกต่างจากที่คุณเห็น) หรือที่แผนภูมิ Unicodeหน้า 4 พวกเขาสอดคล้องกับ Unicode codepoints U + 1F550 (CLOCK FACE ONE OCLOCK) ผ่าน U + 1F567 (นาฬิกา FACE TWELVE-THIRTY)

ความท้าทายของคุณคือการเขียนโปรแกรมที่ส่งเอาต์พุตไปยัง STDOUT อิโมจิหน้าปัดนาฬิกาที่ใกล้เคียงที่สุดกับเวลาระบบปัจจุบัน (AM และ PM ควรได้รับการปฏิบัติเหมือนกัน) ตัวอย่างเช่นหากเวลาtคือ [5:15 <t <5:45) คุณจะแสดงอีโมจิ 5:30

นี่คือ code-golf ดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ คุณอาจต้องการรวมวิธีการระบุเวลาในการทดสอบรหัสของคุณได้อย่างง่ายดาย

กรณีทดสอบขอบ

Time   Output  Written
----------------------
11:48  🕛       12:00
3:15   🕞       3:30
9:45   🕙       10:00

ป้อนคำอธิบายรูปภาพที่นี่


7
คำถามนี้ไม่ได้อยู่ในหัวข้อนี้ในขณะนี้ แต่อาจเป็นการแก้ไขได้ง่าย คุณต้องมีเงื่อนไขการชนะตามวัตถุประสงค์ แต่ถ้าคุณติดแท็กรหัสคำถามกอล์ฟผู้ชนะจะเป็นใครก็ตามที่เขียนโปรแกรมสั้นที่สุด นอกจากนี้ยังเป็นบิตภายใต้ที่ระบุไว้ แต่คุณสามารถพูดว่า "สคริปต์ที่แสดงอีโมจินาฬิกาที่ใกล้เคียงกับเวลาปัจจุบันเมื่อเรียกใช้" และที่ควรจะเพียงพอ นอกจากนี้ในขณะที่ไม่จำเป็นต้องใช้เทคนิคฉันขอแนะนำให้คุณอนุญาตให้ส่งเป็นภาษาอื่น (ใครบางคนอาจจะทำอย่างใดอย่างหนึ่งใน Bash ต่อไป)
undergroundmonorail

พรอมต์คำสั่งของ Windows ไม่รองรับ emojis :(
stokastic

2
ฉันได้แก้ไขโพสต์ของคุณเพื่อให้เป็นไปตามมาตรฐานของเราโดยการอธิบายกฎและทำให้โค้ดกอล์ฟ อย่าลังเลที่จะแก้ไขหากฉันตีความผิดอะไร
NinjaBearMonkey

3
xx: 15 และ xx: 45 ควรปัดเศษอย่างไร
Peter Taylor

1
@PeterTaylor ตามที่เห็นในกรณีทดสอบพวกเขาควรจะถูกปัดเศษขึ้น (เช่น 1:45 => 2:00)
NinjaBearMonkey

คำตอบ:


9

Ruby - 61 54 ไบต์

Python 3 - 79 77 75 74 ไบต์

แก้ไข:ปรากฎว่าสิ่งนี้สั้นกว่ามากใน Ruby เพราะTimeไม่จำเป็นต้องนำเข้าและการหารจำนวนเต็มเป็นค่าเริ่มต้น

a=(Time.now.to_i/900-3)/2%24
puts""<<128336+a/2+a%2*12

เลขคณิต:

  • Time.now.to_i: วินาทีนับตั้งแต่ยุค
  • /900: รวมเวลาในส่วน 15 นาที
  • -3: -4เนื่องจากตัวละครเริ่มต้นที่ 1 นาฬิกา+1ดังนั้นการปัดเศษจึงใช้เวลาครึ่งชั่วโมงที่ใกล้ที่สุดแทนที่จะลงด้านล่าง
  • /2: รวมเป็นครึ่งชั่วโมง
  • %24: รับเซ็กเมนต์ครึ่งชั่วโมงปัจจุบันจาก 12 ชั่วโมง
  • a/2 + a%2*12: บัญชีสำหรับข้อเท็จจริงที่ว่าอักขระทั้งชั่วโมงมาในบล็อกก่อนอักขระครึ่งชั่วโมง

รุ่นเวลาท้องถิ่น 69 ไบต์:

n=Time.now
a=((n.to_i+n.gmtoff)/900-3)/2%24
puts""<<128336+a/2+a%2*12

Python 3 เวอร์ชั่นดั้งเดิม:

import time
a=int((time.time()/900-3)/2%24)
print(chr(128336+a//2+a%2*12))

พิมพ์เวลา UTC ปัจจุบัน Python 2 chrยอมรับเฉพาะ 0-255 และunichrเพียง 0-65535 ใน Python 3 /เป็นส่วนทศนิยมแบบเสมอและ//เป็นจำนวนเต็มเสมอ


คุณสามารถตัด parens จาก12*(a%2)ถ้าคุณทำมันในลำดับอื่น ๆa%2*12:
xnor

7

Bash + Coreutils, 60 ไบต์

date +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

Emojis แสดงผลได้ดีบนเทอร์มินัล OSX แต่สำหรับ Linux (Ubuntu 14.04) คุณจะต้องทำ sudo apt-get install ttf-ancient-fonts

สำหรับการทดสอบเวลาที่แตกต่างกันให้ใส่-d $timeคำสั่ง date เช่นสำหรับการทดสอบ 12:59:

date -d 12:59 +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

5

JavaScript - 137 117 107 102 95

นี่จะพ่ายแพ้ง่าย ๆ แต่ฉันจะพยายามทำให้ดีที่สุด

แก้ไข 1 : ตอนนี้พิมพ์ใน UTC เหมือนคำตอบของ Python เพื่อประหยัด 20 ไบต์

แก้ไข 2:การเปลี่ยนแปลงnew Date().getTime()เพื่อDate.now()ที่จะประหยัด 10 ไบต์

แก้ไข 3:เปลี่ยนMath.round(x)ไป~~(x+.5)เพื่อประหยัด 5 ไบต์

แก้ไข 4:นำออกที่ไม่จำเป็น(และ&1023)ที่เหลือจากบางรุ่นพัฒนาเก่าที่ผมสากลมากขึ้นเข้ารหัส UTF-16 เพื่อบันทึก 7 ไบต์

d=~~(Date.now()/18e5+.5)%24;d+=d<2?24:0;alert(String.fromCharCode(55357,56655+(d%2?23+d:d)/2));

JavaScript ไม่อนุญาตให้มีการอิโมจิ แต่ใน UTF-16 ซึ่ง encodes พวกเขาเป็นตัวละครทั้งสอง โชคดีที่เราสามารถนิยามมันให้เป็นตัวละครสองตัว อักขระตัวแรกยังเป็นค่าคงที่ ( 0xD83D) ในขณะที่การเปลี่ยนแปลงอื่น ๆ

ทางเลือกพิมพ์ในเวลาท้องถิ่น 137 132 125:


ไม่(d%2?23+d:d)เหมือนกันd+d%2*23ใช่ไหม
Neil

4

CJam, 50 ไบต์

"🕐":i~et3=C%60*et4=+30d/mo2m24+24%_2%24*+2/+]:c

อัลกอริธึมนั้นง่ายใช้เวลา 30 นาทีที่ใกล้ที่สุดนับจำนวน 30 นาทีที่ผ่านมาตั้งแต่ 12.00 น. / ชม. ถ้าจำนวนคี่แล้วเพิ่ม 24 ลงไปหารด้วย 2 และเพิ่มยูนิโค้ดเริ่มต้นด้วยจำนวนที่มากขึ้น จุดรหัสเพื่อให้ได้หน้าปัดนาฬิกาที่ถูกต้อง

นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณเริ่มต้นด้วย 1 น. / ชม. แทน 12 ดังนั้นลองชดเชยตรงนั้น

สำหรับวัตถุประสงค์ในการทดสอบใช้รหัสต่อไปนี้:

3:H;45:M;"🕐":i~HC%60*M+30d/mo2m48+48%_2%24*+2/+]:c

ที่3:H;เป็นส่วนหนึ่งชั่วโมงปัจจุบันและ45:M;ส่วนหนึ่งเป็นนาทีปัจจุบันของชั่วโมง เพียงแทนที่3และ45ด้วยค่าที่ต้องการ

ลองออนไลน์ได้ที่นี่

อักขระ Unicode บางตัวอาจพิมพ์อย่างถูกต้องในเวอร์ชั่นออนไลน์ขึ้นอยู่กับเบราว์เซอร์และระบบปฏิบัติการของคุณและแบบอักษรที่ติดตั้ง แต่สำหรับฉันทุกอย่างจะพิมพ์ได้ดีบน Firefox ด้วย Windows 7


@ user23013 Nice !. ฉันคิดว่าคุณควรโพสต์ว่าเป็นคำตอบที่ใหม่ที่ผมไม่ได้ทำเล่นกอล์ฟใด ๆ ในที่ :)
เพิ่มประสิทธิภาพ

3

CJam, 31 ไบต์

"🕐")et5<60b675+30/24%2mdC*++

คุณสามารถเปลี่ยนเวลาในโปรแกรมต่อไปนี้เพื่อทดสอบ:

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.