वर्तमान समय में चलाए जाने पर घड़ी इमोजी के सबसे करीब लौटें


20

मेरे पास if/elseप्रत्येक 30 मिनट के लिए एक बड़ी स्थिति हो सकती है लेकिन मैं अधिक गणित और यूनिकोड आधारित समाधान की तलाश कर रहा हूं।

यहाँ घड़ी इमोजीस हैं: is यदि आपके पास उचित रेंडरिंग सपोर्ट की कमी है, तो आप उन्हें नीचे देख सकते हैं (वे उसी क्रम में नहीं हैं और वे आपको जो दिखते हैं, वह अलग-अलग दिख सकते हैं) या यूनिकोड चार्ट , पृष्ठ 4 पर। वे यूनिकोड कोडपॉइंट्स U + 1F550 (CLOCK) के अनुरूप हैं U + 1F567 (CLACE FACE TWELVE-THIRTY) के माध्यम से फेस वन लॉक)।

आपकी चुनौती एक ऐसे कार्यक्रम को लिखना है जो वर्तमान सिस्टम समय (AM और PM को समान माना जाना चाहिए) के निकटतम घड़ी चेहरे इमोजी के आउटपुट देता है। उदाहरण के लिए यदि समय t[5:15 <t <5:45) है, तो आप 5:30 इमोजी प्रदर्शित करेंगे।

यह कोड-गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है। आप आसानी से अपने कोड का परीक्षण करने के लिए समय निर्दिष्ट करने का एक तरीका शामिल करना चाह सकते हैं।

एज टेस्ट के मामले

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

यहां छवि विवरण दर्ज करें


7
यह प्रश्न वर्तमान में यहाँ विषय पर नहीं है, लेकिन यह शायद एक आसान समाधान है। आपको एक वस्तुनिष्ठ जीत की स्थिति की आवश्यकता होती है, लेकिन यदि आप प्रश्न कोड-गोल्फ को टैग करते हैं तो विजेता वही होगा जो कोई सबसे छोटा प्रोग्राम लिखता है। यह निर्दिष्ट के तहत भी थोड़ा सा है, लेकिन आप कह सकते हैं "एक स्क्रिप्ट जो घड़ी इमोजी को चालू समय के निकटतम निकटतम आउटपुट करती है" और यह पर्याप्त होना चाहिए। इसके अलावा, जबकि तकनीकी रूप से आवश्यक नहीं है, मैं सुझाव दूंगा कि आप अन्य भाषाओं में सबमिशन की अनुमति दें। (कोई व्यक्ति संभवत: बैश में एक करेगा।)
भूमिगत

विंडोज कमांड प्रॉम्प्ट
इमोजिस का

2
मैंने आपके पोस्ट को नियमों को स्पष्ट करके और इसे कोड गोल्फ बनाकर हमारे मानकों को पूरा करने का प्रयास करने के लिए संपादित किया है। अगर मैं किसी भी चीज़ की गलत व्याख्या करता हूं तो इसे संपादित करने के लिए स्वतंत्र महसूस करें।
निन्जाबियरमोनकी

3
Xx: 15 और xx: 45 को कैसे गोल किया जाना चाहिए?
पीटर टेलर

1
@PeterTaylor जैसा कि परीक्षण के मामलों में देखा गया है, उन्हें गोल किया जाना चाहिए (यानी 1:45 => 2:00)
NinjaBearMonkey

जवाबों:


9

रूबी - 61 54 बाइट्स

पायथन 3 - 79 77 75 74 बाइट्स

संपादित करें: पता 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

मूल पायथन 3 संस्करण:

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

वर्तमान समय यूटीसी प्रिंट करता है। अजगर 2 का chrकेवल 0-255, और unichrकेवल 0-65535 स्वीकार करता है । पायथन 3 में, /हमेशा फ्लोटिंग-पॉइंट डिवीजन होता है और //हमेशा पूर्णांक विभाजन होता है।


आप से कोष्ठक कटौती कर सकते हैं 12*(a%2)यदि आप इसे अन्य आदेश में कार्य करें: a%2*12
xnor

7

बैश + कोरुटिल्स, 60 बाइट्स

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

इमोजी ओएसएक्स टर्मिनल पर ठीक प्रस्तुत करता है, लेकिन लिनक्स (उबंटू 14.04) के लिए आपको करना होगा sudo apt-get install ttf-ancient-fonts

अलग-अलग समय के परीक्षण के लिए, -d $timeतिथि कमांड में डालें । उदाहरण के लिए परीक्षण 12:59:

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

5

जावास्क्रिप्ट - 137 117 107 102 95

यह आसानी से पिटने वाला है, लेकिन मैं यहां सिर्फ अपना सर्वश्रेष्ठ प्रयास करूंगा।

EDIT 1 : अब UTC में प्रिंट करता है जैसे पायथन 20 बाइट को बचाने के लिए उत्तर देता है।

EDIT 2: 10 बाइट बचाने के लिए बदला new Date().getTime()गया Date.now()

EDIT 3: 5 बाइट बचाने के लिए बदला Math.round(x)गया ~~(x+.5)

EDIT 4: अनावश्यक को हटा दिया गया (और &1023)कुछ पुराने विकास संस्करण से छोड़ दिया गया जहां मैंने 7 बाइट्स को बचाने के लिए अधिक सार्वभौमिक UTF-16 एन्कोडिंग किया।

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

जावास्क्रिप्ट करता emojis के लिए अनुमति देते हैं, लेकिन UTF-16 है जो उन्हें दो पात्रों के रूप में कूटबद्ध। सौभाग्य से, हम उन्हें केवल दो पात्रों के रूप में परिभाषित कर सकते हैं; पहला चरित्र भी स्थिर ( 0xD83D) है, जबकि दूसरा बदलता है।

वैकल्पिक, स्थानीय समय में प्रिंट, 137 132 125:


के (d%2?23+d:d)रूप में ही नहीं है d+d%2*23?
नील

4

सीजेएम, 50 बाइट्स

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

एल्गोरिदम सरल है, निकटतम 30 मिनट का समय है, गणना करें कि 12 AM / PM से कितने 30 मिनट बीत चुके हैं, यदि संख्या विषम है, तो इसमें 24 जोड़ें, 2 से फर्श विभाजित करें और प्रारंभिक यूनिकोड को बढ़ाएं कोड सही घड़ी चेहरा पाने के लिए इंगित करता है।

इसके अलावा, सुनिश्चित करें कि आप 12 के बजाय 1 AM / PM से शुरू करते हैं इसलिए वहां एक ऑफसेट लें।

परीक्षण उद्देश्यों के लिए, निम्नलिखित कोड का उपयोग करें:

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

जहां 3:H;भाग वर्तमान घंटे है और 45:M;भाग घंटे का वर्तमान समय है। बस वांछित मूल्य के साथ बदलें 3और 45

इसे यहाँ ऑनलाइन आज़माएँ

आपके ब्राउज़र और OS और इंस्टॉल किए गए फोंट के आधार पर सभी यूनिकोड वर्ण ऑनलाइन संस्करण पर सही ढंग से प्रिंट नहीं हो सकते हैं। लेकिन मेरे लिए, विंडोज 7 के साथ फ़ायरफ़ॉक्स पर सभी ठीक हैं।


@ user23013 अच्छा !. मुझे लगता है कि आपको एक नए उत्तर के रूप में पोस्ट करना चाहिए क्योंकि मैंने उस में कोई गोल्फिंग नहीं किया :)
ऑप्टिमाइज़र

3

सीजेएम, 31 बाइट्स

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

आप इसका परीक्षण करने के लिए निम्न कार्यक्रम में समय बदल सकते हैं:

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.