एक शब्द घड़ी प्रिंट करें


59

चूंकि मैंने कुछ साल पहले पहली बार देखा था, इसलिए मुझे हमेशा इस तरह की शब्द घड़ी से वशीभूत किया गया था, जहां समय वास्तव में शब्दों द्वारा प्रस्फुटित किया जाता है या एक सार्थक वाक्य में नहीं।

एक शब्द घड़ी

उस घड़ी पर प्रदर्शित पाठ निम्नलिखित है।

IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK

आपका काम ऐसी काम करने वाली घड़ी लिखना है। यदि वर्तमान समय में मुद्रण के लिए प्रासंगिक हैं तो केवल और केवल तभी शब्द प्रकाशित किए जाते हैं। अन्यथा, वे नीचे जला रहे हैं। शब्द मुद्रित होकर "लिट" होते हैं और शब्द की लंबाई होने के कारण कई स्थान से "लिट" हो जाते हैं।

उदाहरण: यदि वर्तमान समय 17:23 है, तो मुद्रित पाठ बिल्कुल निम्नलिखित होना चाहिए:

IT IS 
        TWENTY
FIVE MINUTES
PAST
         FIVE

नियम

  1. मुद्रित समय 12 वां संस्करण है, लेकिन एएम / पीएम के बिना।
  2. गोलाई केवल मिनटों के आधार पर की जाती है (सेकंड पूरी तरह से अप्रासंगिक हैं)। गोलाई 5. के निकटतम गुणक से की जाती है। इसलिए, उदाहरण के लिए, 17:52:38 वास्तव में 17:55 के सबसे करीब है, लेकिन चूंकि सेकंड अप्रासंगिक हैं, 17:52 वास्तव में 17:50 तक गोल है। और मुद्रित पाठ "IT IS TEN MINUTES TO SIX" (प्रासंगिक रिक्ति के साथ) है। इसलिए यदि XXपाँच का गुणक है, XXतो HH: (XX-2): 00 से HH: (XX + 2): 59 तक उपयोग किया जाएगा। शब्द MINUTESप्रकट होना चाहिए FIVE, TENया TWENTYमिनट अनुभाग ("टू" या "पेस्ट" से पहले) में जलाया जाता है।
  3. पाठ को रखने के लिए सभी अप्रासंगिक शब्दों को उतने स्थान के रूप में प्रतिस्थापित किया जाता है जहां यह ऊपर के टेम्पलेट में स्थित है। अनुगामी रिक्त स्थान की छंटनी की जा सकती है। पाठ को अपेक्षित स्थान पर रखने के लिए प्रासंगिक स्थान रखा जाना चाहिए।
  4. अनुगामी रेखाओं की छंटनी भी की जा सकती है। प्रासंगिक खाली लाइनों को अभी भी दिखाई देना आवश्यक है। उदाहरण:

    IT IS      TEN
    
         MINUTES
    PAST TWO
    
  5. जब ये मान घंटों को संदर्भित करते हैं TENतो पहली पंक्ति या FIVEतीसरी पंक्ति पर प्रकाश न डालें।

  6. आप एक इनपुट स्वीकार कर सकते हैं। यदि आप किसी इनपुट को स्वीकार करते हैं, तो इनपुट आपके इच्छित स्ट्रिंग (पूर्णांक की सूची, मूल समय, आपकी भाषा का समर्थन, ...) टाइप करने का समय होगा, लेकिन यदि वे संबंधित नहीं हैं तो किसी भी पैरामीटर की अनुमति नहीं है। छपने का समय। यदि आप कोई इनपुट का समर्थन करते हैं, तो आपको वर्तमान समय का उपयोग करना होगा। यदि आप दोनों का समर्थन करते हैं, तो यह बेहतर है लेकिन कोई बोनस नहीं है;)
  7. आपका कोड एक प्रोग्राम, एक फंक्शन, एक लैम्ब्डा हो सकता है लेकिन स्निपेट नहीं।
  8. यदि आपकी भाषा किसी भी तरह से मुद्रण का समर्थन करती है, तो उसे परिणाम प्रिंट करना चाहिए (एक फ़ाइल में, मानक आउटपुट पर, मुझे कोई आपत्ति नहीं है)। यदि आपकी भाषा किसी भी तरह से मुद्रण का समर्थन नहीं करती है, तो इसे अपेक्षित पाठ को "वापस" करने की अनुमति है। परिणाम या तो सभी अपरकेस या सभी लोअरकेस हो सकते हैं, दोनों का मिश्रण नहीं।
  9. मानक खामियां लागू होती हैं।
  10. यह कोड-गोल्फ है इसलिए सबसे छोटा कोड जीतता है!
  11. संभव के माप में, कृपया अपनी भाषा के एक ऑनलाइन दुभाषिया का लिंक प्रदान करें।

परीक्षण के मामलों

Input:  <no input> (the current local time is 19:20)
Output:     
IT IS
        TWENTY
     MINUTES
PAST 

    SEVEN

Input: 13:15
Output: (empty line is being printed)
IT IS
QUARTER

PAST
ONE

Input: 13:58
Output: (rounding)
IT IS


     TWO



       O'CLOCK

Input: 14:30
Output: (half is always a edge-case)
IT IS HALF


PAST TWO

Input: 15:35
Output: (light up "TO")
IT IS
        TWENTY
FIVE MINUTES TO

    FOUR

Input: 10:00
Output: (do not use the TEN or FIVE on the first line when referring to the hours)
IT IS





    TEN
      O'CLOCK

Input: 12:00
Output: (O'CLOCK and a lot of empty lines)
IT IS






TWELVE O'CLOCK

8
बड़ी चुनौती, मुझे यह बहुत पसंद है!
टाइमटेक १

जवाबों:


14

PHP, 387 384 353 352 342 323 310 306 298 293 291 बाइट्स

धन्यवाद @Christoph अपने उत्कृष्ट निष्कर्षों के साथ गोल्फ के लिए !
कम से कम 45 बाइट्स उसके खाते में हैं; 16 या उससे अधिक प्रेरित।

एक चमत्कार टीम ऊपर!

IT IS <?foreach([HALF,TEN,QUARTER,TWENTY,FIVE,MINUTES,TO,PAST,TWO,THREE,ONE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE,"O'CLOCK"]as$w)echo strstr([w,ghj,dhj,ej,fhj,fghj,cj,fghi,fhi,ei,dhi,ghi][$m=date(i)/5+.5].mklnopqrstuvm[date(h)-($m<7)],99+$i)?$w:$w^$w^"       ","
  "[$i++%3^$i<3];

डेटा के माध्यम से छोरों और जांचता है कि क्या वर्तमान सूचकांक एक उत्पन्न स्ट्रिंग में है जिसमें शब्दों की अनुक्रमणिका को प्रकाश में लाना है (अक्षरों को मैप किया गया है); अनुक्रमणिका के आधार पर लाइनब्रेक या स्थान जोड़ता है।

आप error_reporting(22519) के लिए डिफ़ॉल्ट मान का उपयोग नहीं करते हैं, तो उपज नोटिस कर सकते हैं ।

इसे ऑनलाइन टेस्ट करें।

टूट - फूट

IT IS <?
foreach([HALF,TEN,QUARTER,TWENTY,FIVE,MINUTES,TO,PAST,  // loop through words
TWO,THREE,ONE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE,"O'CLOCK"]as$w)
    echo strstr(                    // search word index in ...
        [w,ghj,dhj,ej,fhj,fghj,cj,fghi,fhi,ei,dhi,ghi][$m=date(i)/5+.5] // minutes & co
        .mklnopqrstuvm[date(h)-($m<7)]                          // hours (-1 if minutes<33)
    ,99+$i                          // (map 0..20 to c..w)
    )?$w:$w^$w^"       ",           // if found, print string, else print spaces
    "\n  "[$i++%3^$i<3];            // if $i in [3,5,8,...], print newline, else space

गोल्फ :

  • $x/5+.5|0दो बाइट्स से छोटा है round($x/5)
  • चर date(h)के dateपरिणाम को निर्दिष्ट करने की तुलना में दो बाइट एक बाइट से छोटी होती हैं ।
  • एक एकल वर्गीकरण का उपयोग करके उस चर को दूर किया जाता है जिसे प्रकाश-अप अनुक्रमणिका में संग्रहीत किया गया था।
  • एक बाइट के बजाए लाइट-अप इंडेक्स के लिए एक स्ट्रिंग लगभग 30 बाइट्स बचाती है ।
  • $w<Aतीन बाइट्स से कम है $w=="\n"- सुनिश्चित करें कि कोई जगह परिसीमन के बाद नहीं है!
  • abs मिनट शब्द पर 8 बाइट्स बचाया।
  • धन्यवाद @Christoph: नक्शे के लिए अक्षरों से संख्याओं की ओर बढ़ते हुए विभाजकों को अप्रचलित किया और सरणी के बजाय एक और स्ट्रिंग की अनुमति दी; बचाया 23 + 8 बाइट्स
    पहले सूचकांक के रूप में अंडरस्कोर का उपयोग करके इसे "यह" विकल्प में शामिल करने की अनुमति दी गई है; और इसने अप्रचलित घंटों के उद्धरण का प्रतिपादन किया।
  • डुप्लिकेट 1घंटे नक्शे में मूल्य सापेक्ष अप्रचलित और कहा कि अतिरिक्त गोल्फ के साथ 10 बाइट्स बचा लिया। @Christoph से प्रेरित।
  • 19 बाइट्स का मुंडन करने के बजाय लाइनब्रेक और रिक्त स्थान की गणना करना ।
  • स्ट्रिंग्स पर बिट तर्क 7 बाइट्स बचाता है: str_pad("",strlen($w))-> $w^$w^" "। (क्रिस्टोफ)
  • यदि strtrदूसरा पैरामीटर कोई स्ट्रिंग नहीं है, तो इसे ascii कोड के रूप में व्याख्या किया जाएगा। 5 बाइट्स बचाता है।

यह बहुत अच्छा है! मैंने यह सुनिश्चित करने के लिए जावा में इस कार्यान्वयन की कोशिश की कि यह प्रश्न हल करने योग्य था, लेकिन यह समाप्त हो गया इसलिए मैंने इसे छोड़ दिया और अधिक लंबा, लेकिन अधिक सरल दृष्टिकोण का उपयोग किया! इसलिए सफल होने पर बधाई देता हूं कि मैं कहां असफल रहा;)
ओलिवियर ग्रेजायर

1
बाकी की धड़कन: $i++%3^($i<3)करने के लिए $i++%3^$i<3। मैं आधिकारिक तौर पर अब पूरी तरह से बर्बाद हो गया हूं। मैं तब तक विराम लूंगा जब तक कोई हमसे मेल नहीं खाता। यह सचमुच मजेदार था। अपनी टीम वर्क के लिए धन्यवाद टाइटस!
क्रिस्टोफ

1
@Christoph तुम हो ... महान एक शब्द छोटा लगता है। \ o /
टाइटस

18

टीआई-बेसिक, 335 334 बाइट्स

बहुत ज्यादा सही है, क्योंकि TI-84 केलक्स में 8x16 अक्षर डिस्प्ले हैं, और यह 8x15 है। टीआई -84 की तुलना में पहले केलक्स का समर्थन करने के लिए तिथि को इनपुट के रूप में लिया जाता है, जिसमें आंतरिक घड़ियां नहीं होती हैं। बिना किसी तर्क के, Inputडिफ़ॉल्ट रूप से Xऔर Yके समान इनपुट प्राप्त करता है Prompt X,Y। तो Xघंटे बनो (कुछ भी >=0सही ढंग से काम करेगा) और Yमिनट हो सकते हैं।

Input 
ClrHome
int(Y/5-5.6
Output(1,1,"IT IS
If Ans=~6
Output(8,8,"O'CLOCK
If 2=abs(3-abs(Ans
Output(3,1,"FIVE
If 4=abs(Ans
Output(1,12,"TEN
If 3=abs(Ans
Output(2,1,"QUARTER
If 2=abs(Ans
Output(2,8,"TWENTY
If sum(abs(Ans)={1,2,4,5
Output(3,5,"MINUTES
If not(Ans
Output(1,7,"HALF
If Ans<1 and Ans+6
Output(4,1,"PAST
If Ans>0
Output(3,14,"TO
12fPart(12(^~1)(X+(Y>32->A
If not(Ans
12->A
{21,6,10,25,30,41,45,51,61,66,70,81
.05Ans(A
Output(int(4+Ans),20fPart(Ans),sub("ONE   TWO   THREE FOUR  FIVE  SIX   SEVEN EIGHT NINE  TEN   ELEVENTWELVE",6A-5,6

नोट 1: TI-84 + के लिए आप Inputकुछ इस तरह से बदल सकते हैं getTime:Ans(1->X:getTime:Ans(2->Y। के int(Y/5-5.6बराबर भी है round(Y/5,0)-6। और नहीं, इस मामले में int(हस्तक्षेप नहीं किया जा सकता है iPart(

नोट 2: यह इनपुट को ठीक प्रिंट करता है, लेकिन एसेटेटिक कारणों से आप प्रोग्राम समाप्ति पर संदेश Pauseसे बचने के लिए प्रोग्राम के अंत में चाहते हैं Done

संपादित करें: बाइट की गणना कम होने के कारण टोकन (पिछले संशोधन पर ध्यान दें देखें), @Neil के लिए भी एक बग तय है। तीसरा, एक बग तय किया जो मैंने खुद पाया था जिसमें 2 बाइट्स लगे होंगे लेकिन अनुकूलन ने वास्तव में 1 बाइट को बचाया, और मुझे यह भी पता चला कि मुझे इनपुट मिल रहा है इसलिए मुझे कॉल करने की आवश्यकता नहीं है getTime(डु?)। अंतिम, जो कोई भी इस बाइट की पुष्टि करना चाहता है, उसके लिए केवल दो बाइट टोकन है sub(


मुझे ऐसा लगता है कि O'CLOCKआउटपुट करने के बाद कोड आउटपुट पर PASTभी जाएगा ...
नील

2
मैं 545 बाइट्स गिनता हूं क्या आप मुझे बता सकते हैं?
क्रिस्टोफ

2
@Christoph संबंधित मेटा पोस्ट मिला: meta.codegolf.stackexchange.com/a/4764/29637
Christoph

1
@ ओलिवियरग्रेयर वास्तव में यह उस पिछली पंक्ति से संबंधित नहीं है। यह क्या कर रहा है 24-घंटे को 12-घंटे के समय और निकटतम घंटे में परिवर्तित कर रहा है (उदाहरण के लिए मिनटों के साथ गोलाई)। मूल रूप से, एक सामान्य भाषा में यह कुछ ऐसा दिखेगा, x+(y>32) mod 12यदि तुलना TI-Basic में 1 या 0 की उपज देती है।
तैमुक

1
तो @Christoph ऐसा लगता है जैसे आपने उस लिंक के साथ अपने स्वयं के प्रश्न का उत्तर दिया, क्या आप अभी भी मुझे समझाना चाहते हैं? यदि आप यह देखना चाहते हैं कि मैंने ASCII के स्विच को टोकन में कहां से किया है, तो संशोधन # 4 देखें।
तैमुक

11

जावास्क्रिप्ट (ईएस 6), 291 303 295 बाइट्स

करी सिंटैक्स के साथ दो पूर्णांकों के रूप में इनपुट लेता है (h)(m)

h=>m=>console.log(`IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK`.replace(/\S+/g,w=>(k/=2)&1?w:w.replace(/./g,' '),k=[x=1<<19,88,81,66,84,92,64.5,60,52,34,49,56,x,h=(m<33?h+11:h)%12][m/5+.4|0]*16|6|2048<<(h?h-(h<3):2)))

यह काम किस प्रकार करता है

पूरी घड़ी को 23 एलईडी के रूप में देखा जा सकता है जो चालू या बंद हैं। तो, घड़ी की स्थिति एक 23-बिट पूर्णांक है।

Bit | Word        Bit | Word
----+--------     ----+--------
00  | IT          12  | ONE
01  | IS          13  | FOUR
02  | HALF        14  | FIVE
03  | TEN         15  | SIX
04  | QUARTER     16  | SEVEN
05  | TWENTY      17  | EIGHT
06  | FIVE        18  | NINE
07  | MINUTES     19  | TEN
08  | TO          20  | ELEVEN
09  | PAST        21  | TWELVE
10  | TWO         22  | O'CLOCK
11  | THREE             

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

Minutes | Words                    | Enabled bits | Value   | Value / 8
--------+--------------------------+--------------+---------+----------
  00    | O'CLOCK                  | 22           | 4194304 | 524288
  05    | FIVE MINUTES PAST        | 6, 7, 9      | 704     | 88
  10    | TEN MINUTES PAST         | 3, 7, 9      | 648     | 81
  15    | QUARTER PAST             | 4, 9         | 528     | 66
  20    | TWENTY MINUTES PAST      | 5, 7, 9      | 672     | 84
  25    | TWENTY FIVE MINUTES PAST | 5, 6, 7, 9   | 736     | 92
  30    | HALF PAST                | 2, 9         | 516     | 64.5
  35    | TWENTY FIVE MINUTES TO   | 5, 6, 7, 8   | 480     | 60
  40    | TWENTY MINUTES TO        | 5, 7, 8      | 416     | 52
  45    | QUARTER TO               | 4, 8         | 272     | 34
  50    | TEN MINUTES TO           | 3, 7, 8      | 392     | 49
  55    | FIVE MINUTES TO          | 6, 7, 8      | 448     | 56

परीक्षण के मामलों


2
बहुत चालाक। मैं खदान से कुछ और बाइट काटने की कोशिश कर रहा था, तब मैंने यह देखा और प्रतिस्पर्धा की कोई उम्मीद नहीं है।
edc65

कार्य (नियम 8) कहता है कि इसे मुद्रित किया जाना चाहिए, न कि केवल वापस लौटाया गया
16

@smls ओह, तुम सही हो। यह तय है।
अरनुलद

बहुत ही शांत। समय को छोड़कर गलत है :-( प्रदर्शन: h = 13 मीटर = 15 वास्तविक समय: 14:43
स्ट्रॉबेरी

@ स्ट्राबेरी कृपया नियम # 6 देखें। यह क्रियान्वयन विशेष रूप से इनपुट का उपयोग कर रहा है, स्थानीय समय का नहीं।
अरनौलद

6

बैच, 789 बाइट्स

@echo off
if not "%1"=="" setlocal&set time=%1
set/a"h=%time:~0,2%,m=6%time:~3,2%%%60+2,h+=m/35,h%%=12,m=6-m/5%%12,n=m%%3,o=m%%2
set p=
set s=
call:c %m:-=% "IT IS HALF" 0 "IT IS      TEN" 4 "IT IS"
call:c %m:-=% QUARTER 3 "        TWENTY" 2 "        TWENTY" 1
if %m% lss 0 set s= TO
call:c 0 "            " %n% "     MINUTES" %o% "FIVE MINUTES"
set s=
set p=PAST 
if %m%==6 set p=     
if %m% lss 0 set p=     
call:c %h% TWO 2 "    THREE" 3
set p=
call:c %h% ONE 1 "    FOUR" 4 "          FIVE" 5
call:c %h% SIX 6 "    SEVEN" 7 "          EIGHT" 8
call:c %h% NINE 9 "     TEN" 10 "         ELEVEN" 11
if %m%==6 set s= O'CLOCK
call:c %h% TWELVE 0 "      "
exit/b
:c
set t=%1
:l
if %t%==%3 echo(%p%%~2%s%&exit/b
shift
shift
if not "%3"=="" goto l
echo(%p%%~2%s%

नोट: PASTनिम्नलिखित दो लाइनों में से प्रत्येक पर 5 के बाद और पीछे की जगह का अनुगामी स्थान।


मैंने इसे चलाया और यह ठीक है (घंटे 3 के लिए एक लापता स्थान बार)! मुझे अभी समझ नहीं आया कि क्या हो रहा है ( call:cउदाहरण के लिए)! मुझे शायद कुछ बैच सीखना चाहिए :)
ओलिवियर ग्रेजायर

@ OlivierGrégoire दुख की बात है कि एक जगह गायब हो गई थी, लेकिन अब यह तय हो गया है।
नील

4

जावास्क्रिप्ट, 567 564 551 542 529 527 519 बाइट्स

मुझे नहीं पता कि क्या तर्क के रूप में घंटे और मिनट लेना ठीक है। आपने कहा "पूर्णांक की सूची"। क्या अब भी इसकी गिनती होती है?

यह मेरी पहली गोल्फ है, वैसे। तुम क्या सोचते हो?


संपादित करें: मिनटों को विभाजित करके कुछ बाइट्स सहेजे गए। धन्यवाद, ओलिवियर!


हां, उस नियम के पीछे विचार यह है कि आप तर्क ले सकते हैं, लेकिन केवल अगर वे इनपुट से संबंधित हैं, जो प्रिंट करने का समय है।
ओलिवियर ग्रेजायर

1
गोल्फिंग के बारे में, आप शायद कुछ बाइट्स गोल्फ कर सकते हैं यदि आप अपने मिनटों को 5 से विभाजित करने पर विचार करते हैं। इसके अलावा, आप cअपने फ़ंक्शन के अंदर स्थानांतरित करना चाह सकते हैं । आप ऐसा करके किसी भी बाइट को नहीं खोना चाहिए, मुझे लगता है, लेकिन यह एक फ़ंक्शन की तुलना में इसे स्निपेट की तरह बनाता है (मेरे लिए, कम से कम, शायद जेएस गुरु अन्यथा कहेंगे)।
ओलिवियर ग्रेजायर

4

जावास्क्रिप्ट (ईएस 6) 360

इनपुट पैरामीटर घंटे (0..23) और मिनट (0..59) के साथ एक फ़ंक्शन। आउटपुट के लिए
उपयोग करना alert, क्योंकि यह जावास्क्रिप्ट में मानक आउटपुट फ़ंक्शन है, भले ही यह असुविधाजनक हो। (और छोटा)

(k,n,m=(n+2)/5|0,h=(k+(m>6))%12,i=0)=>alert(`IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK`.replace(/\S+/g,w=>[,,m-6,m-2&&m-10,m-3&&m-9,m-4&&m-8&&m-5&&m-7,m-1&&m-11&&m-5&&m-7,!(m%3),m<7|m==12,!m|m>6,h-2,h-3,h-1,h-4,h-5,h-6,h-7,h-8,h-9,h-10,h-11,h%12,m%12][i++]?w.replace(/./g,' '):w))

टेस्ट नोट: आपकी मन की शांति के लिए, टेस्ट स्निपेट में अलर्ट आउटपुट को पेज टेक्स्ट पर रीडायरेक्ट किया जाता है

F=
(k,n,m=(n+2)/5|0,h=(k+(m>6))%12,i=0)=>alert(`IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK`.replace(/\S+/g,w=>[,,m-6,m-2&&m-10,m-3&&m-9,m-4&&m-8&&m-5&&m-7,m-1&&m-11&&m-5&&m-7,!(m%3),m<7|m==12,!m|m>6,h-2,h-3,h-1,h-4,h-5,h-6,h-7,h-8,h-9,h-10,h-11,h%12,m%12][i++]?w.replace(/./g,' '):w))

function alert(x) { O.textContent=x }
function update() { F(+H.value,+M.value) }

update()
input { width:3em }
Hours<input id=H type=number min=0 max=23 value=17 oninput='update()'>
Minutes<input id=M type=number min=0 max=59 value=37 oninput='update()'>
<pre id=O></pre>


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

अद्यतन - मुझे लगभग एहसास हुआ कि आप क्या कर रहे हैं। आपके पास शून्य और गैर-शून्य तत्वों की एक सरणी है और आप iप्रत्येक रेगेक्स मैच के बाद इसे बढ़ाकर दाईं ओर संदर्भित करने के लिए उपयोग करते हैं। यदि यह सत्य है, तो आप मिलान वाले रिक्त स्थान को रिक्त स्थान से बदल देते हैं, अन्यथा आप इसे वैसे ही छोड़ देते हैं। मुझे एक बात समझ नहीं आती, हालाँकि। निर्दिष्ट फ़ंक्शन replace()के वापसी मूल्य का उपयोग करता है (इस मामले में तीर फ़ंक्शन)। आप एक मूल्य कहां लौटाते हैं? मैं सिर्फ एक टर्नरी ऑपरेटर देखता हूं।
हिस्टीरियन डोडोव

3
@HristiyanDodov सिर्फ एक एक्सप्रेशन से बना एरो फंक्शन उस एक्सप्रेशन का मान देता है। उदाहरण के (a,b)=>{ return a+b }रूप में ही है(a,b)=>a+b
edc65

4

पायथन 2, 466 , 460 , 449 , 452 , 459 449 बाइट्स

जैसा कि यह एक फ़ंक्शन को एच और एम को पूर्णांक के रूप में स्वीकार करने की अनुमति है, हम कुछ बाइट्स बचा सकते हैं। इसे ऑनलाइन आज़माएं

def t(h,m):


m=(2+m)//5
 h=h%12
 n=0
 if m>6:n,m=1,12-m;h+=1
 a="""IT IS _HALF _TEN_
 _QUARTER _TWENTY_
 _FIVE _MINUTES _TO_
 _PAST _TWO _THREE_
 _ONE _FOUR _FIVE_
 _SIX _SEVEN _EIGHT_
 _NINE _TEN _ELEVEN_
 _TWELVE _O'CLOCK""".split("_")
 b=[1,m==6,m==2,1,m==3,3<m<6,1,m in[1,5],m in[1,2,4],n*m,1,(1-n)*m,h==2,h==3,1,h==1,h==4,h==5,1,h==6,h==7,h==8,1,h==9,h==10,h==11,1,h==0,m==0]
 for i,c in enumerate(a):
  if b[i]:print c,
  else:print' '*len(c),

मेरे पास TO/ PASTबनाम के लिए कुछ बग (अब निश्चित) हैं O'CLOCK। इसके बदले , और enumerateबदलने के लिए कुछ बाइट्स भी सहेजे गए । मिनटों की तुलना में 5-मिनट के विखंडू में काम करने के लिए एक और 8 को बचाया। रॉड ने कुछ और बगों की ओर इशारा किया जिनकी कीमत मुझे काफी कम थी, लेकिन मैंने अधिक कुशल असाइनमेंट और मेरे पक्ष में काम करने वाले बगफिक्स के साथ थोड़ा ठीक किया।import19<m<26m in [20,25]


@Titus के PHP उत्तर से एक चाल लेता है। मैं अजगर की ==तुलना में हार रहा हूं और मुझे लगता है कि मैं कुछ hपरीक्षणों में सुधार कर सकता हूं
क्रिस एच

आप केवल print cअंतिम पंक्ति पर, cपहले से ही a[i]नियत हो सकते हैंenumerate
रॉड

1
आउटपुट स्वरूप टूट गया है, printप्रत्येक प्रिंट के बाद एक नई पंक्ति जोड़ें, आप इसे जोड़ने के ,बाद दबा सकते हैं c। इसके अलावा इसे खाली जगहों को प्रिंट करना चाहिए जब कोई शब्द मुद्रित नहीं होता है, तो आप अंतिम में एक और के साथ ठीक कर सकते हैं यदिelse:print' '*len(c),
रॉड

1
उतरते समय बाइट्स का क्रम बेहतर होता है।
गुरुपाद ममदापुर

@ रोड, बग-स्पॉट्स के लिए धन्यवाद, भले ही यह इसे अधिक लंबा बनाता है
क्रिस एच

2

पर्ल 6 , 308 296 293 बाइट्स

->\h,\m{my \n=round(m/5)%12;say "IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK".subst: /\S+/,{++$==1|2|(0,7,4,5,6,(6|7),3)[min n,12-n]|8*?(n%3)|(23,10,9)[(n+5)/6]|(13,11,12,|(14..*))[(h+m/33-1)%12]??$_!!" "x.comb},:g}

इसे ऑनलाइन आज़माएं!

व्याख्या

मूल संरचना इस प्रकार है:

-> \h, \m {                             # A lambda taking two args (hour and minute).
    my \n = round(m / 5) % 12;          # Index from 0 to 11, representing the minutes.
    say "...".subst: /\S+/, {           # Print the template with each word replaced:
        ++$ == ...|...|...|...          # If counter equals one of expected indices,
            ?? $_                       # then replace the word with itself,
            !! " " x .comb              # else replace it with spaces.
    }, :g                               # (Use global matching.)
}

...|...|...|...उपरोक्तानुसार अभिव्यक्ति , 1-आधारित शब्द सूचकांकों का प्रतिनिधित्व करने वाले पूर्णांकों का एक जंक्शन है, और इसे निम्नानुसार बनाया गया है:

  1|2                                   # IT IS
| (0,7,4,5,6,(6|7),3)[min n,12-n]       # FIVE / TEN / QUARTER / TWENTY / TWENTY FIVE / HALF
| 8*?(n%3)                              # MINUTES
| (23,10,9)[(n+5)/6]                    # O'CLOCK / PAST / TO
| (13,11,12,|(14..*))[(h+m/33-1)%12]    # ONE / TWO / THREE / FOUR / FIVE / SIX / SEVEN / ...

2

पायथन 3, (569 बाइट्स)

इस उत्तर के लिए प्रारूप hh mm (स्पेस अलग किए गए पूर्णांक) में समय की आवश्यकता होती है। मैं '\ n' मुद्रित करने में कामयाब रहा, जो क्रिस के तरीके से प्रेरित है। धन्यवाद, क्रिस! कोड को कम करने में कोई मदद की सराहना की है।

H,M=input().split()
w="""HALF _TEN_
_QUARTER _TWENTY_
_FIVE _MINUTES _TO_
_PAST _TWO _THREE_
_ONE _FOUR _FIVE_
_SIX _SEVEN _EIGHT_
_NINE _TEN _ELEVEN_
_TWELVE _O'CLOCK""".split("_")
h,m=int(H),int(M)
if h>12:h-=12
m=(m//5+1)*5 if m%5>2.5 else m//5*5
if m>30:
    m=60-m
    h=(h+1)%12
X=[m==30,m==10,1,m==15,m in[20,25],1,m in[5,25],m not in[0,15,30],int(M)>30 and m!=0,1,m!=0 and int(M)<31,h==2,h==3,1,h==1,h==4,h==5,1,h==6,h==7,h==8,1,h==9,h==10,h==11,1,h in[0,12],m==0]
t="IT IS "
for i in range(0,28):
    if(X[i]):t+=w[i]
    else:t+=" "*len(w[i])
print(t.strip())

यह ऑनलाइन की कोशिश करो


क्या आप w को एक स्ट्रिंग में जोड़ सकते हैं और फिर उपयोग कर सकते हैं .split(',')? कुछ को बचाना चाहिए।
एलपीड्रो

अपने इनपुट को भी उसी रूप में लें H,M=input()जहां इनपुट H, M है। नियमों के तहत दो पूर्णांक अनुक्रम की अनुमति है, निश्चित नहीं है कि यह पायथन 3 के तहत काम करता है। मैं अभी भी एक 2 आदमी हूं :-)
एलपेड्रो

धन्यवाद @ElPedro .Saved 57 बाइट्स। H,M=input()जैसे ही आप पर संदेह हुआ, काम नहीं किया।
एफिशोडर

1

पायथन 2 , 443 440 बाइट्स

R=range
w="HALF TEN QUARTER TWENTY FIVE MINUTES TO PAST TWO THREE ONE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE O'CLOCK".split(' ')
h=[10,8,9]+R(11,20)
c=['IT','IS']+[' '*len(x)for x in w]
i,j=input()
i=(i,i+1)[j>30]%13-1
j=int(round(j/5.0)*5.0)%60
for z in[[20],[4,5,7],[1,5,7],[2,7],[3,5,7],[3,4,5,7],[0,7],R(3,7),[3,5,6],[2,6],[1,5,6],R(4,7)][j/5]:c[z]=w[z]
c[h[i]]=w[h[i]]
x=0
for y in[4]+R(6,22,3)+[23]:print' '.join(c[x:y]);x=y

इसे ऑनलाइन आज़माएं!

यह शायद अभी भी कुछ और गोल्फ से लाभ उठा सकता है। इनपुट पूर्णांक की एक सूची है जैसे 7,23 = 7:23


1

SimpleTemplate , 737 708 बाइट्स

हाँ, वाचालता और "वास्तविक" गणित की कमी से बायटेकाउंट बुरी तरह आहत होता है।

{@seth argv.0}{@php$DATA[m]=ceil($DATA[argv][1]/5)*5%60|0}{@ifm}{@ifm is30}{@setA"HALF"}{@/}{@if"@[15]0$@"is matchesm}{@setB"TEN"}{@/}{@if"@[14]5$@"is matchesm}{@setC"QUARTER"}{@/}{@if"@[24]0$@"is matchesm}{@setD"TWENTY"}{@/}{@if"@^[25]?5$@"is matchesm}{@setE"FIVE"}{@/}{@if"@^([235]?5|[1245]0)$@" is matchesm}{@setF"MINUTES"}{@/}{@ifm is greater30}{@setG"TO"}{@else}{@setH"PAST"}{@/}{@else}{@setU"O\'CLOCK"}{@/}{@setZ"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE"}{@setY"J"}{@incbyh Y}{@php$DATA[$DATA[Y]]=$DATA[Z][$DATA[h]]}{@print"IT IS%-6s%s\n%8s%s\n%-5s%-7s %s\n%4s %3s %s\n%3s %4s %s\n%3s %5s %s\n%4s %3s %s\n%6s %s",A,B,C,D,E,F,G,H,J,K,I,L,M,N,O,P,Q,R,S,T,U}

यह वर्ग पर 1 और 2 के पैरामीटर के रूप में घंटे और मिनटों की अपेक्षा करता है।


Ungolfed:

{@set hour argv.0}

{@//The bitwise is required for the `@if minutes is 30`}
{@//Otherwise, I would be forced to write `@if minutes is equal to 30`}
{@php $DATA['minutes'] = ((ceil($DATA['argv'][1] / 5) * 5) % 60) | 0}

{@if minutes}
    {@if minutes is 30}
        {@set A "HALF"}
    {@/}
    {@if "@[15]0$@" is matches minutes}
        {@set B "TEN"}
    {@/}
    {@if "@[14]5$@" is matches minutes}
        {@set C "QUARTER"}
    {@/}
    {@if "@[24]0$@" is matches minutes}
        {@set D "TWENTY"}
    {@/}
    {@if "@^[25]?5$@" is matches minutes}
        {@set E "FIVE"}
    {@/}
    {@if "@^([235]?5|[1245]0)$@" is matches minutes}
        {@set F "MINUTES"}
    {@/}
    {@if m is greater than 30}
        {@set G "TO"}
    {@else}
        {@set H "PAST"}
    {@/}
{@else}
    {@set U "O\'CLOCK"}
{@/}


{@set numbers "", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE"}
{@set key "J"}
{@inc by hour key}
{@php $DATA[$DATA['key']] = $DATA['numbers'][$DATA['hour']]}

{@print "IT IS%-6s%s\n%8s%s\n%-5s%-7s %s\n%4s %3s %s\n%3s %4s %s\n%3s %5s %s\n%4s %3s %s\n%6s %s", A, B, C, D, E, F, G, H, J, K, I, L, M, N, O, P, Q, R, S, T, U}

कैसे चलाएं:

  1. Https://github.com/ismael-miguel/SimpleTemplate से कोड प्राप्त करें
  2. निम्नलिखित कोड चलाएँ:

    <?php
        include 'SimpleTemplate.php';
    
        $template = new SimpleTemplate('<code>');
    
        $template->render($hour, $minutes);
    
        //system-time: $template->render(date('g'), date('i'));
    
  3. किया हुआ!


1

जावा (ओपनजेडके 9) , 437 बाइट्स

(h,m)->{h=(h+m/35+11)%12+1;Object[]s="HALF TEN QUARTER TWENTY FIVE MINUTES TO PAST TWO THREE ONE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE O'CLOCK".split(" ");for(int i=s.length,M[]={1<<20,176,162,132,168,184,129,120,104,68,98,112};i-->0;)s[i]=(7<i&i<20?h==i-(h>3?7:h>1?6:9):(M[(m+2)/5%12]&(1<<i))>0)?s[i]:"";System.out.printf("IT IS %4s %3s%n%7s %6s%n%4s %7s %2s%n%4s %3s %5s%n%3s %4s %4s%n%3s %5s %5s%n%4s %3s %6s%n%6s %7s",s);}

इसे ऑनलाइन आज़माएं!

मुझे लगा कि मैं आखिरकार अपनी चुनौती पर शॉट दूंगा;)


1

पर्ल 5 , 487 449 बाइट्स

($a,$_,$h)=localtime;s/[3-7]$/5/;s/[12]$/0/;$m=s/(.?)[89]$/($1+1)*10/er;$_="IT IS half ten
quarter tw
five minutes to
past 2two 3three
1one 4four 5five
6six 7seven 8eight
9nine 10ten 11eleven
12twelve oc";if($m>30){s/to/TO/;$h++;$m=60-$m}elsif($m){s/past/PAST/}$h=$h%12||12;$m!=30?$m%15?s/m\w+/uc$&/e:$m?s/q\w+/uc$&/e:s/oc/O'CLOCK/:s/half/HALF/;$m%10&&!/Q/&&s/five/FIVE/;$m>15&&$m<30?s/tw/TWENTY/:$m==10&&s/ten/TEN/;s/\b$h\w+/uc$&/es;y/a-z0-9/ /;say

इसे ऑनलाइन आज़माएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.