बिग बेन बोंग जाते हैं


45

आपका काम बिग बेन (ट्विटर) की नकल करने का एक कार्यक्रम बनाना है ।

कार्य

जब भी कोई नया घंटा शुरू हुआ है (आपके कंप्यूटर के स्थानीय समय या यूटीसी के अनुसार), आपको BONGबार- hourबार (शब्दों के बीच की जगह के साथ ) आउटपुट देना होगा। उदाहरण के लिए, जब यह 3 ओ की घड़ी है, तो आपको आउटपुट करना होगा BONG BONG BONG। समय प्रारूप 12-घंटे के समय के प्रारूप का अनुसरण करता है, अर्थात 12 बजे की घड़ी के बाद, हमारे पास 1 और 13. नहीं है। कार्यक्रम / समारोह हमेशा के लिए चलना चाहिए।

उदाहरण:

कोष्ठक के अंदर सामान का उत्पादन न करें

(start: 00:34 for example)
BONG               (01:00)
BONG BONG          (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG               (01:00 again)
(...)
(it continues forever)

नियम

  • प्रत्येक श्रृंखला को BONGएक नई रेखा से अलग किया जाना चाहिए
  • अग्रणी / अनुगामी नई सूचियों की अनुमति है
  • हालांकि प्रमुख / अनुगामी रिक्त स्थान रहे हैं नहीं की अनुमति दी
  • सबमिशन हमेशा के लिए चलना चाहिए
  • आपका आउटपुट घंटे की शुरुआत से from 3 सेकंड मुद्रित हो सकता है
  • आप किसी भी विशिष्ट घंटे में चलाए जाने वाले कार्यक्रम को नहीं मान सकते हैं

यह , इसलिए सबसे कम बायटेकाउंट जीत के साथ कार्यक्रम!


6
इन सबमिशन का परीक्षण मजेदार होने वाला है ...: D
FlipTack

3
12/24 के लिए हम 0 बोंग्स या 12 बोंग्स प्रिंट करते हैं?
माल्टीसेन

6
+1 एक चुनौती के लिए जो आसानी से समर्पित कोड-गोल्फ भाषाओं पर हावी नहीं होती है।
फिलिप

2
यदि 1859 से पहले सिस्टम घड़ी वापस घाव है तो प्रोग्राम को कैसे व्यवहार करना चाहिए?
Amani Kilumanga

3
परीक्षण के लिए LD_PRELOAD हैक ओवरराइडिंग टाइम फ़ंक्शन का उपयोग कर सकते हैं: github.com/vi/timeskewTIMESKEW="60 1"मिनटों को सेकंड की तरह प्रवाहित करता है।
वि।

जवाबों:


2

05AB1E , 43 बाइट्स

3600žcžb60*+->Lvw}["BONG "ža<12%>×,5°36*.W]

इसे ऑनलाइन आज़माएं! (योग्य यह काम नहीं करेगा, यह 60 सेकंड में मध्यांतर होगा। इसके लिए 05AB1E दुभाषिया डाउनलोड करें)

स्पष्टीकरण:

3600žcžb60*+->                          # Get amount of seconds (plus one) until next hour
              Lvw}                      # Wait said amount of seconds
                  [                     # Infinite loop start
                   "BONG "ža<12%>×,     # Print "BONG " multiplied by the amount of hours (12-hour clock)
                               5°36*.W  # Wait an hour (3600000 milliseconds)
                                      ] # Infinite loop end  

मुझे गोल्फ में कुछ समय लगा! मैं इसे थोड़ा और अधिक गोल्फ करने में सक्षम हो सकता हूं, लेकिन यह धड़कता है *><>, इसलिए यह अच्छा है :)

त्वरित संस्करण:

1Uw["BONG "X<12%>×,wX>U]

शुरू होने पर एक सेकंड का इंतजार करेंगे, और बोंग्स के बीच एक सेकंड का


देरी के लिए क्षमा करें, मुझे अंततः आपके कार्यक्रम को स्थानीय रूप से चलाने के लिए मिला। अच्छी तरह से किया, यह विशेष रूप से एक एसोलंग के लिए अच्छा है!
क्रिस्ति लिथोस

18

दे घुमा के, 71, 70, 69 बाइट्स

संपादन:

  • अनुकूलित नींद अंतराल गणना थोड़ा, -1 बाइट;
  • Xargs के साथ बदला हुआ बैकटिक्स, -1 बाइट (धन्यवाद @ jrtc27!)।

golfed

sleep `date +3600-%s%3600|bc`;yes BONG|sed $(date +%I)q|xargs;exec $0

व्याख्या की

#Compute the number of seconds left in the current hour and wait.
sleep `date +3600-%s%3600|bc`; 

#Print "hour" (1-12) worth of "BONG" strings, one per line,
#use xargs to merge them into a single space-separated string.
yes BONG|sed $(date +%I)q|xargs

#Re-execute itself (in the same process).
exec $0

परीक्षण संस्करण

घंटों के बजाय मिनटों के साथ काम करता है

sleep `date +60-%s%60|bc`;yes BONG|sed $(date +%I)q|xargs;exec $0

2
@zeppeIin मैं आपकी पूजा करने के प्राथमिक लक्ष्य के साथ इस समुदाय में शामिल हुआ। आपका समाधान बहुत डरपोक चाल से भरा हुआ है, मैं अभी भी yes BONG|sed 12q
अजीब से चिल्ला

@neonzeon वाह :)
zeppelin 20

आप 1 बाइट को एक्सरे से पाइप करके शेव कर सकते हैं, जिसे डिफ़ॉल्ट रूप से ईको कहते हैं। पाइप के लिए 1 + xargs के लिए 5 - बैकटिक्स के लिए 2 - गूंज के लिए 4 - अंतरिक्ष के लिए 1 = -1 बाइट।
jrtc27

@ jrtc27 यह एक उत्कृष्ट सलाह है! धन्यवाद !
जेपेलिन

8

* <<> , 48 47 44 बाइट्स

>s?um?uhc%:?!c21.O
v$o" GNOB"oooo$1-:?!
\aofS

यहाँ कोशिश करो! ( या यह संस्करण जो परीक्षण के लिए हर मिनट करता है )

यह BONGकितने घंटे (और 13 1, आदि) के आधार पर रिक्त स्थान द्वारा अलग किए गए s की संख्या है । फाइनल के बाद कोई अनुगामी स्थान नहीं है BONG, और अनुगामी न्यूलाइन है।

तकनीकी रूप से यह हमेशा के लिए नहीं चलता (लेकिन यह मूल रूप से होता है)। यह प्रति दिन ~ 28 बाइट्स (इंटरप्रेटर ओवरहेड की अनदेखी ...) लीक करता है। 1GiB को लीक होने में ~ 105062 साल लगेंगे।

इंटरप्रेटर ओवरहेड के लिए लगभग, स्टैक सिर्फ float64गोलंग दुभाषिया पर एस का एक टुकड़ा है । तो मैंने बस 28*8प्रति दिन 224 बाइट्स के साथ आने के लिए किया । मैंने इस संख्या को बाइट्स की संख्या को एक गिबिबाइट (1073741824) में विभाजित किया, फिर 365 को अनुमानित किया कि 1 GiB को लीक करने में 13132.85 साल लगेंगे।

दुभाषियों के बारे में ध्यान दें

जावास्क्रिप्ट में ऑनलाइन दुभाषिया है। पृष्ठ उस समय खुला और दृश्यमान होना चाहिए, जिस समय वह वर्तमान में है और बोंग का उत्पादन करता है। Golang दुभाषिया ऐसी कोई सीमा नहीं है।

व्याख्या

Main loop:

s?um?u          O     if seconds == 0 && minutes == 0:
      hc%               push hours % 12 (bongs) to the stack
         :?!c           if bongs is 0, push 12 to the stack
             21.        jump to "output bongs" coords (2, 1)


Output bongs:

Begins at `"` because of the jump.

   " GNOB"            push "BONG " to the stack
          oooo        output "BONG"
              $1-     subtract 1 from bongs
v                :?!  if bongs == 0, move to "newline and sleep"
 $o                   output " "


Newline and sleep:

\                     mirror the IP to the right
 ao                   output a newline
   fS                 sleep for 1.6s
\                     mirror to main loop

भाषा की व्याख्या करने वाले के लिए स्थानीय समयक्षेत्र ऑनलाइन क्या है? क्योंकि जब मेरे लिए एक नया घंटा था, तो यह कुछ भी आउटपुट नहीं करता था
क्रिति लिथोस

@KritiiLithos, दुर्भाग्यवश ऑनलाइन दुभाषिया के लिए पेज खुला होना चाहिए और यह काम करने के लिए दृश्यमान होना चाहिए। मुझे लगता है कि यह एक जावास्क्रिप्ट / ब्राउज़र सीमा है। आपको इसके ऑनलाइन होने या इसके बारे में चिंता करने की ज़रूरत नहीं है क्योंकि दुभाषिया स्वयं जावास्क्रिप्ट में है, आप इसे स्वयं डाउनलोड कर सकते हैं यदि आप चाहते थे! गोलंग दुभाषिया हालांकि कुछ भी काम करता है। असुविधा के लिए क्षमा करें, मैं उत्तर स्पष्ट कर दूंगा।
redstarcoder

1
इस चुनौती को जीतने के लिए बधाई! यह एकमात्र गोल्फिंग-लैंग है जिसने इस चुनौती को पूरा किया है और यह प्रभावशाली है :)
क्रिस्ति लिथोस

@ क्रिकटी लिथोस धन्यवाद !! यह पहली चुनौती है जो मैंने जीती है: D
redstarcoder

7

जावास्क्रिप्ट (ईएस 6), 99 93 बाइट्स

f=_=>setTimeout('alert("BONG ".repeat(new Date/36e5%12|0||12).trim(f()))',36e5-new Date%36e5)

यह UTC समय का उपयोग करता है (जो वास्तविक चीज़ के साथ ऊपर है)। कोड की अप्रतिष्ठित प्रकृति के कारण, आप निम्न कार्य कर सकते हैं जो समान कार्य करता है, लेकिन हर 60 सेकंड में:

f=_=>setTimeout('alert("BONG ".repeat(new Date/36e5%12|0||12).trim(f()))',6e4-new Date%6e4)

f()

यहां एक बोनस 99-बाइट संस्करण है जो स्थानीय समय का उपयोग करता है:

f=_=>setTimeout('alert("BONG ".repeat(new Date().getHours()%12||12).trim(f()))',36e5-new Date%36e5)

यह (स्निपेट) alertमेरे लिए हर मिनट (लेकिन एस की संख्या BONGसही है), लेकिन कार्यक्रम को हर घंटे केवल आउटपुट के लिए माना जाता है
क्रिक्टी लिथोस

@KritiiLithos "कोड की सबसे अस्थिर प्रकृति के कारण, आप निम्न कार्य कर सकते हैं जो समान काम करता है, लेकिन हर 60 सेकंड:" ;-)
ETHproductions 19

6

जावास्क्रिप्ट (ईएस 6), 125 123 117 115 बाइट्स

5 बाइट बचाने के लिए @ Flp.Tkc को धन्यवाद!

2 और बाइट्स बचाने के लिए @BenAston का धन्यवाद!

a=eval(b=`(new Date).getHours()`);setInterval(w=>eval(b)!=a?console.log(Array(++a%12+1).join`BONG `.trim()):"",1e3)

स्नैक स्निपेट

a=eval(b=`(new Date).getHours()`);setInterval(w=>eval(b)!=a?console.log(Array(++a%12+1).join`BONG `.trim()):"",1e3)


1
@ बीनस्टोन को धन्यवाद देने के लिए धन्यवाद :)
क्रिस्ति लिथोस

1
@ बेनेस्टन यह पहली अर्ध-
उपनिवेश के

5

बैच, 142 बाइट्स

@timeout/t>nul 1
@if not %time:~3,5%==00:00 %0
@set/ah=-%time:~0,2%%12
@set s=............
@call set s=%%s:~%h%%%
@echo %s:.=BONG %
@%0

चूंकि फ़ाइल एक अनंत लूप के रूप में चलती है, इसलिए मैं 1s देरी से शुरू करता हूं, क्योंकि मुझे किसी भी तरह से बैंग्स के बाद की आवश्यकता होती है, और यह सीपीयू चक्र बचाता है। >nulएक बाइट (बचाने के लिए सावधानी से स्थिति में है 1>nul1 का कारण होगा पुनर्निर्देशन द्वारा खाया जा करने के लिए)। हम तब तक लूप करते हैं जब तक कि मिनट और सेकंड दोनों शून्य न हो जाएं। नेगेटिव आवर मॉडुलो 12 को ले कर बोग्स का निर्माण किया जाता है, और h12-कैरेक्टर स्ट्रिंग से अंतिम वर्णों की मांग की जाती है । जब hशून्य होता है तो यह वास्तव में हमें पूरी स्ट्रिंग देता है, इसलिए 12 बोंगे। इसके बाद अक्षर को शब्द के साथ बदलने के लिए पर्याप्त है BONG। जब इसे चलाया जाता है तो यह कुछ ऐसा दिखता है (ध्यान दें कि छवि लूप नहीं है, इसलिए आपको एनीमेशन को फिर से देखने के लिए मजबूर करने की आवश्यकता होगी):

नमूना आउटपुट


क्या आप इसे चलाने और आउटपुट देने का एक gif प्रदान कर सकते हैं?
कृतिका लिथोस

1
@KritiiLithos यकीन नहीं है कि आप यहाँ क्या देख रहे हैं; मैं घंटे से पहले और बाद में स्क्रीनशॉट ले सकता हूं और एनिमेटेड जीआईएफ में 11 मिनट तक की देरी कर सकता हूं, लेकिन मैं यह नहीं देखता कि यह कैसे साबित होता है।
नील

मैं एक
जिफ़ के

@KritiiLithos कुछ इस तरह ठीक है?
नील

बहुत अच्छा, मैं इसके लिए आपका शब्द ले लूँगा :)
क्रिस्सी लिथोस

5

बैश + लिनक्स क्रॉस्टैब, 90

मैं उम्मीद कर रहा था कि यह अन्य शेल उत्तरों से छोटा होगा। फिर भी, मुझे लगता है कि यह एक दिलचस्प तरीका है:

for i in {0..11};{
s+=\ BONG
echo "0 $i,$[i+12] * * * echo$s>/proc/$PPID/fd/1"
}|crontab -

स्क्रिप्ट एक बार चलती है, क्रॉस्टैब को पॉप्युलेट करती है, फिर बाहर निकलती है। हालांकि, क्रोनोजर से आउटपुट उस टर्मिनल को भेजा जाता है जहां से स्क्रिप्ट चलाई गई थी। मुझे लगता है कि यह संतुष्ट करता है कि सबमिशन को हमेशा के लिए चलना चाहिए

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

यह Ubuntu 16.04 पर काम करता है, जो डिफ़ॉल्ट रूप से विक्सी का उपयोग कर रहा है cron


मैंने इसे चलाया और कुछ "मेल" मिला। जब मैंने मेल को चेकआउट किया, BONGतो आवश्यकता से अधिक एक था ।
कृति लीथोस

@ कृतिलीथोस थॉट्स विषम। आप किस लिनक्स डिस्ट्रो का उपयोग कर रहे हैं? जो cronआप उपयोग कर रहे हैं?
डिजिटल ट्रॉमा

मैं एक मैक पर हूँ, रुको, यह लिनक्स नहीं है
क्रिक्सी लिथोस

@ कृतिलिथोस यूप ;-) यह उत्तर लिनक्स पर निर्भर करता है /proc/<PID>/fd/<N>
डिजिटल ट्रॉमा

3

रूबी, 112 99 बाइट्स

loop{sleep 2;n=Time.now;if(n.min==0);puts ('BONG '*n.strftime('%I').to_i).chop;sleep 60-n.sec end}

पुराना संस्करण

loop{sleep(2);n=Time.now; if(n.min.zero?) then puts ('BONG ' * n.strftime('%I').to_i).chop;sleep(60-n.sec) end}

सुझावों के लिए QPaysTaxes का धन्यवाद


@ Flp.Tkc ओह, हाँ, अच्छा कैच! अंतिम चरित्र को हटाना भूल गए
जतिन धनखड़

मैं माणिक नहीं जानता, लेकिन कार्यक्रम को नए घंटे की शुरुआत के 3 सेकंड के भीतर आउटपुट करना होगा। मुझे नहीं लगता sleep(60)कि ऐसा होता है
क्रिक्टी लिथोस

@KritiiLithos हम प्रोग्राम को हर 3 सेकंड में सुला सकते हैं और फिर कैक्युलेशन लूप कर सकते हैं -> हर 3 सेकंड में जागो; समय की जाँच करें और सामान?
जतिन धनखड़

@ जतिनधनखर या आप इसे 2 सेकंड के लिए सुला सकते हैं (बस कुछ सांस लेने की जगह देने के लिए)
क्रिति लिथोस

@KritiiLithos हाँ, धन्यवाद की तुलना में 2 सेकंड के लिए बदलाव
जतिन धनखड़

3

चेडर v1.0.5, 162 बाइट्स

चेडर का कोई अंतर्निहित समय पाठक / cmd आउटपुट रीडर नहीं है, इसलिए मुझे सुधार करना पड़ा!

golfed:

var f=->{IO.exec("time/t>c");(String::IO.read("c")).split(":")};var a=f()[0];for(;1;){var b=f();if(b[0]!=a){var c=Number::(a=b[0]);print("BONG "*c).head(5*c-1);}}

Ungolfed:

var f=->{
    IO.exec("time/t>c");
    (String::IO.read("c")).split(":")};
var a=f()[0];
for(;1;){
    var b=f();
    if(b[0]!=a){
        var c=Number::(a=b[0]);
        print("BONG "*c).head(5*c-1);
    }
}

स्पष्टीकरण:

चेडर के सीमित मानक पुस्तकालय के कारण, समय उत्पन्न करने के लिए मुझे cmd का उपयोग करना पड़ा। मैंने इसे "समय / टी" के आउटपुट को बचाकर किया, जो 12 घंटे के प्रारूप में समय को प्रिंट करता है, "सी" नामक फ़ाइल में। IO.read एक बफ़र देता है जिसे मैंने एक स्ट्रिंग में डाला और ":" द्वारा सुनिश्चित किया गया कि यह सुनिश्चित किया गया है कि घंटा हमेशा सूचकांक शून्य में हो। मैंने उस पूरे ऑपरेशन को एक लंबोदर अभिव्यक्ति में बचाया, जिसने मुझे 44 बाइट बचाए। उस बिंदु के बाद यह तर्क में जाता है "यदि संग्रहीत घंटे वर्तमान घंटे के बराबर नहीं है, तो पिछले घंटे को वर्तमान में सेट करें और बोंग एन बार प्रिंट करें, अनुगामी स्थान को ट्रिम करें।"

चेडर कम से कम क्रिया भाषा नहीं हो सकता है लेकिन इस तरह से वर्कअराउंड खोजने में मज़ा आ सकता है!

अफसोस की बात है कि यह केवल एक विंडोज-सॉल्यूशन है।

संपादित 1: "0 <1" के स्थान पर "1" की जगह दो बाइट्स सहेजे गए। मुझे इस भाषा में सत्य का मूल्यांकन करने के लिए 1 उम्मीद नहीं थी!


3

माणिक, 82 81 बाइट्स

loop{l=Time.new
puts ("BONG "*(l.hour%12+1)).chop if(l+1).hour!=l.hour
sleep 1}

हर सेकंड हम जाँचते हैं कि क्या यह घंटे के अंतिम है, और उसके अनुसार घंटा है। शायद कुछ गंदे चालों के साथ आगे बढ़ाया जा सकता है, लेकिन मैं बहुत ज्यादा नहीं जानता। इसके अलावा यह अन्य रूबी जवाब की तुलना में अलग तरह से काम करता है।

एक बाइट QPaysTaxes के सौजन्य से धन्यवाद बचा।


रूबी में उतरने की जरूरत है। यह गोल्फिंग के लिए पायथन की तुलना में थोड़ी कम क्रिया लगती है।
ElPedro

क्या आपको तुरंत बाद अंतरिक्ष की आवश्यकता है if?
निक हार्टले

@QPaysTaxes मैं आपको धन्यवाद नहीं देता। मैं putsउस एक के बारे में भूल जाने के बाद अंतरिक्ष के बारे में इतना पागल था ।
बोर्सुन्हो 18

3

पायथन 2 , 105 106 बाइट्स

import time
h=0
while 1:
 l=time.localtime();c=l[3]%12
 if l[4:6]==(0,0)and h!=c:print('BONG '*c)[:-1];h=c

संपादित करें

@ Pinkfloydx33 से फीडबैक के बाद <by to! = में से एक बाइट जोड़ा। अच्छी जगह।

जितना संभव हो उतना स्थानीय रूप से परीक्षण किया जाता है लेकिन यह TIO पर काम नहीं करता है क्योंकि यह (जाहिर है) 60 सेकंड की निष्पादन सीमा से अधिक है। कृपया स्थानीय रूप से परीक्षण करने के लिए स्वतंत्र महसूस करें :-)

btw, कि pesky अनुगामी अंतरिक्ष खोने मुझे 7 बाइट की लागत अन्यथा यह 100 से कम होता।

टीआईओ की अनुपस्थिति में यहां एक घंटे के इंतजार के बाद उत्पादन होता है। प्रोग को 15:27 पर प्रिंट (12 घंटे के प्रारूप) के समय को दिखाने के लिए अतिरिक्त डिबग कोड के साथ शुरू किया गया था।

python bigben.py
time is 4:0:0
BONG BONG BONG BONG
time is 5:0:0
BONG BONG BONG BONG BONG

बहुत सीधा लेकिन यहाँ जो भी दिलचस्पी है के लिए एक स्पष्टीकरण है।

import time                 #Import the time module
h=0                         #Create a variable to store the hour that has just been printed
while 1:                    #Loop forever
 l=time.localtime()         #Get the local time from the time module
 c=l[3]%12                  #Set a variable to the current hour in 12 hour format
 if l[4:6]==(0,0)and h!=c:   #If minutes=0 and hours=0 and the last hour that was printed is not the current hour
  print "time is "+`c`+":"+`l[4]`+":"+`l[5]`    #Debug code to show hour
  print('BONG '*c)[:-1]     #Print 'BONG '*number of hours and lose the space from the end 
  h=c                       #Update the last hour that was printed

1
आप केवल यह देख सकते हैं कि मिनट 0: l [4] == 0and h <c हैं।
कार्रा

अब जब मुझे लगता है कि यह छोटी समस्या है कि अगर आप 20:00:01 को टाइमर शुरू करते हैं तो यह काम नहीं करता है। मिनट शून्य होंगे, सेकंड नहीं और यह बोंग्स प्रिंट करेगा
कार्रा

यह कुछ भी आउटपुट नहीं करता है जब मैं इसे स्थानीय स्तर पर चलाता था
Kritii Lithos

@KritiiLithos पता नहीं क्यों आपको कोई आउटपुट नहीं मिलता है। मैं उबंटू 14 और पायथन 2.7.9 पर हूं। आगे चर्चा करने के लिए इसे चैट पर ले जाना चाहते हैं?
एलपेड्रो

2
क्या यह कार्य ११ ह-> १२ ह से होता है। (12% 12 = 0)? लगता है 11>0, तो h>cया मैं कुछ याद कर रहा हूँ?
Pinkfloydx33

3

पायथन 3 - 100 97 92 बाइट्स

from time import*
while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])[:-1])

स्पष्टीकरण:

import time;
while 1:
 t=time;x=3600;
 t.sleep(x-t.time()%x);#sleep for the remaining seconds until the next hour
 print(('BONG '*int(t.strftime("%I")))[:-1])#strftime("%")=nr of hours (1-12). Print the bongs and remove the last char

from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1]) 93 बाइट्स है
रोमन ग्रैफ

मुझे नहीं लगता कि आपको पहली पंक्ति के अंत में अर्धविराम की आवश्यकता है।
निक हार्टले

पीछे हटा दिया;
कार्रा

92 बाइट्स यदि आप from time import*की तरह, इस
FlipTack

टिप के लिए धन्यवाद, मैंने इसे जोड़ा है। हर दिन अजगर के बारे में नई बातें सीखना :)
कैरा

2

सी, 238 बाइट्स

#include<time.h>
#include<unistd.h>
i,j;f(){time_t t=time(0);struct tm l=*localtime(&t);for(;;){t=time(0),l=*localtime(&t),j=l.tm_hour;sleep(1);if(!(l.tm_min+l.tm_sec)){j=j%12?j<12?j:j-12:12;for(i=0;i<=j;i++)printf("BONG%c",i^j?32:10);}}}

मुझे यकीन नहीं है कि यह सही ढंग से काम करता है, और मैं मोबाइल हूं, और मेरे फोन में सी कंपाइलर नहीं है। (केवल UNIX- जैसी प्रणालियों पर काम करता है)


जब मैंने इसे आज़माया तो यह अनंत उत्पादन (न्यूलाइन्स) बना रहा था
क्रिस्सी लिथोस

@KritiiLithos हाँ, मैं उस भाग को हटाना भूल गया जिसका मैं अब उपयोग नहीं करता। क्या आप 7 मिनट में परीक्षण कर सकते हैं? :)
19

fके बजाय main? यह कैसे काम करना है?
थॉमस पैड्रॉन-मैकार्थी

1
@ थॉमसपैड्रॉन-मैकार्थी मुझे पूरा यकीन है कि एक कार्यक्रम प्रदान करना, एक पूर्ण कार्यक्रम के विपरीत, ठीक है।
निक हार्टले

2

श, 66 बाइट्स

yes 'echo `yes BONG|sed $(date +%I)q`'|sh -s|awk '$0!=a&&a;{a=$0}'

व्याख्या की

#Pipe a command into a subshell repeatedly
yes 'some command'|sh -s

#Print "hour" (1-12) worth of "BONG" strings, one per line,
#use backticks to merge them into a single space-separated string.
#(stolen from zeppelin's answer)
echo `yes BONG|sed $(date +%I)q`

#Print every time the output changes
awk '$0!=a&&a;{a=$0}

यह प्रोग्राम चलने के तुरंत बाद प्रिंट करता है, इसे ऐसा नहीं करना चाहिए। एक नया घंटा शुरू होने पर कार्यक्रम को केवल आउटपुट करना होगा
क्रिकटी लिथोस

वही समस्या अभी भी दिखाई देती है
क्रिस्सी लिथोस

@ कृतिलिथोस माय बैड। मेरे पास केवल स्पष्टीकरण और बाइट काउंट था, वास्तविक कोड नहीं।
रेनर पी।

अब जो कुछ शेष है वह मेरे लिए घंटे पर इसका परीक्षण करने के लिए है
क्रिति लिथोस

@KritiiLithos के %Iसाथ बदलें %Mऔर यह मिनटों के लिए काम करता है।
रेनर पी।

1

सी, 198 बाइट्स

#import<time.h>
h,i;f(){time_t t=time(0);struct tm l=*localtime(&t);for(h=l.tm_hour;;t=time(0),l=*localtime(&t))if(h-l.tm_hour%12){h=l.tm_hour%12;for(i=h?h%12:12;--i;)printf("BONG ");puts("BONG");}}

1

जावास्क्रिप्ट ईएस 6 87 बाइट्स

संपादित करें: new Date/36e5%12|0||126 बाइट को बचाने के लिए बेशर्मी से @ETHProductions का कोड

setInterval('Date().match`:00:00`?alert("BONG ".repeat(new Date/36e5%12|0||12)):5',1e3)


1

आर, 104 105 बाइट्स

f=format;repeat{Sys.sleep(1);q=Sys.time();if(f(q,"%M%S")=="0000")print(rep("BONG",as.double(f(q,"%I"))))}

प्रत्येक सेकंड, यह परीक्षण करना चाहिए कि क्या हम एक घंटे के अंत में हैं, तो उस राशि को प्रिंट करें BONG


जब प्रोग्राम चलाया जाएगा तो यह प्रोग्राम आउटपुट कब देगा 12:00:01?
कृति लिथोस

मैं आर नहीं जानता, लेकिन कार्यक्रम को नए घंटे की शुरुआत के 3 सेकंड के भीतर आउटपुट करना होगा। मुझे यकीन नहीं है कि अगर Sys.sleep(60)ऐसा होता है
क्रिस्ति लिथोस

आप while(1)द्वारा प्रतिस्थापित कर सकते हैं repeat
प्लेनैपस

नींद का अंतराल सही होने के लिए घंटे के बाद अनुग्रह अवधि से कम होना चाहिए। Sys.sleep (2) के बारे में कैसे?
न्यूकोडर

1
@newcoder प्रत्येक लूप को यह 1 सेकंड के लिए सोता है, क्योंकि अन्यथा यह BONGकेवल एक बार के बजाय 1 सेकंड के लिए प्रिंट करेगा । यह सुनिश्चित करना है कि यह प्रति सेकंड केवल एक बार जांच करे।
JAD

1

जावास्क्रिप्ट ES2015, 100 99 98 96 94 88 बाइट्स

h=_=>new Date/36e5%12|0,p=h();for(;;)h()!=p&&(p=h(),alert('BONG '.repeat(p||12).trim()))

स्पष्टीकरण:

hएक फ़ंक्शन है जो शेष ऑपरेटर ( %12) का उपयोग करके दिन के 12-घंटे-आधारित घंटे प्राप्त करता है । 36e5वर्णों को सहेजने के लिए घातीय वाक्यविन्यास का उपयोग करके एक घंटे में मिलीसेकंड की संख्या है। newऑपरेटर की आवश्यकता नहीं है कि कोष्ठकों कार्यों के साथ उपयोग किया जाता है अगर कोई तर्क हैं, इसलिए new Date। जावास्क्रिप्ट में केवल अस्थायी अंक अंकगणित है,| बिटवाइज़ या ऑपरेटर संख्या को पूर्णांक बनाने के लिए बाध्य करता है क्योंकि JS बिटवाइज़ ऑपरेटर IEEE 754 फ़्लोटिंग पॉइंट द्वारा प्रदर्शित संख्याओं के पूर्णांक सबसेट के साथ काम करते हैं।

अल्पविराम उप-अभिव्यक्तियों को चित्रित करता है। pवर्तमान घंटे ( p=h()) के लिए आरंभिक है ।

for(;;) का उपयोग बार-बार जांचने के लिए किया जाता है कि क्या कोई है BONG एस को सतर्क किया जाना चाहिए। जाँच के रूप में तेजी से रनटाइम अनुमति देगा के रूप में किया जाता है।

यदि घंटा बदल गया है ( h()!=p), तो हम पी को अपडेट करते हैं और फिर एस को अलर्ट करते हैं BONG। तार्किक और ऑपरेटर का उपयोग एक गार्ड के रूप में किया जाता है (यह शॉर्ट-सर्किट यदि है h()===p) तो यह निर्धारित करने के लिए कि क्या BONGआउटपुट हैं।

String.prototype.repeatES2015 में नया है और ES5 की तरह कुछ का उपयोग कर कुछ पात्रों को बचाता है Array.prototype.join

h12 (यानी 12pm, 12am) के सटीक गुणकों के लिए शून्य देता है, इसलिए हम तार्किक OR का उपयोग करके इसे 12 में बदलते हैं p||12

विचारों के लिए कृति लिथोस और ETHProductions के लिए धन्यवाद।


मुझे लगता है कि आप अंतिम अर्ध-
कॉलोनी

1

एक्सेल VBA, 143 बाइट्स

VBE इमीडिएट विंडो में कोड आउटपुट

Sub b:Do:n=Now
If Minute(n)=0 Then:s="":For i=1To Hour(n) Mod 12:s=s &"BONG ":Next:Debug.?Trim(s):Application.Wait n+#0:1#:End If:Loop:End Sub

मजेदार संस्करण, 143 बाइट्स (गैर-प्रतिस्पर्धात्मक)

हालांकि बोंग जाने के लिए एक्सेल प्राप्त करना मुश्किल होगा, लेकिन जाने के लिए एक्सेल प्राप्त करना बहुत सीधा है BeepBeepकॉल एक बीप ध्वनि, और घंटे का संकेत उत्पादन बीप करने के लिए इस का उपयोग करता है नीचे कोड, घंटे पर, 1 सेकंड रुक जाता है से अलग कर दिया पैदा करता है।

ऊपर के रूप में, यह कोड बनाता है एक्सेल अप्रतिसादी दिखाई देता है और :DoEventsपहली पंक्ति के अंत में एक कॉल जोड़ने की सिफारिश की जाती है क्योंकि यह उपयोगकर्ता अनुभव को बेहतर बनाता है, हालांकि, सही कोड निष्पादन के लिए यह आवश्यक नहीं है।

Sub b:Set a=Application:Do:n=Now
If Minute(n)=0 Then:For i=1To Hour(n) Mod 12:Beep:a.Wait(Now+#0:0:1#):Next:a.Wait(n+#0:1#):End If:Loop:End Sub

Ungolfed संस्करण

Public Sub BigBen()
    Dim i As Byte
    Dim n As Date
    Dim w As Worksheet
    Dim a As Excel.Application
    Set a = Application
    Set w = a.ThisWorkbook.Sheets(1)
    Let w.Name = "Big Ben"

    Let w.[A1] = Now
    w.Columns("A:A").AutoFit

    Do
        DoEvents
        Let n = Now
        If Minute(n) = 0 Then

            ''  Print BONG
            Let s = ""
            For i = 1 To Hour(n) Mod 12 Step 1
                Let s = s & "BONG "
            Next i
            Debug.Print Trim(s)

            ''  Go Beep
            For i = 1 To Hour(n) Mod 12 Step 1
                Beep
                a.Wait (Now + #12:00:01 AM#) ''  <- #0:0:1# resolves to #12:00:01 AM#
            Next i

            ''  Keep Ticking After Going BONG
            While Now < n + #12:01:00 AM#    ''  <- #0:1# resolves to #12:01:00 AM#
                Let w.[A1] = Now
                Let a.StatusBar = IIf(Second(Now) Mod 2, "Tick", "Tock")
                DoEvents
            Wend
        End If

        ''  Tick Tock until its time to Go BONG again
        Let a.StatusBar = IIf(Second(n) Mod 2, "Tick", "Tock")
        Let w.[A1] = Now
    Loop

End Sub

क्या गैर-विंडोज कंप्यूटर पर इसका परीक्षण करना संभव है? यदि नहीं, तो क्या नया घंटा शुरू होने पर आप आउटपुट का gif प्रदान कर सकते हैं?
क्रिक्टी लिथोस

पूरी तरह से ईमानदार होने के लिए, मुझे तुरंत यकीन नहीं है। एक लिनक्स मशीन पर इस कोड का परीक्षण करना संभव नहीं होगा, लेकिन मैक पर इसे ठीक से काम करना चाहिए । हालाँकि, यह हो सकता है कि Beepया DoEventsमैक मशीन पर कॉल्स ठीक से काम न करें।
टेलर स्कॉट

0

सी # 234 बाइट्स

मैं यहां कोई पुरस्कार जीतने की योजना नहीं बना रहा हूं, लेकिन एक C # कार्यान्वयन अनिवार्य है।

using System;
using System.Linq;namespace B{class P{static void Main(){Func<int> h=()=>DateTime.Now.Hour % 12;var p=h();while (true){var t=h();if (t!=p)Console.WriteLine(string.Concat(Enumerable.Repeat("BONG",t== 0?12:t)));p=t;}}}}

टिप्पणियों के साथ अपुष्ट:

using System;
using System.Linq;

namespace B
{
    class P
    {
        static void Main()
        {
            Func<int> h = () => DateTime.Now.Hour % 12; // h(): the hour in the range [0, 11], making this a lambda saves a few chars
            var p = h(); // p: Previous time
            while (true)
            {
                var t = h(); // t: Current time
                if (t != p) // If current hour is different to previous hour
                    Console.WriteLine(string.Concat(Enumerable.Repeat("BONG", t == 0 ? 12 : t))); // Print "BONG" t times (also correcting t = 0 to 12)
                p = t; // Current time is now previous time
            } // Repeat ad nauseum
        }
    }
}

1
उपयोग करें for(;;), बदलें h=()=>1+(DateTime.Now.Hour-1)%12;(नोट व्हॉट्सएप या तो) और फिर Enumerable.Repeat हो जाता है ("BONG",t)(आपको या तो दो या तीन बचाता है) तो अतिरिक्त व्हाट्सएप से छुटकारा पाएं अर्थात if(...)यह भी ध्यान दें कि सभी बॉट्स को संक्षिप्त रूप से प्रिंट किया जाएगा, संभवत: उन बाइट बचत को संक्षिप्त रूप में शामिल होने के लिए। अपने पहले तर्क के रूप में एक स्थान के साथ।
Pinkfloydx33

0

ग्रूवी, 72 बाइट्स

{x={new Date().getHours()};y=x();while(1){if(y!=(y==x()){print "BONG "*y}}​}​​​

कैसे?

वर्तमान घंटे प्राप्त करने के लिए एक विधि स्टोर करें।

x={new Date().getHours()};

शुरुआती घंटे स्टोर करें।

y=x();

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

while(1){if(y!=(y==x()){print "BONG "*y}}

%12गैर-सैन्य सीमाओं के लिए +3 बाइट्स ।


0

पर्ल, 60 बाइट्स

अपडेट करें

के " "साथ प्रतिस्थापित $", हटाए गए CORE::, सुधारा गया गिनती।

गोल्फ़

say join$",(BONG)x(time/3600%12||12)while sleep -time%3600+1

इसके साथ चलने की जरूरत है perl -E

टिप्पणियों

  • पर्ल में, (जहां एक एकल स्टेटमेंट है) के x while yबराबर है लेकिन कोष्ठक की आवश्यकता नहीं है। कुछ भी मुद्रित होने से पहले पहली बार निष्पादित किया जाता है।while(y){x}xsleep
  • timeUTC का उपयोग करता है। मूल बिग बेन मार्च के अंत से अक्टूबर के अंत तक गर्मियों के समय (ब्रिटिश ग्रीष्मकालीन समय, BST) पर है।
  • एक सेकंड प्रतीक्षा समय में जोड़ा जाता है ताकि यह सुनिश्चित किया जा सके कि कार्यक्रम कम से कम एक सेकंड का इंतजार कर रहा है। इसका मतलब यह है कि बोंग्स को हमेशा एक सेकंड देर से प्रिंट किया जाएगा, जो कि नियमों के अनुसार कानूनी है। मान लीजिए कि आप वेस्टमिंस्टर ब्रिज पर खड़े हैं, ca. बिग बेन से 300 मी। प्लस साइड पर, इसका मतलब यह भी है कि यह कार्यक्रम सही मात्रा में बोंग प्रिंट करेगा यदि इसे ठीक एक घंटे की शुरुआत में शुरू किया जाता है (3600 सेकंड प्रतीक्षा करने के बजाय)।
  • sleepप्रतीक्षा की गई सेकंड की संख्या देता है। यह हमेशा सच होगा।

1
२ बातें। 1 , मुझे पूरा यकीन है कि -Eझंडा +1 बाइट है (झंडे को मापने के बारे में कहीं पृष्ठ है ...)। 2 , मुझे यकीन नहीं है कि कैसे इसे चलाने के perl -E golf.plलिए तुरंत समाप्त करने के लिए प्रकट होता है।
redstarcoder

0

QBIC , 82 बाइट्स

X=$left$|(_d,2){Y=left$$|(_d,2)~Y<>X|x=!Y!%12~x=0|x=12]B=C[x|B=B+@BONG |]?_tB|]X=Y

कोड शाब्दिकों के लिए वास्तव में टोकन को बदलने की जरूरत है ( $) और एक विकल्प सुविधा लागू करें (left$(x,y) छोटी हो सकती है) को लागू करें।

आंतरिक कामकाज:

In the first part, we want to set X$ to the hour-component
of our system's time. The DATE is implemented in QBIC, but
Substring (LEFT$, RIGHT$ and MID$ in QBasic) is not (yet).
We need to use the QBasic LEFT$ function, and QBIC can do 
that using a 'code literal': everything from '$' to '|'
is not parsed by QBIC but passed on to QBasic.
X=               Set X$ to
$left$|(         the leftmost (note the '$' and '|' for the code literal)
_d,2)            2 characters of TIME$ (hh:mm format)
{                DO - infinite loop
Y=left$$|(_d,2)  Set Y$ in the same way
~Y<>X            If Y$ is not equal to X$ the hour has changed
|x=!Y!%12        THEN set x to the modulo 12 of Y$ cast to number
~x=0|x=12]       If Y% happens to be divisible by 12, set x to 12
B=C              Clear B$ (c$ never gets assiged a value)
[x|B=B+@BONG |]  For the given number of hours, add "BONG " to B$
?_tB|            Print B$, trim the trailing space
]                end if
X=Y              Update X$
<DO LOOP is implicitly closed>

अद्यतन (NC): $अब QBICs निर्देश सेट में उपयोग नहीं किया जाता है, इसलिए अब इसे कोड शाब्दिक की आवश्यकता के बिना QBasic के लिए कोड के रूप में स्वतंत्र रूप से उपयोग किया जा सकता है। इस स्थिति में, यह 4 बाइट्स बचाता है, QBIC को 78 बाइट्स में लाता है:

X=left$(_d,2){Y=left$(_d,2)~Y<>X|x=!Y!%12~x=0|x=12]B=C[x|B=B+@BONG `]?_tB|]X=Y

0

स्माइलबासिक, 74 67 बाइट्स

WAIT 61TMREAD OUT H,M,S?("BONG"+" BONG"*((H+11)MOD 12))*!(M+S)EXEC.

बड़ी संख्या में "अनुगामी" लाइन टूट जाती है;)

संपादित करें: बेहतर 24-> 12 घंटे के एल्गोरिथ्म के साथ 7 बाइट्स को बचाया।


0

PHP, 63 बाइट्स

मैं विस्तारित ASCII के साथ दो और बाइट्स बचा सकता था। लेकिन मैं वर्तमान में इसके लिए बहुत आलसी हूं।

for(;;sleep(1))+date(is)?:print str_pad("
",5*date(h),"BONG ");

पूर्ण घंटे में एक प्रमुख लाइनब्रेक के साथ बोंग्स को प्रिंट करता है। के साथ भागो -nr


आपको अपने बाइटेकाउंट में झंडे को शामिल करना होगा
क्रिति लिथोस

@ कृतिलीथोस नो आई डोन्ट। -nएक तरह का निहितार्थ (अनदेखा php.and डिफ़ॉल्ट डिफ़ॉल्ट मानों पर वापस आता है); -rPHP को कमांड लाइन पैरामीटर से फाइल के बजाय कोड चलाने के लिए कहता है।
टाइटस

आह, मेरा बुरा, मैं PHP नहीं जानता।
क्रिति लिथोस

0

सी, 152

int a=0,i,L=25;main(){char s[9];for(i=-1;++i<48;){sprintf(s,"%02i:00:00",i);if(!strcmp(s,__TIME__)&&i!=L)a=L=i,i=-1;printf(a-->0?"BONG ":"\n");}main();}

पठनीय:

int a=0,i,L=25;

main(){
    char s[9];
    for(i=-1;++i<48;){
        sprintf(s,"%02i:00:00",i);
        if(!strcmp(s,__TIME__)&&i!=L)
            a=L=i,i=-1;
        printf(a-->0?"BONG ":"\n");
    }
    main();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.