यह एक घड़ी की चुनौती का समय है!


25

मैं आपको इस प्रारूप में समय प्रदर्शित करने वाली घड़ी बनाना चाहता हूं:

18 ----------
19 --------------------------------------------------

यह '18: 10 'प्रदर्शित करता है। वर्तमान घंटे और अगले घंटे को लाइन के सामने दिखाया गया है, इसके बाद एक स्थान और कई डैश हैं: पहली पंक्ति में इस घंटे में जितने मिनट बीत चुके हैं, और दूसरी पंक्ति से पता चलता है कि कितने और मिनट इस घंटे में जाने के लिए।

स्पष्टीकरण देना

  • घड़ी को सिस्टम के समय को प्रदर्शित करना चाहिए। यदि किसी अन्य स्रोत से समय प्राप्त करना अधिक सुविधाजनक है, तो यह ठीक है। यह इनपुट के रूप में आपूर्ति नहीं की जा सकती है
  • पर 18:00, शीर्ष रेखा बस है 18(अनुगामी रिक्त स्थान अनुमत है लेकिन आवश्यक नहीं है)
  • सबसे 18:59नीचे, रेखा है19 -
  • घंटे <10 या तो एक 0( 01 -----) या दाएं-संरेखित ( 1 -----) के साथ पूर्व-पेड हैं । बाएं-संरेखित एकल अंक की अनुमति नहीं है, भले ही डैश सही स्थान पर शुरू हो ( 1 -----अमान्य है)।
  • घड़ी को 24-प्रारूप में घंटे प्रदर्शित करना चाहिए।
  • हालाँकि इसे 24 वाँ प्रारूप कहा जाता है, वास्तव में इस 24पर कोई बात नहीं है। 23 वें घंटे के दौरान, दूसरी पंक्ति के साथ शुरू होता है 00या 0
  • प्रदर्शन को एक मिनट में कम से कम एक बार अपडेट करने की आवश्यकता होती है, लेकिन यह ठीक 00सेकंड में नहीं होता है । यदि आप अधिक सुविधाजनक हैं, तो आप अधिक बार / लगातार अपडेट कर सकते हैं, लेकिन परिणाम निश्चित रूप से अभी भी सुपाठ्य हो सकता है - स्क्रीन पर एक धब्बा नहीं।

इनपुट

कोई नहीं।

उत्पादन

  • जैसा ऊपर बताया गया है। 60-ईश पोजीशन में घड़ी को पैड करने के लिए ट्रेलिंग स्पेस दोनों लाइनों पर अनुमति दी गई है, एक ट्रेलिंग न्यूलाइन की भी अनुमति है।
  • अगले मिनट को प्रदर्शित करते समय स्क्रीन को साफ करने की आवश्यकता है: या तो स्पष्ट स्क्रीन कमांड के साथ या 30 से कम नई सुर्खियों को जोड़कर।

अतिरिक्त नियम


क्या हमारे पास संख्या और डैश के बीच दो स्थान हो सकते हैं?
आदाम १m

6
"एक मिनट में एक बार अपडेट किया गया" - क्या इसे अधिक बार अपडेट किया जा सकता है?
SMLS

1
@smls हाँ, आप जितनी बार चाहें अपडेट कर सकते हैं। मैं ऐनक को 'कम से कम एक बार एक मिनट' में बदल दूंगा।

1
@KritiiLithos दो-अंकीय घंटों (9, 10 या 23, 00) के साथ संरेखण को तोड़ देगा, इसलिए नहीं, अनुमति नहीं है।

1
23 के बाद, अगले घंटे 24 या 0 है?
कृतिका लिथोस

जवाबों:


2

MATL , 41 बाइट्स

गलती को नोट करने के लिए @Kundor को धन्यवाद, अब सही किया गया

`XxFT"4&Z'@+24\OH&YAO'-'60@*5&Z'-|Y"hhD]T

MATL ऑनलाइन पर यह कोशिश करो ! लेकिन ध्यान दें कि कार्यक्रम 30 सेकंड के बाद मारा जाता है, इसलिए आउटपुट में किसी भी परिवर्तन को पकड़ना मुश्किल है।

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

`           % Do...while
  Xx        %   Clear screen
  FT        %   Push [0 1]
  "         %   For each k in [0 1]
    4&Z'    %     Push current hour
    @+      %     Add k
    24\     %     Modulo 24. This transforms 24 into 0
    OH&YA   %     Convert to base-10 string with 2 digits
    O       %     Push 0. Concatenating with chars will convert this to char,
            %     and char(0) will be displayed as a space
    '-'     %     Push '-'
    60@*    %     Push 60*k
    5&Z'    %     Push current minute
    -|      %     Absolute difference. This gives current minute for k==0,
            %     or 60 minus that for k==1
    Y"      %     Repeat '-' that many times
    hh      %     Concatenate the top three elements into a string
    D      %      Display
  ]         %   End
  T         %   Push true
            % End (implicit). Since the top of the stack contains true, this
            % gives an infinite loop

मुझे हो सकता है, लेकिन दूसरी पुनरावृत्ति पर, केवल शीर्ष रेखा मुद्रित होती है ...
steenbergh

@steenbergh यह मेरे लिए घंटों और मिनटों के बजाय मिनट और सेकंड के साथ काम करता है, इसलिए परिवर्तन आसानी से देखे जाते हैं: matl.suever.net/…
लुइस

1
हां, काम करता है। - वास्तव में, यह मेरी अपनी घड़ी की लाइनों 3 और 4 के रूप में अच्छा हो सकता है।

@steenbergh: आपने इस उत्तर को स्वीकार कर लिया है, लेकिन यह मान्य नहीं है - यह 23 के 24 के बाद के घंटे को दिखाता है। मेरा मानना ​​है कि सबसे कम सही उत्तर मान स्याही द्वारा रूबी एक है।
निक

@kundor ध्यान देने के लिए धन्यवाद। 3 बाइट्स की लागत पर सही
लुइस मेन्डो

11

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

" 
Repeat 99<length(Ans
Ans+"-
End
Ans→Str1
Repeat 0
getTime
ClrDraw
Ans{Ans(1)≠24,1,1
Text(0,0,Ans(1),sub(Str1,1,1+Ans(2
Text(6,0,Ans(1)+1,sub(Str1,1,61-Ans(2
End

अपेक्षाकृत सरल। यह शुरुआत में एक स्थान के साथ एक स्ट्रिंग है। घंटे सही-संरेखित हैं। यह केवल TI-84 + कैलकुलेटर पर काम करता है क्योंकि TI-83 में आंतरिक घड़ी नहीं है।

संपादित करें: ध्यान देने के लिए धन्यवाद @kundor कि मैंने आखिरी लूप बंद नहीं किया है। अब तय (+2 बाइट्स)।

# 2 संपादित करें: पहला घंटा शून्य होना चाहिए, चौबीस नहीं। +14 बाइट्स की लागत पर सही।


हर कमांड को एक बाइट के रूप में गिना जाता है?
सिगमेई

@Sygmei अधिकांश टोकन एक बाइट हैं, हाँ। हालांकि, इस तरह के रूप में टोकन Str1, getTimeऔर sub(दोनों एक बाइट्स हैं। आप tibasicdev.wikidot.com/tokens
Timtech

आप एक एमुलेटर के लिए एक लिंक नहीं होगा, क्या आप करेंगे?

मैं cemetech.net/projects/jstified की अनुशंसा करूंगा लेकिन याद रखें कि जब तक आप स्वयं उस प्रकार के कैलकुलेटर के स्वामी नहीं होंगे, तब तक इस एमुलेटर के साथ इंटरनेट से ROM का उपयोग करना नैतिक रूप से गलत है।
टाइमटेक

1
लिंक पर क्लिक करने से डरें नहीं, क्योंकि एमुलेटर वैध है और काम करने से पहले आपको अपनी खुद की रॉम अपलोड करने के लिए कहता है। TI उन्हें स्वतंत्र रूप से उपलब्ध था, लेकिन वे अब और नहीं हैं। यदि आप किसी दोस्त से TI-84 पा सकते हैं, तो यह सबसे अच्छा विकल्प होगा।
टिमटेक १

9

बैच, 197 बाइट्स

@echo off
set/ah=100+%time:~0,2%,m=1%time:~3,2%
cls
call:l
set/ah=(h-3)%%24+100,m=260-m
call:l
timeout/t>nul 60
%0
:l
set s=%h:~1% 
for /l %%i in (101,1,%m%)do call set s=%%s%%-
echo %s%

नोट: 10 वीं पंक्ति में एक अनुगामी स्थान है। मेरे लिए, %time%एक अग्रणी स्थान के साथ घंटे प्रारूपित करता है लेकिन एक अग्रणी शून्य के साथ मिनट। मैंने तय किया कि एक प्रमुख शून्य एक आसान आउटपुट स्वरूप था, क्योंकि मुझे इसके लिए 100 घंटे जोड़ना है और पहला अंक निकालना है। मिनट के रूप में मुश्किल हैं 08या 09अष्टाधारी पार्स त्रुटियों का कारण होगा, इसलिए मैं 1प्रभावी रूप से 100 मिनट जोड़ने के लिए उपसर्ग करता हूं, इसके लिए लूप को उचित रूप से ऑफसेट करके समायोजित करता है, जो कि 100 को घटाकर बाइट से कम है।


7

पायथन 3.6, 110 114 112 बाइट्स

from time import*
while[sleep(9)]:h,m=localtime()[3:5];print('\n'*50+'%2d '%h+'-'*m+f'\n{-~h%24:2} '+'-'*(60-m))

इस नए च-स्ट्रिंग एक बाइट को बचाने के लिए स्वरूपण का उपयोग करता है ( f'\n{h+1:2} 'बनाम '\n%2d '%(h+1)।) आप बदल सकते हैं [sleep(9)]करने के लिए 18 बाइट्स को बचाने के लिए, लेकिन तब यह सिर्फ स्क्रीन स्पैम करता।

एक बाइट बदलते सहेजा while 1:...;sleep 60करने के लिए while[sleep(60)]:..., TuukkaX के लिए धन्यवाद।

ओपी ने सिर्फ टिप्पणी की, मुझे २४ के बजाय २३, ० होने के बाद अगले घंटे प्रदर्शित करने के लिए ५ और बाइट्स का उपयोग करना पड़ा। :-(

60 के बजाय केवल 9 सेकंड की नींद से एक बाइट पुनर्प्राप्त।

एक छोटी-सी फ़िदालिंग को छोटा करने के लिए दो बाइट्स सहेजे (h+1)%24, जो वैल्यू इंक के रूबी जवाब से उधार लिया गया था ।


क्या आप यह समझा सकते हैं कि अगर आपने वर्ग कोष्ठकों को इफ़ेक्ट के चारों ओर क्यों रखा है? जबकि दोनों तरफ 2 के विपरीत, सिर्फ 1 बाइट के बीच की जगह और नींद नहीं होगी? संपादित करें: कोई बात नहीं, यह सच करने के लिए है। काफी उचित।
छाया

1
@ शादो: sleepरिटर्न None, जो मिथ्या है।
निक मैटेओ

@ ToivoSäwén: sleepभी timeमॉड्यूल में है, इसलिए आयात करना * बेहतर है।
निक मैट्टो

5

रूबी, 98 95 91 बाइट्स

हर 5 सेकंड में अपडेट करता है। केवल यूनिक्स शैली के टर्मिनलों में काम करता है।

loop{t=Time.now;puts`clear`+"%02d %s
%02d "%[h=t.hour,?-*m=t.min,-~h%24]+?-*(60-m);sleep 5}

Windows कमांड प्रॉम्प्ट संस्करण, 95 92 बाइट्स:

loop{t=Time.now;puts"\e[H\e[2J%02d %s
%02d "%[h=t.hour,?-*m=t.min,-~h%24]+?-*(60-m);sleep 5}

क्या आप सिस्टम के बजाय बैकटिक्स का उपयोग कर सकते हैं? `cls`बनामsystem'cls'
आईएमपी १

ऐसा नहीं लगता है, लेकिन आप उपयोग कर सकते हैं h=t.hourऔर फिर hदूसरे के बजाय उपयोग कर सकते हैं t.hour, जो 3 बाइट्स बचाता है।
आईएमपी 1

@ IMP1 वास्तव में, backticks के लिए काम नहीं करते cls। आपके अन्य सुझाव के लिए धन्यवाद, हालांकि!
मूल्य इंक

@ IMP1 जैसा कि यह पता चला है, puts`clear`अगर आप यूनिक्स टर्मिनलों का उपयोग करते हैं तो जाने का रास्ता है। यह सिर्फ विंडोज कमांड प्रॉम्प्ट के साथ काम नहीं करता है cls
वैल्यू इंक

खिड़कियों के लिए, आप puts"\e[H\e[2J"कंसोल को खाली कर सकते हैं , जो मुझे लगता है कि चार बाइट्स को हिलाता है। यह आपकी पहली पंक्ति पढ़ेगाloop{t=Time.now;puts"\e[H\e[2J%02d %s
IMP1

4

पर्ल 6 , 113 बाइट्स

loop {$_=DateTime.now;.put for |('' xx 30),|([\+](.hour,1)».fmt('%2s')Z('-' Xx[\-](.minute,60)».abs));sleep 60}

एक बार दूसरी बार के साथ इसे आज़माएं

या एक परिवर्तित संस्करण आज़माएं जो कई घंटों तक चलने के परिणाम को आउटपुट करता है।

विस्तारित:

loop {                  # keep repeating forever

  $_ = DateTime.now;    # assign an object representing the current time

    .put                # print with trailing newline
                        # ( adds a space between numbers and dashes )

  for                   # for each of the following

    |(                  # make it a slip so that it is all part of one list

      '' xx 30          # 30 empty strings (30 empty lines)
    ),

    |(

        [\+](           # triangle produce
          .hour,        # the hour
          1             # the hour plus one

        )».fmt( '%2s' ) # both formatted to two element string ( space padded )

      Z                 # zipped with

        (
            '-'         # a dash

          Xx            # cross (X) using string repeat (x) operator

            [\-](       # triangle produce
              .minute,  # the minute
              60        # the minute minus 60

            )».abs      # absolute value of both
        )
    );

  sleep 60              # wait until the next minute
}

Operators ट्रायंगल प्रोडक्शन ’किस ऑपरेटर का समर्थन करता है? इसमें [\+]जोड़ और [\-]घटाना लगता है। क्या यह गुणा और इस तरह से काम करता है?
यति

@TuukkaX यह लगभग सभी इन्फिक्स ऑपरेटरों के साथ काम करना चाहिए। यह मूल रूप से वही है [+] LISTजो कम किया जाता है, इसके अलावा यह आपको मध्यवर्ती मान देता है। उपज के
ब्रैड गिल्बर्ट b2gills

4

QBasic, 120 127 121 बाइट्स

इसे बहुत लंबे समय तक न चलाएं या आपका लैपटॉप आग पकड़ लेगा। अब 99.several9s अधिक सीपीयू-कुशल है।

CLS
m=TIMER\60
h=m\60
m=m MOD 60
FOR i=1TO 2
?USING"## ";h MOD 24;
FOR j=1TO m
?"-";
NEXT
?
h=h+1
m=60-m
NEXT
SLEEP 1
RUN

अपुष्ट और व्याख्या

DO
    CLS
    totalMinutes = TIMER \ 60
    hour = totalMinutes \ 60
    minute = totalMinutes MOD 60

    FOR row = 1 TO 2
        PRINT USING "## "; hour MOD 24;
        FOR j = 1 TO minute
            PRINT "-";
        NEXT j
        PRINT

        hour = hour + 1
        minute = 60 - minute
    NEXT row

    SLEEP 1
LOOP

हम स्क्रीन को साफ करके शुरू करते हैं, फिर वर्तमान घंटों और मिनटों से प्राप्त करते हैं TIMER, जो आधी रात के बाद से सेकंड की संख्या को वापस करता है।

यह पहली बार है जब मैंने कोशिश की है PRINT USING, इसलिए मुझे यह जानकर खुशी हुई कि यह सामान्य QBasic quirk से पीड़ित नहीं है कि सकारात्मक संख्या एक प्रमुख स्थान के साथ मुद्रित होती है। ##जैसा कि प्रारूप निर्दिष्ट करता है यह सुनिश्चित करता है कि एकल-अंकीय संख्याएं सही-संरेखित हैं और आवश्यकतानुसार एक स्थान के साथ गद्देदार हैं। हमें हाइफ़न के लिए एक लूप का उपयोग करना होगा, दुर्भाग्य से, चूंकि QBasic में स्ट्रिंग पुनरावृत्ति फ़ंक्शन नहीं है। (अगर मैं गलत हूं, तो कृपया मुझे बताएं!)

न्यूलाइन को दबाने के लिए सभी PRINTबयान समाप्त हो ;जाते हैं; लेकिन हाइफ़न के बाद, हमें एक नई रूपरेखा की आवश्यकता है; इस प्रकार, ?आंतरिक FORपाश के बाद एकान्त ।

SLEEP 1अब आवश्यक है। इसके बिना, स्क्रीन प्रिंटिंग के बाद इतनी जल्दी साफ हो जाती है कि यह सिर्फ एक चंचल गड़बड़ है। (मैं प्रयोग किया जाता LOCATE 1के बजाय CLSकि कारण के लिए पहली बार में, जब तक मुझे एहसास हुआ कि CLSसाथ SLEEPवैसे भी कम है।) RUNऊपर से कार्यक्रम पुन: प्रारंभ होता - एक अनंत लूप पाने के लिए सबसे छोटा रास्ता।


यह दिन के अंतिम घंटे को कैसे संभालता है? शीर्ष पंक्ति 23 पढ़ती है, लेकिन क्या? नीचे पंक्ति पर घंटा है?
स्टेनबर्घ

मैं नोट 7 का उपयोग कर रहा हूं और मेरी स्थिति बार घड़ी के स्थान पर भविष्य के लिए इस कार्यक्रम को चलाने की सोच रहा हूं। क्या यह एक बेहतर तरकीब है?
उल्लू का जाप

@steenbergh वूप्स, फिक्स्ड। प्रश्न में उस किनारे के मामले का उल्लेख करना आपके लिए उपयोगी होगा।
DLosc

@ डलॉश नाह, मैं सिर्फ मजाक कर रहा हूं :))। लेकिन हाँ, स्मार्ट !!
उल्लूजी

1
@steenbergh वह एमटी 24 प्रिंट करता है, अगर शुरू में एच = 23 है तो अगला लूप चक्र 24 और मॉडेड हो जाता है 0. लेकिन मैं उत्सुक हूं अगर यह भी काम करता है। सीएलएस पहली पंक्ति को साफ करता है इसलिए स्क्रीन पर दोनों मुद्रित रेखाएं कभी नहीं होती हैं, है ना?
जेन्स

4

जावा 8, 313 300 299 बाइट्स

import java.time.*;()->{for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>30){c=0;String l="",u,d;for(i=0;i++<60;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}

यह केवल लूप के 30 पुनरावृत्तियों को अद्यतन करता है। अन्य 29 पुनरावृत्तियों ने नई लाइनें छापीं।

अपडेट किया गया

सहेजे गए 13 केविन Cruijssen की मदद की वजह से 14 बाइट्स! धन्यवाद!


नमस्ते, PPCG में आपका स्वागत है! सबसे पहले, केवल कार्यक्रमों / कार्यों की अनुमति है, और आपका वर्तमान कोड एक स्निपेट है। तुम एक विधि के साथ उसके दोनों ओर करना होगा (यानी void f(){...}और अपने मामले में आयात यह आवश्यक (जोड़ने के लिए की जरूरत है import java.time.*;)। यही कारण है कि किया जा रहा है ने कहा, अपने कोड को कई जगहों पर करने के लिए इसे कम करने के लिए किया जा सकता है golfed 311 बाइट्स (यहां तक कि जोड़ा विधि के साथ -declaration और import) (चूंकि यह टिप्पणी के लिए बहुत लंबा है, इसलिए मैंने इसे अगली टिप्पणी में रखा है .. xD)
केविन क्रूज़सेन

import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>99){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}( 303 बाइट्स ) मैं जावा में गोल्फिंग के लिए टिप्स और <सभी भाषाओं> में गोल्फिंग के लिए टिप्स पढ़ने की सलाह देता हूं । यहां रहने का आनंद।
केविन क्रूज़सेन

@KevinCruijssen मैंने अपना उत्तर अपडेट किया और लैम्बडा नोटेशन का उपयोग करके 3 और बाइट्स को बचाने में सक्षम था। इसके अलावा, मैंने आपके द्वारा प्रदान किए गए कोड को कुछ टुकड़े बदल दिए, साथ ही विनिर्देशों को पूरा करने के लिए (उदाहरण for(i=0;i++<60के लिए 61 के (h<10?बजाय और 9. के बजाय मुझे विधि घोषणा और कुछ गोल्फ टिप्स के बारे में सूचित करने के लिए धन्यवाद!
CraigR8806

आह, 60 के बजाय 61 वास्तव में मेरी गलती थी। मैंने सोचा कि मैं इसे के रूप में लिखा था for(i=0;++i<61की बजाय for(i=0;i++<61(इस दूसरे मामले में यह वास्तव में 60 होना चाहिए, और भले ही यह बाइट्स की एक ही राशि है, यह शायद और अधिक स्पष्ट / पठनीय है)। h<9मेरी कोड में हालांकि, सही है। आपके पास h+1<10पहले था और मैंने बस इसे h<9दोनों पक्षों में से 1 को हटाकर बदल दिया । :)
केविन क्रूज़सेन

1
@ केविनक्रूजसेन हा मैं उस पर नहीं उठा! h<9। मैं इसे 1 और बाइट को बचाने के लिए संपादित करूंगा। एक बार फिर धन्यवाद!
क्रेग आर 8806

4

सी, 176 162 161 160 160 बाइट्स

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

main(){int*localtime(),b[9],*t;memset(b,45,60);for(;;)time(&t),t=localtime(&t),usleep(printf("\e[2J%.2d %.*s\n%.2d %.*s\n",t[2],t[1],b,t[2]+1,60-t[1],b));}

Ungolfed:

#import<time.h>
main()
{
 int *t,b[60];
 memset(b,45,60);
 for(;;) {
  time(&t);
  t=localtime(&t);
  usleep(printf("\e[2J%.2d %.*s\n%.2d %.*s\n",t[2],t[1],b,t[2]+1,60-t[1],b));
 }
}

3

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

प्रति सेकंड एक बार अपडेट

setInterval(c=>{c.clear(d=new Date,m=d.getMinutes(),h=d.getHours(),H=_=>`0${h++}`.slice(-2)),c.log(H()+` ${'-'.repeat(m)}
${H()} `+'-'.repeat(60-m))},1e3,console)


आप कोड को पुनर्गठन करके काफी कुछ बाइट्स बचा सकते हैं, इसलिए यह केवल एक बयान है (यह तर्क के console.clear()अंदर कॉल करना संभव है console.log) और अप्रयुक्त कोष्ठक में यथासंभव असाइन करना। 154B के लिए संस्करण setInterval(c=>c.log(H(h,c.clear(d=new Date))+` ${'-'.repeat(m)} ${H(h+1)} `+'-'.repeat(60-m)),1e3,console,m=d.getMinutes(h=d.getHours(H=$=>$<9?'0'+$:$))):।
ल्यूक

आप एक ही फंक्शन में घंटों और मिनटों को लगाकर बाइट का एक गुच्छा बचा सकते हैं m=>`0${h++} \.slice(-3)+'-'.repeat(m)
नील

3

पायथन 2, 131 129 127 बाइट्स

from time import*
while[sleep(9)]:exec(strftime("a='%H';b=int('%M')"));print "\n"*30+a+" "+"-"*b+"\n"+`int(a)+1`+" "+"-"*(60-b)

@TuukkaX को एक बाइट धन्यवाद दिया


2
आप नई पंक्ति और अंतरिक्ष के बाद की जरूरत नहीं हैwhile 1:
गेहूं जादूगर

मैंने आपका कोड @ 19: 55 शुरू किया। 20:01 पर, मैं देख रहा हूँ 19 - \n 20 -----------------------------------------------------------। घंटे अपडेट नहीं हो रहे हैं ...
steenbergh

@steenbergh मैंने स्वयं घड़ी सेट करके इसे स्वयं आज़माया और यह मेरे लिए काम करती है।
ओवंस

@ नोव्स क्लॉक चैलेंजिंग फन :-)। वैसे भी, शायद repl.it के साथ कुछ तो ...
steenbergh

हेड-डेस्क The Repl.it सर्वर मेरे स्थानीय समय से एक घंटे पीछे है ... और यह सांत्वना के शीर्ष पर भी ऐसा कहता है। मैं खुद को
देखूंगा

3

सी 251 267 251 बाइट्स

 #include<time.h>f(){time_t t;struct tm *t1;h,m,i;while(1){time(&t);t1=localtime(&t);h=t1->tm_hour;m=t1->tm_min;printf("%d ",h);for(i=1;i<=m;i++)printf("-");puts("");printf("%d ",h+1);for(i=0;i<=59-m;i++)printf("-");puts("");sleep(1);system("clear");}}

अनप्लग्ड संस्करण

#include<time.h>
void f()
{
 time_t t;
 struct tm *t1;
 int h,m,i;

 while(1)
 {
  time(&t);     
  t1=localtime(&t);
  h=t1->tm_hour;
  m=t1->tm_min;

  printf("%d ",h);
  for(i=1;i<=m;i++)
   printf("-");

  puts("");
  printf("%d ",h+1);

  for(i=0;i<=59-m;i++)
   printf("-");

  puts("");    

  sleep(1);
  system("clear");    
 }
}

हो जाता है काम! किसी तरह से निश्चित रूप से छोटा किया जा सकता है। मान लें कि unistd.hफ़ाइल शामिल है।

@ नील जानकारी के लिए धन्यवाद।

@ सेठ धन्यवाद, 8 बाइट बचाने के लिए।


IIRC आपको अपने बाइट काउंट में कोड संकलन करने के लिए (इस मामले में, की परिभाषाएँ और ) प्राप्त करने के लिए आवश्यक सभी चीजों को शामिल करना होगा । time_tstruct tm
नील

इसके बजाय printf("\n");आप उपयोग कर सकते हैंputs("");
सेठ

3

पहली बार गोल्फ ...

पॉवर्सशेल, 116 बाइट्स (122 थी)

while($d=date){$f="{0:D2}";$h=$d.Hour;$m=$d.Minute;cls;"$($f-f$h)$("-"*$m)`n$($f-f(++$h%24))$("-"*(60-$m))";Sleep 9}

संपादित करें: @ AdmBorkBork की सलाह से, 6-बाइट की बचत के लिए Get-Date को डेट और क्लीज़ में बदल दें।


पीपीसीजी में आपका स्वागत है, अच्छा जवाब
जॉर्ज

PPCG में आपका स्वागत है! एक जोड़े को आसान golfs - आप उपयोग कर सकते हैं clsके बजाय clear(Windows पर इतने लंबे समय आप कर रहे हैं के रूप में) और dateके बजाय get-date। मुझे यकीन है कि फ़ॉर्मेटिंग को आउटपुट करने का कुछ आसान तरीका है - मैं इसके साथ खेल रहा हूं और अगर मैं कुछ भी लेकर आता हूं तो मैं आपको बता दूंगा।
AdmBorkBork

अच्छा लगा। यह प्रयास करें: 108 बाइट्स while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}। अपने संपादक में LF लाइन ब्रेक का उपयोग करें `` n`
mazzy

3

PHP, 104 105 बाइट्स

<? for(;;sleep(6))printf("%'
99s%2d %'-".($m=date(i))."s
%2d %'-".(60-$m).s,"",$h=date(H),"",++$h%24,"");

के लिए प्रदर्शन printfके कस्टम गद्दी वर्ण:
"%'-Ns"= के साथ छोड़ दिया पैड स्ट्रिंग -के लिएN वर्ण।

स्क्रीन को साफ़ करने के बजाय 99 नईलाइन (प्रत्येक 6 सेकंड) प्रिंट करेगा।

पहली नई पंक्ति में एक एकल वर्ण होना चाहिए। इसलिए, विंडोज पर, इसे प्रतिस्थापित किया जाना चाहिए \n


2

गेममेकर लैंग्वेज, 134 बाइट्स

s=" "while 1{s+="-"a=current_hour b=current_minute draw_text(0,0,string(a)+string_copy(s,1,b+1)+"#"+string(a+1)+string_copy(s,0,61-b)}

सेटिंग्स में, आपको काम करने के लिए गैर-घातक त्रुटियों को अनदेखा करना चाहिए। इसके अलावा, GML में, अधिकांश भाषाओं में #समान है \n


2

पर्ल 6 , 104 बाइट्स

DateTime.now.&{"\ec{.hour.fmt: '%2s'} {'-'x.minute}\n{(.hour+1).fmt: '%2s'} {'-'x 60-.minute}"}.say xx*

ANSI संगत टर्मिनल पर चलने की आवश्यकता है ताकि टर्मिनल कार्य को रीसेट करने के लिए नियंत्रण अनुक्रम।

सुंदर बुनियादी (क्योंकि अधिक मोटे दृष्टिकोण मैंने लंबे समय तक कोशिश की):

  • DateTime.now.&{" "}.say xx*: वर्तमान समय को एक स्ट्रिंग में परिवर्तित करें (नीचे देखें) और इसे कहें, और उस सभी को अनंत बार दोहराएं। स्ट्रिंग को इस तरह बनाया गया है:
    • \ec: <ESC>cटर्मिनल को रीसेट करने के लिए एएनएसआई नियंत्रण कोड , जो स्क्रीन को साफ करता है।
    • {.hour.fmt: '%2s'}: घंटा, 2 कॉलम के लिए दाएं-संरेखित
    • : अंतरिक्ष
    • {'-'x.minute}: पानी का छींटा बार-बार मिनट
    • \n: नई पंक्ति
    • {(.hour+1).fmt: '%2s'}: अगले घंटे, 2 कॉलम के लिए दाएं-संरेखित
    • : अंतरिक्ष
    • {'-'x 60-.minute}: डैश 60 मिनट के समय को दोहराया

2

AWK, 190 बाइट्स

#!/bin/awk -f
func p(x,y,c){printf("%2s ",x)
for(j=0;j<y;j++)printf(c)
print}BEGIN{for(;;){split(strftime("%H %M"),t)
m=t[2]
if(o!=m){p(a,30,"\n")
p(t[1],m,"-")
p((t[1]+1)%24,60-m,"-")}o=m}}

चूंकि AWKइसमें बिल्ट-इन sleepफ़ंक्शन नहीं है, इसलिए मेरे पास यह देखने के लिए लगातार घड़ी की जांच करना है कि क्या मिनट अभी तक बदल गया है। मुख्य बात यह है कि यह काम करता है ... सही है? :)


2

पायथन 3.5, 127 120 117 बाइट्स

from time import*
while[sleep(9)]:h,m=localtime()[3:5];print('\n'*88,*['%2d '%x+'-'*y+'\n'for x,y in[(h,m),(h+1,60-m)]])

1
क्या आप केवल print('\n'*50)इसके बजाय os.system('cls')ऐसा नहीं कर सकते हैं यह दोनों निक्स और विंडोज पर काम करता है? कुछ बाइट्स बचाएंगे क्योंकि आप osआयात को खो सकते हैं और ओपी का कहना है कि इसकी अनुमति है।
एलपेड्रो

ओह, मैंने इसे ठीक से नहीं पढ़ा। दोस्त बहुत - बहुत धन्यवाद।
गुरुपाद ममदापुर

बस जानकारी के लिए, ज्यादातर लोग अपनी पुरानी बाइट की गिनती के आसपास <s> का उपयोग करते हैं और फिर उसके बाद नई बाइट की गिनती डालते हैं क्योंकि यह प्रगति को देखने के लिए दिलचस्प है क्योंकि एक उत्तर में सुधार होता है :-) 3.5 कोशिश अवश्य करें पहर। मैं अभी भी पायथन 2 के साथ काम कर रहा हूं
ElPedro

1
@ElPedro Yea मैं इसे करना भूल गया। मैं अब संपादित करूँगा।
गुरुपाद ममदापुर

2

अजगर, ११५ 113 बाइट्स

@kundor और @Phlarx को धन्यवाद बाइट्स के एक जोड़े को बचाया

import time
while 1:h,m=time.localtime()[3:5];print("\x1b[0;H{:02} {}\n{:02} {} ".format(h,"-"*m,h+1,"-"*(60-m)))

कम से कम मेरे सिस्टम पर, यह अंतर्निहित वर्णों को मिटाता नहीं है, ताकि समय बीतने के साथ दूसरी पंक्ति पर डैश की संख्या कम न हो। इसके अलावा: आप तीन बाइट्स को एक लाइन पर अपना लूप लगाकर और दो बाइट्स :02को केवल फॉर्मेट में बदलकर बचा सकते हैं :2
निक मैट्टो

2
आप इसी {} के बाद एक स्पेस को जोड़कर @kundor द्वारा वर्णित समस्या को 1 बाइट में ठीक कर सकते हैं।
फाल्क्स

@ कुंदर तय! धन्यवाद। मैंने :02प्रारूप को शून्य के साथ एक-एक घंटे दाएं-पैड करने के लिए रखा ।
डेफरन

@kundor * zeroes के साथ एक-एक घंटे लेफ्ट-पैड।
dfernan

@ डफरन: ठीक है, :2रिक्त स्थान वाले बाएं-पैड, जो चुनौती कहते हैं, ठीक है।
निक मैट्टो

2

सी # इंटरएक्टिव (138 बाइट्स)

while(true){var d=DateTime.Now;Console.WriteLine($"{d.Hour:00} {new string('-',d.Minute)}\n{d.Hour+1:00} {new string('-',60-d.Minute)}");}

1
क्या आप इसे 1 से नीचे घटा सकते हैं) dइसके बजाय दिनांक var का नामकरण कर सकते हैं dt? और 2) का उपयोग करें sleep(1e3)या के 999बजाय 1000?

@steenbergh अद्यतन देखें
श्रृंखला ०een

कुछ बातें ... यह सिर्फ एक स्निपेट नहीं एक विधि या कार्यक्रम है (सुनिश्चित नहीं है कि अगर यह सी # इंटरएक्टिव में मान्य है), लेकिन यह अनिवार्य रूप से मेरे कोड का एक गोल्फ संस्करण है, और अगर यह टिप्पणी की जानी चाहिए थी, तो सुधार नहीं अलग समाधान (हालांकि यह अटकलें हैं) और यहां बहुत सारे छोटे सुधार हैं जो आप कर सकते हैं, और क्या आपको नींद की भी आवश्यकता है?
TheLethalCoder

@ TheLethalCoder मैंने विशेष रूप से C # इंटरएक्टिव लगा दिया क्योंकि यह इंटरैक्टिव कंसोल में केवल काम करता है। यह मानक C # प्रोग्राम के रूप में काम नहीं करेगा।
श्रृंखला 06

यह भी ध्यान दें कि यह काम नहीं करेगा जब घंटा 23 है और जब मिनट 0 है
TheLethalCoder

2

PHP, 112 120 बाइट्स

for(;;sleep(9))echo($s=str_pad)($h=date(H),99,"\n",0).$s(" ",1+$m=date(i),"-")."\n".$s(++$h%24,2,0,0).$s(" ",61-$m,"-");

जैसा कि स्क्रीन को साफ़ करने का कोई तरीका नहीं है (जो मुझे मिल सकता है) मुझे नई सुर्खियों के ढेर के साथ जाना था। इसके अलावा एक मिनट में कम से कम एक बार "बाइट" को अपडेट करने का प्रश्न इसके 9बजाय बाइट से बचाता है 60

संपादित करें: @ टिट्स ने दूसरे घंटे की पैडिंग में एक बग को देखा। इसे ठीक करने में 8 बाइट का खर्च आता है।


यह सही आउटपुट के साथ stdout पर चेतावनी पाठ प्रदर्शित करता है Notice: Use of undefined constant str_pad - assumed 'str_pad' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant H - assumed 'H' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant i - assumed 'i' in C:\wamp64\www\my-site\a.php on line 2:। इसके बारे में मेटा पर कुछ भी?

@steenbergh That´sa नोटिस; यदि आप डिफ़ॉल्ट मान (कमांड लाइन पैरामीटर -nयाerror_reporting(22519);
टाइटस

घंटे की लंबाई 2 तक होनी चाहिए
टाइटस

अच्छा बिंदु, Hदिनांक की सेटिंग 00-23 से हो जाती है, लेकिन मैं इसके बारे में दूसरे घंटे के लिए भूल गया।
user59178

फिजिकल लाइनब्रेक के साथ दो बाइट्स बचाएं।
टाइटस

2

बैश (3 और 4): 90 बाइट्स

d=(`sed s/./-/g<$0`);let `date +h=%H,m=%M`;echo $h ${d:0:m}'
'$[++h%24] ${d:m}
sleep 5
$0

के उपयोग के कारण $0, इस स्क्रिप्ट को एक फ़ाइल में डाला जाना चाहिए, न कि एक इंटरैक्टिव बैश शेल में चिपकाया जाना चाहिए।

पहला कमांड $d60 हाइफ़न पर सेट होता है; यह इस तथ्य पर निर्भर करता है कि इस लिपि की पहली पंक्ति 60 वर्णों की है। यह मेरे द्वारा आ सकने वाली अगली सबसे अच्छी चीज़ से तीन अक्षर छोटा है:

d=`printf %060d|tr 0 -`

यदि आप नहीं चाहते कि यह आपके बॉक्स को PIDs या मेमोरी से बाहर चलाए, तो आप evalअंतिम पंक्ति की शुरुआत में जोड़ सकते हैं , जो इस 95 बाइट्स को बना देगा।


मुझे त्रुटि देता है let: h=09: value too great for base (error token is "09")। समस्या यह है कि अग्रणी शून्य को अष्टक स्थिरांक के रूप में समझा जाता है, इसलिए 09 अमान्य है।
निक मैटेओ

ह्म, इसका मतलब है कि मेरी स्क्रिप्ट कई मायनों में टूटी हुई है। धन्यवाद।
इवान क्राल

2

BASH, 165 141 155 बाइट्स

while :
do
clear
m=`date +%-M`
a=`printf %${m}s`
b=`printf %$((60-m))s`
h=`date +%H`
echo $h ${a// /-}
printf "%02d %s" $((10#$h+1)) ${b// /-}
sleep 9
done

1
मैं नींद को हटाते हुए एक और 8 बाइट्स बचा सकता था, लेकिन नींद के बिना अपने कंप्यूटर पर चलने वाले लूप के साथ मैं अनिश्चित नहीं हूं
;;

कुछ अनुकूलन: sleep 9जबकि लूप की स्थिति के लिए कदम ; -लाइन 4 में प्रारूप स्ट्रिंग में एम के सामने निकालें । आपको अंकगणितीय अभिव्यक्तियों में चर नामों के सामने $ का उपयोग करने की आवश्यकता नहीं है, इसलिए $((60-$m))हो सकता है$((60-m))
इवान क्राल

मुझे यकीन नहीं है कि लाइन 9 पर आपका गणित सटीक है: h=23; echo $((10#$h+1))मेरे लिए 24 प्रिंट करता है।
इवान क्राल

24 के साथ गलत क्या है?
pLumo

मुझे -M की आवश्यकता है क्योंकि $ ((60-08)) एक त्रुटि देता है।
pLumo

1

गुरा , 138 बाइट्स

k(a,b)={if(a<10){a="0"+a;}println(a," ","-"*b)};repeat{t=datetime.now();k(t.hour,t.min);k(t.hour+1,60-t.min);os.sleep(60);print("\n"*30);}

बहुत छोटा और सीधा साधा :)


वाह ... यह तेज है। Gura चलाने के लिए कोई सुझाव? बस बायनेरिज़ डाउनलोड किया है, लेकिन Gura.exeइस कोड में चलना और चिपकाना मुझे एक सिंटैक्स त्रुटि देता है symbol k is not defined

एक अर्धविराम को भूल गए! आप इसे फिर से चलाने की कोशिश कर सकते हैं :)
Sygmei

1
क्या यह हर मिनट अपडेट होता है? सांत्वना इस कोड को सिर्फ एक बार चलाने के लिए लगता है ...
steenbergh

वाह, उस हिस्से को नहीं देखा, अब काम करना चाहिए!
सिगमेई

जब यह अपडेट हो जाता है, तो इसे या तो स्क्रीन को साफ करना चाहिए या 30 नईलाइन्स को जोड़ना चाहिए। यार, मैं तुम्हारे मामले पर हूँ ...
steenbergh

1

ठीक है, थोड़ी देर में एक कोड गोल्फ नहीं किया है, इसलिए यहाँ मेरा उदास प्रयास :)

यूनिक्स कोर्न शैल: 177 171 170 बाइट्स

while :
do
clear
h=`date +%H`
m=`date +%M`
d=-----
d=$d$d$d$d
d=$d$d$d
a=`echo $d|cut -b-$m`
let m=60-$m
b=`echo $d|cut -b-$m`
let i=h+1
echo "$h $a\n$i $b"
sleep 9
done

2 इकोस को 1 में मिलाया, कुछ बाइट्स को बचाया ... (स्लीप 9 के बजाय 10 नींद 1 बाइट बचाता है: P) lol
Ditto

1

गणितज्ञ, 235 बाइट्स

d=UpdateInterval;e=Dynamic;f=Refresh;g=AbsoluteTime;Grid[Partition[Riffle[e[f[Floor@Mod[g[]/3600+#,24],d->1]]&/@{0,1},With[{t=#},e[f[""<>Array["-"&,If[t==60,60-#,#]]&@Setting@Floor@Mod[g[]/60+#,60],d->1]]]&/@{0,60}],2],Alignment->Left]

1

प्रसंस्करण, 204 200 198 197 बाइट्स

@ बाइट की बदौलत 5 बाइट बच गए। होशियार तीतरों का उपयोग करके

void draw(){int i;String s=((i=hour())>9?i:" "+i)+" ";for(i=0;i<minute();i++)s+="-";s+="\n"+((i=hour()+1)>9?i>23?" 0":i:" "+i)+" ";for(i=0;i<60-minute();i++)s+="-";print(s);for(;i++<99;)println();}

यह प्रत्येक अपडेट के लिए 30+ नईलाइनों को आउटपुट करता है (जो फ्रेम अपडेट होने पर होता है)

Ungolfed

void draw(){
  int i;
  String s=((i=hour())>9?i:" "+i)+" ";
  for(i=0;i<minute();i++)
    s+="-";
  s+="\n"+((i=hour()+1)>9?i>23?" 0":i:" "+i)+" ";
  for(i=0;i<60-minute();i++)
    s+="-";print(s);
  for(;i++<99;)
    println();
}

में बदलने ((i=hour())<10?" ":"")+iसे ((i=hour())>9?i:" "+i)2 बी बच जाएगा दो बार ... आगे गोल्फ के साथ शुभकामनाएँ!
ल्यूक

@ L.Serne टिप के लिए धन्यवाद :)
क्रिति लिथोस

एक और सुधार जो काम कर सकता है: ((i=hour()+1)>24?i=0:i)>9हो जाता है (i=hour()+1)>9, चूंकि hour0-23 की सीमा में एक संख्या को आउटपुट करता है, और यहां तक ​​कि 1 के साथ जोड़ा जाता है, यह कभी भी 24 से अधिक नहीं होगा। इसके अलावा, आपको लूप iमें स्थिति के अंदर की वृद्धि को बढ़ाना चाहिए forजैसे आपने बहुत अंतिम पाश में किया था। कुल 13B बचाना चाहिए।
ल्यूक

@ L.Serné पहले बिंदु के लिए, मुझे अभी भी टर्नरी को शामिल करना होगा क्योंकि 24-घंटे की घड़ी में 23 + 1 0 हो जाता है (या कम से कम मुझे लगता है)। आगे, अगर मैं iफॉर-लूप की स्थिति के अंदर की वृद्धि को आगे बढ़ाता हूं, तो iशुरू होगा1 इसके बजाय0 और मुझे एक और बाइट जोड़ने की जरूरत है i++<=minute()और बायटेकाउंट अभी भी समान होगा। लेकिन फिर भी, मेरी मदद करने के लिए धन्यवाद 1 गोल्फ बाइट्स :)
कृति लिथोस

1

सी, 239 बाइट्स

#include<time.h>
#include<unistd.h>
#define F printf(
void d(n,p){for(;n--;F"%c",p));}int main(){time_t*t;for(;;){d(30,10);time(t);int*m=localtime(t);F"%2d ",m[2]);d(m[1],45);F"\n%2d ",(m[2]+1)%24);d(60-m[1],45);F"\n");sleep(1);}return 0;}

सेठ की और एबेल की प्रविष्टियों से प्रेरित होकर, यह अगले घंटे के लिए 24 के बजाय 0 का उत्पादन करेगा, और स्क्रीन को खाली करने के लिए 30 लाइनों का उपयोग करेगा।


1

स्माइलबासिक, 55 बाइट्स

TMREAD OUT H,M,
CLS?H,"-"*M?(H+1)MOD 24,"-"*(60-M)EXEC.

स्पष्टीकरण:

TMREAD OUT HOUR,MINUTE,
CLS
PRINT HOUR,"-"*MINUTE
PRINT (HOUR+1) MOD 24,"-"*(60-MINUTE)
EXEC 0 'runs the code stored in slot 0 (the default)

नोट: SmileBASIC में केवल पाठ के 50 कॉलम हैं, इसलिए यह अच्छा नहीं लगेगा ...


1

सी # 181 176

for(;;){Console.Clear();var t=DateTime.Now;var h=t.Hour;var m=t.Minute;Console.Write("{0,2} {1}\n{2,2} {3}",h,"".PadLeft(m,'-'),++h%24,"".PadLeft(60-m,'-'));Thread.Sleep(100);}

यह कोड मानता है कि ए using System.Threading; लाइन शामिल है।

पूरी कक्षा:

class Program
{
    static void Main(string[] args)
    {
        Console.Title = string.Format("Started the app at: {0}", DateTime.Now.TimeOfDay);
        //new Timer((o) => { Console.Clear(); var t = DateTime.Now; var h = t.Hour; var m = t.Minute; Console.Write("{0,2} {1}\n{2,2} {3}", h, "".PadLeft(m, '-'), ++h % 24, "".PadLeft(60 - m, '-')); }, null, 0, 60000);

        for (; ; ) { Console.Clear(); var t = DateTime.Now; var h = t.Hour; var m = t.Minute; Console.Write("{0,2} {1}\n{2,2} {3}", h, "".PadLeft(m, '-'), ++h % 24, "".PadLeft(60 - m, '-')); Thread.Sleep(100); }

        Console.ReadKey(true);
    }
}

इस समाधान में लूप से बाहर निकलने का कोई तरीका नहीं है (मूल, टिप्पणी की गई है, एक अलग थ्रेड पर कोड चलाता है), इसलिए यह Console.ReadKeyकथन निरर्थक है। बाहर निकलने का एकमात्र तरीका कंसोल विंडो को बंद करना है या Ctrl+Break...
nurchi

यह केवल एक कोड स्निपेट है जो विधि या कार्यक्रम नहीं है, using System.Threading;बाइट काउंट में भी शामिल करने की आवश्यकता है यदि आप इसका उपयोग कर रहे हैं। उसी के साथ Using System;
ललथकोदर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.