ब्रेक्सिट कब होगा?


27

खैर, ब्रेक्सिट हुआ । और स्काई न्यूज, वे जीनियस होने के नाते, एक बस के किनारे पर एक उलटी गिनती बनाने का फैसला किया है।

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

आपका काम भी कुछ ऐसा ही करना है। यूके 31 मार्च 2019 को यूरोपीय संघ छोड़ता है और आपको इसके लिए एक डिजिटल उलटी गिनती बनानी होगी जो हर सेकंड (0.05 सेकंड के विचलन के साथ) बदलती है।

इनपुट

आपके प्रोग्राम को बिल्कुल कोई इनपुट नहीं लेना चाहिए। यह प्रतिबंधित है!

उत्पादन

यह प्रारूप में Brexit तक समय का उत्पादन करना चाहिए ddd:hh:mm:ss। नए सिरे से अग्रणी और अनुगामी की अनुमति है लेकिन प्रदर्शन को हर बार एक ही स्थान पर रहना चाहिए। यह देखना चाहिए कि क्या यह वास्तव में जगह में घट रहा है। जैसा कि @AnthonyPham ने बताया है कि स्क्रीन को "क्लियर" करने के लिए पर्याप्त न्यूलाइन को प्रिंट करने का मतलब यह नहीं है, इसका मतलब है कि आपको वास्तव में स्क्रीन को साफ करना चाहिए।

इस तरह एक आउटपुट की अनुमति नहीं है:

100:20:10:05
100:20:10:04

न ही यह है

100:20:10:05
*A thousand newlines*
100:20:10:04

क्योंकि वे एक से अधिक लाइन पर हैं।

आप Brexit के बाद के बारे में चिंता करने की ज़रूरत नहीं है। आपके कार्यक्रम को केवल 31/3/2019 तक काम करना है

नियम

  • मानक खामियों को अस्वीकार कर दिया जाता है
  • यह इसलिए बाइट्स जीत में सबसे छोटा कोड है ।
  • त्रुटि संदेश (हालांकि मैं नहीं सोच सकता कि कैसे) अस्वीकृत हैं
  • कोड को 2 साल के समय में चलाने में सक्षम होना चाहिए (जब यूके ईयू छोड़ता है) और वास्तविक समय प्रदर्शित करना चाहिए और 730 से फिर से शुरू नहीं होना चाहिए (नीचे देखें)

उलटी गिनती नियम

उलटी गिनती हार्ड-कोडेड नहीं होनी चाहिए और ब्रेक्सिट खत्म होने से पहले किसी भी समय चलने में सक्षम होनी चाहिए और फिर भी सही परिणाम उत्पन्न कर सकती है। जब एक नया दिन शुरू होता है तो घंटे को नीचे दिए गए प्रारूप का पालन करना चाहिए

712:00:00:01
712:00:00:00
711:23:59:59

मुझे फिर से कहना है, सुविधा के लिए आधी रात को ब्रेक्सिट की तारीख 31/3/2019 है (31: 3: 19 00:00:00 या 31: 3: 2019 00:00:00 या कोई अन्य प्रारूप जो आप चाहते हैं)

NB: मुझे लगता है कि मेरे पास सब कुछ है लेकिन मैंने इसे सैंडबॉक्स में पोस्ट नहीं किया, अन्यथा समय समाप्त हो सकता था। सुधार के लिए कोई सुझाव देने के लिए स्वतंत्र महसूस करें क्योंकि यह सही नहीं है।


क्या मैं इसे प्रत्येक मिलीसेकंड पर चला सकता हूं लेकिन फिर भी हर सेकंड को अपडेट करने की उपस्थिति दे सकता हूं? यह केवल मेरे कोड को छोटा बनाने के लिए है।
डेविड आर्किबाल्ड

@DavidArchibald यह केवल कहता है कि डिस्प्ले को हर सेकंड बदलना होगा। यह सिर्फ इतना है कि अधिकांश उत्तरों को हर सेकंड चलाना आसान होगा।
caird coinheringaahing

आह। 1000अगर मुझे यह चाहिए कि मैं इसे एक बार बदल दूं तो मुझे इसे लगाना होगा। धन्यवाद
डेविड आर्चीबाल्ड

क्या प्रमुख शून्य की आवश्यकता है?
झबरा

1
मध्यरात्रि क्या समयक्षेत्र: UCT या GMT? क्या हमें इसे ध्यान में रखना है?
टाइटस

जवाबों:


12

जावास्क्रिप्ट, 134 129 113 बाइट्स

setInterval("d=-new Date;document.body.innerHTML=`<pre>${d/864e5+17986|0}:`+new Date(d).toJSON().slice(11,19)",1)

संपादित करें: @ बस्ती के लिए 2 बाइट्स सहेजे गए। @ L4m2 की बदौलत 11 बाइट्स बचाए।


आपको @Neil ... कुछ बाइट्स से हराकर प्रबंधित किया गया।
डेविड आर्किबाल्ड

उपयोग क्यों नहीं <a id=0>? या कुछ इस तरह का?
सोलोमन उक्यो

3
या document.body.innerHTMLइसके बजाय भीo.innerHTML
Cloudfeet

1
मैं चाहता था कि यह सुनिश्चित किया जाए कि प्रदर्शन उसी स्थान पर रहे, लेकिन मुझे लगता है कि मैं एक बाइट और उपयोग बचा सकता था <tt>
नील

3
आप प्रत्येक मिलीसेकंड (या 2, या 3 ...) कोड चलाकर 2 बाइट्स बचा सकते हैं।
झबरा

11

पॉवरशेल, 70 63 55 53 बाइट्स

दोहरे उद्धरणों को छोड़कर, @Joey के लिए आसान -2 धन्यवाद

for(){cls;(date 31Mar19)-(date)|% T* ddd\:hh\:mm\:ss}

नींद के साथ इसे चलाने से 8 बाइट्स जुड़ते हैं, लेकिन इनपुट ज्यादातर अदृश्य होता है अगर यह उनके बिना चलाया जाता है, तो संस्करण (63 बाइट्स) के साथ:

for(){cls;(date 31/3/19)-(date)|% T* ddd\:hh\:mm\:ss;sleep 1}

for() एक अनंत पाश है, और उस पाश के भीतर ।।

cls स्क्रीन साफ़ करने के लिए,

31/3/19एक DateTimeवस्तु के रूप में प्राप्त करें , और -इसमें से वर्तमान तिथि, शेष समय देने के लिए, फिर .ToString()( |% T*) सही प्रारूप के साथ।

यह brexit के बाद नकारात्मक समय प्रदर्शित करेगा।


यह स्थानीय तिथि प्रारूप के प्रति भी संवेदनशील है। हालांकि यूके dd / m / yy प्रारूप उपयुक्त है, हालांकि, यह यूएस मशीनों पर नहीं चलेगा। मैं उत्सुक हूं कि कैसे T*काम करता है। मैं उससे परिचित नहीं हूं।
जोएल कोएहॉर्न

@JoelCoehoorn यह एक अच्छी चाल है, फॉर्च्यूज़ %वास्तव में Tऑस्ट्रिंग ऑब्जेक्ट को उठाता है , और अगले स्ट्रिंग को इसके तर्क के रूप में स्वीकार करेगा। डेटाटाइम प्रारूप के बारे में यह यूएस मशीनों पर क्यों नहीं चलेगा? मुझे लगा कि ddआदि संस्कृति-असंवेदनशील थे।
कॉल्व्स

यह मेरी मशीन पर महीने # 31 खोजने की कोशिश कर रहा है। अगर मैं इसे बदलूं तो ठीक काम करता है 3/31/192019-03-31कहीं भी काम करेगा , लेकिन आप कुछ बाइट्स खर्च करते हैं।
जोएल कोएहॉर्न

@JoelCoehoorn आह ठीक है - माफ करना, मैं आउटपुट के बारे में सोच रहा था, जिसके 31Mar19बजाय 31/3/19उम्मीद है कि इसे ठीक करना चाहिए?
कॉल्व्स

1
जैसा कि कमांड तर्क पार्सिंग लागू होता है, आप प्रारूप स्ट्रिंग के आसपास उद्धरण खो सकते हैं।
जॉय

7

एक्सेल VBA, 91 84 82 बाइट्स

सहेजे गए 7 बाइट्स जो जोमालपास की ओर इशारा करते हैं कि एक्सेल तारीखों को संख्या के रूप में देखता है।
सहेजे गए 2 बाइट्स जोमलपास के लिए धन्यवाद

Sub b()
Do
t=CDec(43555-Now)
Cells(1,1)=Int(t) &Format(t,":hh:mm:ss")
Loop
End Sub

आउटपुट को A1सक्रिय एक्सेल शीट में सेल करना है।


के ("2019-3-31")साथ स्वैप करके -6 बाइट्स (43555)। जब मैं इसे एक्सेल में चलाने की कोशिश करता हूं, तो यह लगभग 5-6 सेकंड के बाद जम जाता है ...
CactusCake

1
@JoeMalpass धन्यवाद, यह एक अच्छी बात है। यह मेरे लिए कुछ सेकंड के बाद भी दिखता है, क्योंकि यह 1 / सेकंड की तुलना में तेजी से गणना कर रहा है। हालांकि, देरी को जोड़ना, बाइट्स जोड़ता है और ओपी यह नहीं कहता है कि यह अब तक लगातार गिनती करने में सक्षम है जब तक कि ब्रेक्सिट आग पर कुछ भी स्थापित किए बिना।
इंजीनियर टोस्ट

जाहिरा तौर Nowपर ()भी बिना काम करता है ...
CactusCake

6

पायथन 3.6, 146 बाइट्स

from datetime import*
x=datetime
while 1:d=x(2019,3,31)-x.now();s=d.seconds;a=s%3600;print(end=f"\r{d.days:03}:{s//3600:02}:{a//60:02}:{s%60:02}")

5

सी #, 173 172 156 150 127 बाइट्स

using System;class P{static void Main(){for(;;)Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:d\\:hh\\:mm\\:ss}  ");}}

सहेजे गए 16 बाइट्स @ @ धन्यवाद के लिए सहेजे गए 6 बाइट्स @ Søren D. Pt byus के लिए धन्यवाद

प्रारूपित संस्करण:

using System;

class P
{
    static void Main()
    {
        for (;;)
            Console.Write($"\r{new DateTime(2019, 3, 31) - DateTime.Now:d\\:hh\\:mm\\:ss}  ");
    }
}

क्या आप कर सकते हैं (TimeSpan)0? फोन पर, अभी परीक्षण नहीं कर सकता। आप अभी भी स्पष्ट छोड़ सकते हैं क्योंकि गाड़ी की वापसी का ध्यान रखा जाता है: यह कर्सर को लाइन की शुरुआत में वापस रखता है।
बॉब

2
सोचा: अगर लंबाई बदलती है (100 दिन से कम) तो सीआर पर निर्भर रहना विफल हो सकता है। फिक्स: अंत में दो अतिरिक्त रिक्त स्थान जोड़ें।
बॉब

@ याकूब मैं हटाना भूल गया Clear! मुझे मूर्ख। और कोई नहीं बदल सकते intकरने के लिए TimeSpanमैं पहले से ही है कि एक की कोशिश की होगी।
TheLethalCoder

आप 6 बाइट्स लिखने से बचा सकते हैं (t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
सोरेन डी। Pt Aprus

@ SørenD.Ptæus अच्छा विचार भी उस एक के बारे में नहीं सोचा था
TheLethalCoder

4

जावास्क्रिप्ट ईएस 5, 320 319 316 305 295 284 बाइट्स

setInterval(function(){a=Math,b=a.floor,c=console,d=Date,e="00",f=new d(2019,2,31),g=a.abs(f-new d)/1e3,h=b(g/86400);g-=86400*h;var i=b(g/3600)%24;g-=3600*i;var j=b(g/60)%60;g-=60*j,c.clear(),c.log((e+h).slice(-3)+":"+(e+i).slice(-2)+":"+(e+j).slice(-2)+":"+(e+a.ceil(g)).slice(-2))})

संदर्भित करने के लिए @ फ़ेल्स के लिए धन्यवाद Math, @ रेफ़रिंग के लिए @grgrcodeconsole

संयुक्त राष्ट्र के golfed

setInterval(function() {

  var math = Math, floor = math.floor, c = console, d = Date;

  var leadings = "00";

  // set our brexit date
  var brexit = new d(2019, 2, 31);

  // get total seconds between brexit and now
  var diff = math.abs(brexit - new d()) / 1000;

  // calculate (and subtract) whole days
  var days = floor(diff / 86400);
  diff -= days * 86400;

  // calculate (and subtract) whole hours
  var hours = floor(diff / 3600) % 24;
  diff -= hours * 3600;

  // calculate (and subtract) whole minutes
  var minutes = floor(diff / 60) % 60;
  diff -= minutes * 60;

  // what's left is seconds

  // clear the console (because OP said it must print in the same place)
  c.clear();

  // log the countdown, add the leadings and slice to get the correct leadings 0's
  c.log((leadings + days).slice(-3) + ":" + (leadings + hours).slice(-2) + ":" + (leadings + minutes).slice(-2) + ":" + (leadings + math.ceil(diff)).slice(-2));

});


2
आप मेरे नाम बदलने वाले मठ को थोड़ा बचा सकते हैं जैसेg=Math;
Fels

ऐसा लगता है कि अलियासिंग Mathअभी भी 2 बाइट्स बचा सकता है, है ना?
मैरी

आप एरो फ़ंक्शंस का उपयोग करके और छुटकारा पाकर थोड़ा और बचा सकते हैं var। इसके अलावा, के hबजाय hours, या के mबजाय चर के लिए छोटे नाम चुनें minutes। संभवतः करने c=consoleसे एक जोड़े को अधिक बाइट की बचत होगी। इसके 1e3बजाय1000
डैनियल रीना

4

PHP, 84 बाइट्स

for(;$c=DateTime;)echo(new$c('@1553990400'))->diff(new$c)->format("\r%a:%H:%I:%S ");

काफी सरल। 1553990400 यूटीसी में 31-3-2019 00:00:00 के लिए टाइमस्टैम्प है। यह अनंत बार लूप करता है, DateTime-> diff () -> फॉर्मेट () को आउटपुट करने के लिए कि कितना समय बचा है। ब्रेक्सिट होने के बाद, इसकी गिनती 0 से शुरू होगी।

टिप्पणी / अधिक पठनीय संस्करण:

// Infinite loop, assign DateTime (as a string) to $class
for (; $class = DateTime;) {
    echo (new $class('@1553990400')) // Create a new DateTime object for the brexit date/time.
            ->diff(new $class) // Caulculate the difference to the current date/time.
            ->format("\r%a:%H:%I:%S "); // Format it according to the specification, starting with a \r character to move to the start of the line and overwrite the previous output.
}

यहाँ नया, और अपना उत्तर पोस्ट करने के बारे में। कुछ चीजें: 1. क्या हमें <?यहां टैग छोड़ने की अनुमति है? 2. मुझे लगता है कि आपके कोष्ठक गलत हैं, अभी आप ->diffडेटाइम ऑब्जेक्ट के बजाय इको पर कॉल कर रहे हैं । 3. इको वैसे भी कोष्ठक के बिना काम करता है। 4. इसे ठीक करने के बाद भी, यह मेरे लिए काम नहीं करता है, लेकिन मैं गोल्फ के लिए नया हूं ताकि मुझे सिर्फ बेवकूफ बनाया जा सके।
स्वोरूब वेहतम

1
बस इसे चलाएं और देखें, यह आवश्यकताओं के अनुसार ठीक काम करता है। PHP को कमांड लाइन से चलाते समय फ्लश करने की कोई आवश्यकता नहीं है। लाइन की शुरुआत में कर्सर को स्थानांतरित करने के लिए स्ट्रिंग की शुरुआत में एक आर है, यह पहले से उत्पादित समय को ओवरराइट करता है। यह वही विधि है जिसका उपयोग यहां कई अन्य उत्तर कर रहे हैं।
चोकोचोस

1
क्षमा करें, मुझे आपकी पहली टिप्पणी याद आ गई। हां, हमें शुरुआती टैग्स को छोड़ने की अनुमति है, जब तक कि एक पूर्ण कार्यक्रम की आपूर्ति करने की आवश्यकता न हो। कोष्ठक ठीक वैसे ही हैं जैसे वे हैं। हां, इसके बिना इको काम करता है, लेकिन डेटटाइम ऑब्जेक्ट पर कॉलिंग उनके बिना काम नहीं करती है। यह यहां ठीक चलता है, आप किस PHP संस्करण का उपयोग कर रहे हैं और आप प्रोग्राम कैसे चला रहे हैं? :)
चोकोचोस

1
आप यहां कुछ पोस्ट देख सकते हैं: codegolf.meta.stackexchange.com/questions/tagged/php
chocochaos

1
इसके बारे में बस इसे कवर किया गया है, अंतर्दृष्टि के लिए धन्यवाद :)
स्वोरब वीथम

4

CJam, 69 62 59 57 बाइट्स

अलग-अलग समय प्रारूप में परिवर्तित करके 7 बाइट्स सहेजे गए

मार्टिन एंडर के सुझावों के लिए 3 बाइट्स बचाए गए

बैकस्पेस के बजाय एक गाड़ी वापसी का उपयोग करके 2 बाइट्स सहेजे गए

{15539904e5esm1e3/{60md\}2*24md\]W%{sYTe[}%':*CTe[oDco1}g

TIO पर स्पष्ट कारणों से नहीं चलाया जा सकता।

यह एक अनंत लूप में लगातार प्रदर्शन को फिर से लिखता है इसलिए पाठ का प्रकार अंदर और बाहर (कम से कम मेरे कंसोल में) चमकता है, हालांकि यह केवल प्रति सेकंड एक बार वास्तव में अपडेट करता है।

यह 70-बाइट संस्करण केवल प्रति सेकंड एक बार प्रिंट करता है:

{15539904e5es:Xm1e3/{60md\}2*24md\]W%{sYTe[}%':*CTe[oDco{esXm1e3<}g1}g

व्याख्या

{                           e# Begin a while loop
  15539904e5                e#  The timestamp on which Brexit will occur
  es                        e#  The current timestamp
  m                         e#  Subtract
  1e3/                      e#  Integer divide by 1000, converting to seconds from ms
  {                         e#  Run this block twice
   60md                     e#   Divmod by 60
   \                        e#   Swap top elements
  }2*                       e#  (end of block) 
                            e#    This block divmods the timestamp by 60, resulting in 
                            e#    the remaining minutes and seconds. Then the minutes get 
                            e#    divmod-ed by 60, to get hours and minutes remaining
  24md\                     e#  Divmod hours remaining by 24 and swap top elements, to get
                            e#    the hours left and days left.
  ]                         e#  Wrap the entire stack in an array
  W%                        e#  Reverse it since it's currently in the wrong order
  {                         e#  Apply this block to each element of the array
   s                        e#   Cast to string (array of digit characters)
   YTe[                     e#   Pad to length 2 by adding 0s to the left
  }%                        e#  (end of map block)
  ':*                       e#  Join with colons
  CTe[                      e#  Pad to length 12 by adding 0s to the left, dealing with the
                            e#    special case of the day being 3 digits. 
  o                         e#  Pop and print the resulting string, which is the time
  Dco                       e#  Print a carriage return, moving the cursor back to the start
  1                         e#  Push 1
}g                          e# Pop 1, if it's true, repeat (infinite loop)

अभी परीक्षण नहीं कर सकते, लेकिन आप शायद जगह ले सकता है Abके साथ sहै, और ऐसा करने से एक बाइट बचाने के 1e3/पहले और उसके बाद विपरीत क्रम में विभाजित 60md\60md\24md\]W%
मार्टिन एंडर

@MartinEnder हां, वे दोनों काम करते हैं। धन्यवाद
बिजनेस बिल्ली

ओह और {60md\}2*दूसरे को बचाता है।
मार्टिन एंडर

3

पायथन 3.5 (118 बाइट्स)

import datetime as d,os
d=d.datetime
while 1:os.system("cls");e=str(d(2019,3,31)-d.today());print(e[:3]+':'+e[-15:-7])

3

सी # 6, 149 बाइट्स

बॉब को 57 बाइट बचाने के लिए धन्यवाद !

using System;class P{static void Main(){DateTime a,x=new DateTime(2019,3,31);while((a=DateTime.Now)<x)Console.Write($"\r{x-a:ddd\\:hh\\:mm\\:ss}");}}

अनप्लग्ड प्रोग्राम:

using System;

class P
{
    static void Main()
    {
        DateTime a,
                x = new DateTime(2019, 3, 31);
        while ( (a = DateTime.Now) < x)
            Console.Write($"\r{x-a:ddd\\:hh\\:mm\\:ss}");
    }
}

सी #, 210 206 159 बाइट्स

एक और 47 बाइट्स बचाने के लिए बॉब को धन्यवाद !

4 बाइट बचाने के लिए मार्टिन स्मिथ को धन्यवाद !

using System;class P{static void Main(){DateTime a,x=new DateTime(2019,3,31);while((a=DateTime.Now)<x)Console.Write("\r"+(x-a).ToString(@"ddd\:hh\:mm\:ss"));}}

अनप्लग्ड प्रोग्राम:

using System;

class P
{
    static void Main()
    {
        DateTime a,
                x = new DateTime(2019, 3, 31);
        while ( (a = DateTime.Now) < x)
            Console.Write("\r" + (x - a).ToString(@"ddd\:hh\:mm\:ss"));
    }
}

1
new DateTime(2019,3,31)छोटा है।
मार्टिन स्मिथ

1
आप स्ट्रिंग को भी हटा सकते हैं Console.Clearऔर बदले में "\r", उदाहरण के लिए"\r"+(x-a)...
Bob

1
अधिक सुधार: (x-a).ToString(@"d\:hh\:mm\:ss")`स्ट्रिंग.फॉर्मट (" \ r {0: d \\: hh \\: mm \\: ss} ", xa) के बराबर है $@"{x-a:d\:hh\:mm\:ss}", C (6.0 में छोटे, प्रक्षेपित स्ट्रिंग ) के बराबर है । यदि आप ऐसा करते हैं, तो आप आगे पूर्ण "\r"+$@"{x-a:d\:hh\:mm\:ss}"को छोटा कर सकते हैं $"\r{x-a:d\\:hh\\:mm\\:ss}"
बॉब

1
@ TheLethalCoder मैंने लिया है कि बस एक "नकली" बहु newline दृष्टिकोण की अनुमति नहीं है। एक गाड़ी वापसी अभी भी स्क्रीन पर एकमात्र चीज को अधिलेखित करती है। कम से कम एक अन्य उत्तर भी इस दृष्टिकोण का उपयोग करता है। नींद को भी हटा सकते हैं क्योंकि यह केवल महत्वपूर्ण है कि प्रदर्शन प्रति सेकंड एक बार बदलता है , गैर-बदलते अपडेट की अनुमति है (प्रश्न टिप्पणियां देखें)। संपादित करें: वास्तव में, प्रश्न टिप्पणियाँ भी स्पष्ट रूप से सीआर ...
बॉब

1
@ मुझे खेद है कि मैंने आपके सुझाव को एक नई पंक्ति, मेरी गलती के रूप में पढ़ा। लेकिन हाँ नींद को हटाया जा सकता है
TheLethalCoder

3

सी, 104 बाइट्स

main(x){for(;x=1553990400-time(0);)printf("\n%03d:%02d:%02d:%02d\e[1A",x/86400,x/3600%24,x/60%60,x%60);}

टूट - फूट

main(x){
    for(;x=1553990400-time(0);)             // Seconds remaining
        printf("\n%03d:%02d:%02d:%02d\e[1A",// Move cursor and print:
            x/86400,                        // Days
            x/3600%24,                      // Hours
            x/60%60,                        // Minutes
            x%60);                          // Seconds
    puts("Now we can stop talking about it forever."); // Wishful thinking
}

time01/01/1970 से सेकंड की वापसी संख्या पर निर्भर करता है , जो मेरे लिए मामला है (macOS पर क्लेंग / जीसीसी का उपयोग करके) और अधिकांश यूनिक्स सामान के लिए मामला होना चाहिए।

कर्सर को चारों ओर ले जाने के लिए bash टर्मिनल एस्केप सीक्वेंस का उपयोग करता है ( <esc>[1Aकर्सर को 1 लाइन ऊपर ले जाता है)। यह केवल उपयोग करने में सक्षम होने के लिए अच्छा होगा \r, लेकिन printfयह तब तक फ्लश नहीं करेगा जब तक यह एक नई रेखा नहीं देखता है, और इसे मैन्युअल रूप से फ्लश करने में बहुत अधिक लगता है।

संभवतः सबसे सीपीयू गहन उलटी गिनती मैंने कभी देखी है। एक गर्म लूप में चलता है यह सुनिश्चित करने के लिए कि यह हमेशा उतना ही सटीक होता है जितना कि हो सकता है। यदि समय सीमा के बाद चलाया जाता है, तो यह कुछ बहुत ही अजीब सामान (हर जगह नकारात्मक) पैदा करेगा! "


@TobySpeight यकीन है, सही किया। मैं उन्हें बैश मानता हूं क्योंकि मैं हमेशा इस संदर्भ पृष्ठ का उपयोग करता हूं: tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
डेव

क्या सी में मुख्य के रूप के लिए कोई नियम हैं? C90 में: कॉल करने वाला (OS) रिटर्न वैल्यू का उपयोग करने की स्थिति में मुख्य कारणों से UB को छोड़ देता है। मानक C में: main(x)मुख्य का एक मान्य रूप नहीं है, भाषा से अंतर्निहित int हटा दिया गया है। मेरा मानना ​​है कि न्यूनतम, सुरक्षित संस्करण है int main(){}
लुंडिन

कोड गोल्फ में @ लुंडिन, भाषाओं को उनके कार्यान्वयन द्वारा परिभाषित किया गया है (यानी यदि आप एक सार्वजनिक रूप से उपलब्ध संकलक पा सकते हैं जो कोड को संकलित करता है कि आप कैसे चाहते हैं, तो आप इसे कर सकते हैं, लेकिन अगर इसे गैर-मानक झंडे सेटिंग की आवश्यकता है, तो वे झंडे आपकी ओर गिने जाएंगे bytecount)। आप सही हैं कि यह कहीं भी मानकों के अनुरूप नहीं है (साथ ही आपके द्वारा देखी गई बातें, बिना किसी आयात के कारण स्पष्ट रूप से परिभाषित फ़ंक्शन हैं और समय पर निर्भरता 01/01/1970 के बाद से कई सेकंड में लौटती है)। लोग (बल्कि तितर-बितर) नियमों के लिए मेटा पर एक नज़र डालें, जो लोग इधर-उधर करते हैं।
डेव

कोड गोल्फ चुनौतियों का मज़ा का हिस्सा विचित्र भाषा की हैक और अप्रचलित सुविधाओं की खोज कर रहा है!
डेव

3

एएचके , 145 बाइट्स

यह सबसे छोटा जवाब नहीं है, लेकिन परिणाम कयामत का एक बहुत अच्छा एहसास देता है, मुझे लगता है। मैंने मूल रूप से कीस्ट्रोक्स Ctrl+ के Aबाद भेजने की कोशिश की DELऔर फिर जो भी समय था लेकिन ताज़ा दर बहुत धीमी थी और यह जो भी वातावरण में था उसे नष्ट कर देगा। इसके बजाय, फिर, मैं GUI के साथ गया। यह कम बाइट लेने के लिए पूरी तरह से खिड़की को नष्ट करने और इसे फिर से बनाने की तुलना में यह नियंत्रण को अद्यतन करने के लिए किया था और इसलिए मैं इसके साथ गया था। यह एक अच्छा प्रभाव है।

Loop{
s=20190331000000
s-=A_Now,S
d:=t:=20000101000000
t+=s,S
d-=t,D
d*=-1
FormatTime f,%t%,:HH:mm:ss
GUI,Destroy
GUI,Add,Text,,%d%%f%
GUI,Show
}

मैं कयामत गाना गा रहा हूँ!


3

सी #, 128 127 बाइट्स

using System;class P{static void Main(){for(;;)Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");}}

अघोषित कोड:

using System;
class P
{
    static void Main()
    {
        for(;;)
            Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}"); 
    }
}

मैं अन्य सी # उत्तर से मदद के बिना \ r चाल पता नहीं लगा होता।

आगे के सुधार की तलाश में किसी के लिए, आप लूप के अंदर लिखें () अभिव्यक्ति डाल सकते हैं। लगता है कि मुझे किसी तरह यहां एक बाइट को बचाने में सक्षम होना चाहिए, क्योंकि यह मुझे उस बयान के लिए अर्ध-बृहदान्त्र बचाता है, लेकिन यह उसी संख्या में काम करता है क्योंकि आपके पास पूरी तरह से खाली शरीर नहीं हो सकता है:

using System;class P{static void Main(){for(;;Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}"));}}

PPCG में आपका स्वागत है!
मार्टिन एंडर

आप अभी भी एक प्रक्षेपित स्ट्रिंग का उपयोग करके एकल चरित्र को बचा सकते हैं;)Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
बॉब

अच्छी तरह से खेला, मैंने कम से कम संभव कोड में थोड़ी देर (सच) लूप का रास्ता खोजने की कोशिश की! मुझे वह ट्रिक याद होगी। आपको कुछ स्थानों को जोड़ने की आवश्यकता हो सकती है जैसे कि मैंने आपके लेखन के लिए किया था अन्यथा जब दिन 3 अंकों से 2 अंकों तक चले जाते हैं, तो यह आपके समय स्ट्रिंग के अंतिम चरित्र को अधिलेखित नहीं करेगा और आपको एक अजीब आउटपुट मिलेगा
NibblyPig

आप मेरे उत्तर की तरह एक प्रक्षेपित स्ट्रिंग का उपयोग करके एक बाइट को बचा सकते हैं। आपका dddजीरो पैड का प्रारूप , दो रिक्त स्थान की विधि से अच्छा दिखता है।
TheLethalCoder

प्रक्षेपित स्ट्रिंग के लिए अद्यतन किया गया।
जोएल कोएहॉर्न

3

रूबी (83 बाइट्स)

loop{h=431664-Time.now.to_r/3600;$><<['%02d']*4*?:%[h/24,h%24,h%1*60,h*3600%60]+?\r}

Ungolfed

loop do
  seconds = 1553990400 - Time.now.to_r

  print (["%02d"] * 4).join(':') % [
    seconds / 24 / 60 / 60     ,
    seconds      / 60 / 60 % 24,
    seconds           / 60 % 60,
    seconds                % 60,
  ] + "\r"
end

मूल रूप से अजगर सुधारों में से एक, कुछ सुधारों के साथ। हम बस पुनः आरंभ करने से पहले स्ट्रिंग की शुरुआत करने के लिए एक "\ r" उत्सर्जित करते हैं। और के स्ट्रिंग प्रारूप के लिए "%03d:%02d:%02d:%02d", हम वास्तव में पहली निर्दिष्ट सीमा पर चौड़ाई के बारे में परवाह नहीं करते हैं ... इसलिए हम बस कर सकते हैं "%02d"*4, और एक अतिरिक्त क्षेत्र को खाली करने के लिए एक बैकस्पेस और एक स्थान का उत्सर्जन कर सकते हैं ।

इसके अलावा, मैं एक दो चरित्र कम पाया print: $><<$>एक आशुलिपि के लिए वैश्विक है $defout, जिसके लिए उत्पादन धारा है printऔर printfऔर डिफ़ॉल्ट रूप में STDOUTIO#<<इसके दाहिने हाथ को धारा में लिखता है। वह दो अक्षर छोटा कैसे है? खैर, अब मैं उस जगह को छोड़ सकता हूं, जिसके आगे प्रारूप स्ट्रिंग को लपेटते हुए कोष्ठक का नेतृत्व किया गया था।

इस बिंदु पर मुझे लगता है कि रूबी में इस कार्यक्रम को और छोटा करने का कोई संभव तरीका नहीं है।

संपादित करें: मैं गलत था। पहले के बजाय Time.new(2019,3,31), हम सिर्फ कच्चे यूनिक्स समय का उपयोग कर सकते हैं 1553990400:।

संपादित करें 2: मैंने मिनटों में फैक्टरिंग के साथ खेलने की कोशिश की है, और UNIX टाइमस्टैम्प को उस निरंतर द्वारा विभाजित किया है, लेकिन यह वास्तव में किसी भी बाइट को बचाने के लिए हवा नहीं देता है। :(

संपादित करें 3: कैशिंग बाहर मुड़ता है h=3600वास्तव में मुझे दो बाइट्स से चोट लगी है। ओह।

संपादित करें 4: सहेजे गए 3 बाइट @EricDuminill के लिए धन्यवाद। उन्होंने झांकियों का इस्तेमाल किया, लेकिन तर्कसंगत सटीकता के नुकसान के बिना तर्कसंगत काम करते हैं!

संपादित करें 5: व्यक्तिगत पात्रों के लिए रूबी -syntax के साथ Array#*एक उपनाम के रूप में !Array#join?


सेकंड के बजाय घंटों के साथ काम करने से 3 बाइट्स बचती हैं: loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}गोलाई के कारण सेकंड 1 तक बंद हो सकते हैं।
एरिक डुमिनील

धन्यवाद! अब PHP के साथ बंधे। :) मैंने परिशुद्धता को संरक्षित करने के to_rबजाय उपयोग किया to_f
स्टीफन टॉसेट

आपका स्वागत है। यह घड़ी अभी भी 1s जल्दी हो सकती है, भले ही .to_rइसके बजाय.to_f
एरिक डुमिनील

@StephenTouset आप +"\r"सरणी के दाईं ओर ले जा सकते हैं । यह आपको ['%02d']*4*?:इसके बजाय उपयोग करने में सक्षम बनाता है '%02d:'*4+"\b "ताकि आप कोष्ठक खो सकें, जो आपको एक बाइट देता है। के +?\rबजाय लिखकर अभी तक एक और बाइट बचाओ +"\r"
सिणोली

बहुत बढ़िया खोज!
स्टीफन टॉसेट


2

सी #, 142 बाइट्स

using System;class P{static void Main(){a:Console.Write($"\r{(new DateTime(2019,3,31)-DateTime.Now).ToString("d\\:h\\:mm\\:ss  ")}");goto a;}}

अनप्लग्ड प्रोग्राम:

using System;
class P
{
    static void Main()
    {
        a: Console.Write($"\r{(new DateTime(2019, 3, 31) - DateTime.Now).ToString(@"d\:h\:mm\:ss  ")}"); goto a;
    }
}

यह मुद्रण बंद हो जाएगा जब यह brexit हिट, यकीन है कि अगर यह एक समस्या नहीं है
TheLethalCoder

@ TheLethalCoder यह कानूनी है। निर्देश विशेष रूप से कोड को केवल 31/3/2019 तक काम करना है, और उसके बाद क्या होता है, इससे कोई फर्क नहीं पड़ता। यदि आप उस तारीख के बाद अजीब आउटपुट या अपवाद भी करके बाइट्स को बचा सकते हैं, तो आपके लिए अधिक शक्ति।
जोएल कोएहॉर्न

इसके अलावा: मुझे संदेह है कि ToString()बाइट को छोड़ कर इसे छोटा करना भी संभव होगा और इसके बजाय लिखें () विधि में प्रारूपण का निर्माण करें, या शायद एक प्रक्षेपित स्ट्रिंग
जोएल कोएहॉर्न

ठीक है ... यह निश्चित रूप से संभव है। मेरे पास यह 127 बाइट्स है। मैं इसे आपके मूल से नीचे जोड़ रहा हूं, इसलिए आपको अभी भी मूल gotoविचार का श्रेय प्राप्त है।
जोएल कोएहॉर्न

मेरा संपादन समाप्त हो गया :( लगता है कि मुझे अपना उत्तर पोस्ट करना होगा।
जोएल कोएहॉर्न

2

बैश + जीएनयू तिथि, 128 बाइट्स

2 बाइट्स @ मुरू की बदौलत मुंडन करवाते हैं, और 2 पहले के @ गाई के लिए धन्यवाद।

C=:%02d;while sleep 1;do D=$[B=3600,A=24*B,1553990400-`date +%s`];printf "%03d$C$C$C\r" $[D/A] $[D%A/B] $[D%A%B/60] $[D%60];done

Ungolfed

DAY=86400
HOUR=3600
while sleep 1 ; do
 DIFF=$[1553990400-`date +%s`]
 printf "%03d:%02d:%02d:%02d\r" \
         $[DIFF/DAY] \
         $[DIFF%DAY/HOUR] \
         $[DIFF%DAY%HOUR/60] \
         $[DIFF%60]
done

1
पहले कभी भी बाश में गोल्फ नहीं हुआ लेकिन क्या आप कुछ ही समय में रिक्त स्थान हटा सकते हैं while[1]:?
caird coinheringaahing

उचित बिंदु, अब दिया है कि एक कोशिश लेकिन यह line 1: [1]: command not foundत्रुटि पैदावार । रिक्तियों की अनिवार्य हैं ऐसा लगता है :-(
स्टीव

2
36002 बाइट्स को बचाने के लिए एक चर को असाइन करें ? तुम भी बदलने के लिए सक्षम हो सकता है B=3600;A=86400के लिए B=3600;A=24*Bएक और बाइट के लिए?
caird coinheringaahing

3600 चर अब किया, thx। 24 * बी की आवश्यकता होगी A=$[24*B]तो संभव नहीं वहाँ हालांकि
स्टीव

1
C=:%02d;printf "%03d$C$C$C\r"एक बाइट बचाने के लिए? और अंकगणितीय संदर्भ में ए और बी को असाइनमेंट को स्थानांतरित करें: D=$[B=3600,A=24*B,1553990400-`date +%s`]दूसरे को बचाने के लिए?
मुरु

2

MATL, 45 बाइट्स

737515`tZ'-tkwy-':HH:MM:SS'XOw'%03d'YDwYcDXxT

TIO स्पष्ट रूप से आउटपुट को साफ़ करने का समर्थन नहीं करता है, लेकिन शुक्र है MATL ऑनलाइन करता है !

2 बाइट्स पर, थोड़ा अधिक सीपीयू-फ्रेंडली वर्जन जो pauseहर सेकंड एक (नींद) करता है :

737515`tZ'-tkwy-':HH:MM:SS'XOw'%03d'YDwYcDT&XxT

MATL ऑनलाइन पर यह प्रयास करें

737515"31 मार्च 2019 का 31" है MATLAB के डिफ़ॉल्ट युग प्रारूप का प्रतिनिधित्व किया - 0 जनवरी, 0000 से दिनों की संख्या, वैकल्पिक रूप से दिन के समय का प्रतिनिधित्व करने के लिए एक आंशिक भाग सहित। (मैंने इसे किसी तरह से गणना करके इसे छोटा करने की कोशिश की, लेकिन इसके केवल कारक 5 हैं और एक और छह अंकों की संख्या (147503), और मैं इसे 6 बाइट्स से कम में करने का तरीका नहीं समझ सका।)

`    % start do-while loop
tZ`- % duplicate Brexit date, get current date (& time), subtract
tk   % duplicate the difference, get the floor of it (this gives number of days left)
w    % switch stack to bring unfloored difference to top
y    % duplicate the floored value on top of that
-    % subtract to get fractional part representing time
':HH:MM:SS'XO % get a datestr (date string) formatted this way
w    % switch to bring number of days back on top
'%03d'YD      % format that to take 3 places, with 0 padding if needed
wYc  % switch to bring time string back on top, concatenate date and time
D    % display the concatenated result!
T&Xx % clear screen after a 1 second pause (the pause is optional, without it the call is `Xx`)
T    % push True on stack to continue loop

1

PHP, 64 बाइट्स

while($d=1553990401-time())echo--$d/86400|0,date(":H:i:s\r",$d);

यह 0:00:00:00तब तक ठीक से गिना जाएगा और तब तक टूटेगा / बाहर निकलेगा। साथ चलाना -r

-2 बाइट्स अगर मुझे 0 प्रिंट नहीं करना है।


1

आरपीएल, 83 78 बाइट्स

अपना HP48, या समान मानकर, सही (यूके) समय और दिनांक, मिमी / dd दिनांक प्रारूप और 24 घंटे समय प्रारूप के साथ सेटअप किया गया है:

WHILE 1REPEAT DATE 3.302019DDAYS":"1.1 24TIME HMS- TSTR 15 23SUB + + 1DISP END

मैं आसपास के रिक्त स्थान को हटाकर 2 बाइट्स को बचाने में सक्षम होने के लिए आश्चर्यचकित था ":"। 1.1 सबसे छोटी वैध तारीख है, जिसे बाद में डंप किया गया SUB। एमुलेटर के साथ सावधान रहें, समय आपकी दीवार घड़ी की तुलना में तेज या धीमा (या बिल्कुल नहीं) चल सकता है। एक वास्तविक एचपी के साथ, आप ओन कुंजी दबाकर इस कार्यक्रम को रोक सकते हैं ... या खाली बैटरी की प्रतीक्षा कर सकते हैं।


0

PHP, 102 95 90 बाइट्स

सहेजे गए 7 बाइट्स @ TheLethalCoder और फैक्टरिंग द्वारा नहीं

एक और 5 बाइट्स को समवर्ती करके बचाया

<? $b=1553990400-time();echo floor($b/$d=86400).date(':H:i:s', $b%$d);header('Refresh:1');

यह मेरा पहला गोल्फ है, इसलिए मैं शायद कुछ चालें याद कर रहा हूं, लेकिन यहां आप परवाह नहीं कर रहे हैं।

जैसा कि @chocochaos 'PHP उत्तर के लिए है जो अन्यथा इसे ट्रम्प करेगा, मेरा मानना ​​है कि यह उन कारणों के लिए त्रुटिपूर्ण है, जो मैंने अपनी टिप्पणियों में बताए हैं, लेकिन जैसा कि मैं यहां नया हूं मैं गलत हो सकता हूं। या मैं सिर्फ नौसिखिया हूँ :)


आपको एक समापन टैग की आवश्यकता हो सकती है? (उस पर यकीन नहीं है)। आप केवल $aएक बार उपयोग करते हैं इसलिए जगह में संख्या का उपयोग कर सकते हैं। मैं भी php से परिचित नहीं हूँ, लेकिन लगता है कि वहाँ और अधिक सुधार हो सकता है
TheLethalCoder

आपका क्या मतलब है flawed because of reasons stated in the comments? यदि आपको उनके उत्तर पर टिप्पणियों का मतलब है, तो आप केवल वही हैं जिसने टिप्पणी की है।
caird coinheringaahing

@TheLethalCoder कोई समापन टैग की जरूरत है। और अच्छा है!
स्वोरूब वेहट्टम

1
आप एक <?=उद्घाटन टैग का उपयोग करके और प्रतिध्वनित करने $bवाले स्थान को असाइन करके ~ 7 बाइट्स बचा सकते हैं , पहले उस जगह का उपयोग करें। इसके अतिरिक्त आप इसके ^0बजाय 3 बाइट्स बचा सकते हैं floor। यह बिटवाइज़ है या इसमें इंट कास्ट शामिल है, यह मैंने देखा है इंट के लिए सबसे छोटा तरीका है।
user59178

1
मेरा उत्तर ठीक चलता है :) इसके अलावा, आप कुछ पोस्ट यहाँ पढ़ना चाह सकते हैं: codegolf.meta.stackexchange.com/questions/tagged/php टैग खोलने की कोई आवश्यकता नहीं है। मैं वास्तव में आपके समाधान को इस तरह से लिखने की सलाह दूंगा कि यह कमांड लाइन से चलेगा, फिर आपको रिफ्रेश करने के लिए हेडर के साथ गड़बड़ नहीं करनी होगी। वह ताज़ा आपके समाधान को एक बार "मिस" करने का कारण भी बनेगा, क्योंकि यह अनुरोध पर खोए हुए समय को ध्यान में नहीं रखता है।
चोकोचोस

0

AWK , 78 बाइट्स

BEGIN{for(;v=1552953600-systime();printf"\r%d:%s",v/86400,strftime("%T",v)){}}

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

इससे पहले कि मुझे एहसास होता कि मैं अंत समय का पूर्वाभास कर सकता हूं। कभी-कभी यह खेल के लिए थोड़ा देर से भुगतान करता है और दूसरों से विचार प्राप्त करता है।

FYI करें, TIO लिंक बहुत अच्छी तरह से काम नहीं करता है, क्योंकि यह \rठीक से लागू नहीं होता है।


0

एफ #, 142 बाइट्स

open System
let f=
 let t=DateTime(2019,3,31)
 while DateTime.Now<=t do Console.Clear();t-DateTime.Now|>printf"%O";Threading.Thread.Sleep 1000

मैं सीमा से लगभग आधा किलोमीटर दूर आयरलैंड में पला-बढ़ा हूं। "वेलकम टू फर्मानघ" साइन के अलावा और सड़क के निशान बदलने से आपको पता नहीं चलता कि आप दूसरे देश में प्रवेश कर चुके हैं। स्कूल के रास्ते में इसे दो बार पार करते थे।


0

c, 114 बाइट्स gcc

main(s){system("clear");if(s=1553900399-time(0)){printf("%d:%d:%d:%d\n",s/86400,s/3600%24,s/60%60,s%60);main(s);}}

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

UnGolfed

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>


//Brexit countdown timer
int main(){
  int sec = 1553900400 - time(0);//seconds remaining until Brexit
  if(sec){
    sleep(1);
    system("clear");
    printf("Brexit Countdown\n");
    printf("days Hours Mins Secs\n");
    printf("%d:  %d:    %d:  %d\n",
            sec/86400, sec/3600%24,
            sec/60%60, sec%60);
    main();
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.