अनन्त 2014 - PCG.SE नए साल की पहेली 2015


29

तो, अब जब कि यह 2015 है, और पिछले साल की पहेली से उत्तरों का एक गुच्छा अब अमान्य आउटपुट का उत्पादन करना शुरू कर रहा है , यह नंबर 2015 से जुड़े प्रश्न के लिए समय है।

सिवाय ... क्यों? यदि आप पिछले साल की समस्या के लिए अपने तिथि-आधारित उत्तर मान्य रहने के लिए थे, तो क्या आप इसे पसंद नहीं करेंगे? हम अपना कैलेंडर क्यों नहीं बदलते ताकि यह कभी भी 2015 न हो, और हम 2014 में हमेशा और हमेशा के लिए जीवित रहें?

आइए एक नई तिथि संकेतन को परिभाषित करें, जिसे अनन्त 2014 अंकन कहा जाता है , इस प्रकार है:

  • 2014 और उससे पहले की तारीखों के लिए, तिथियां प्रोलेप्टिक ग्रेगोरियन कैलेंडर के समान होंगी
  • वर्ष 2015 और आगे में तिथियों के लिए, सन् 2014 रहना होगा, और महीने के नंबर यह हो सकता है अगर 2014 में इसी महीने चक्र जारी रखने के लिए हमेशा के लिए पिछले एक महीने के 12. तो थे हो जाएगा 2015-02-08होगा 2014-14-08, और 2020-12-31हो सकता है 2014-85-02। ध्यान दें कि लीप दिनों का हिसाब नहीं है क्योंकि 2014 एक लीप वर्ष नहीं है।

आपका कार्य एक प्रोग्राम या फ़ंक्शन का निर्माण करना है जो एक जूलियन खगोलीय तिथि को इनपुट के रूप में लेगा और उस जूलियन तिथि के समान तारीख के साथ एक स्ट्रिंग लौटाएगा जिसमें अनन्त 2014 अंकन, YYYY-MM-DDया तो DD/MM/YYYYप्रारूप में है।

आप मान सकते हैं कि दर्ज किया गया जूलियन दिन हमेशा 1721426(1 जनवरी, 1) से 2914695(23 जनवरी, 3268) तक पूर्णांक होगा । वर्षों में अग्रणी शून्य से 4 अंक तक पैड हो सकते हैं या नहीं, लेकिन महीनों और दिनों में हमेशा दो अंकों में पैड के लिए अग्रणी शून्य होना चाहिए (और वर्षों में 4 के अलावा किसी भी संख्या में पैड के लिए अग्रणी शून्य नहीं हो सकता है)।

यहां सभी स्वीकार्य स्वरूपों में कुछ उदाहरण इनपुट और उनके आउटपुट दिए गए हैं:

> 1721426
1-01-01
01/01/1
0001-01-01
01/01/0001

> 2086302
999-12-31
31/12/999
0999-12-31
31/12/0999

> 2456659
2014-01-01
01/01/2014

> 2456789
2014-05-11
11/05/2014

> 2457024
2014-13-01
01/13/2014

> 2457389
2014-25-01
01/25/2014

> 2469134
2014-411-07
07/411/2014

> 2567890
2014-3657-29
29/3657/2014

> 2914695
2014-15059-23
23/15059/2014

आप अपनी भाषा में किसी भी अंतर्निहित तारीख में प्रसंस्करण पुस्तकालयों का उपयोग नहीं कर सकते हैं। सभी गणना कार्यक्रम के स्रोत कोड के भीतर ही एल्गोरिदम से की जानी चाहिए।

किसी भी भाषा में जीत हासिल करने के लिए सबसे छोटा कार्यक्रम (बाइट्स में)।


3
हा, विंटर बैश के शुरू होते ही यह सवाल 25 बढ़ जाता है।
जो जेड।

जवाबों:


12

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

n=input()
d=m=y=1
M=([3]+[3,2]*3)*2
while n>1721426:
 n-=1;d+=1;M[2]=y%400<1or y%4<1<y%100
 if d>M[m%12]+28:m+=1;d=1
 if m>12<2014>y:y+=1;m=1
print'%02d/'*2%(d,m)+`y`

यह 1 जनवरी, 1 (1721426) से प्रत्येक दिन के माध्यम से दी गई तारीख तक, वर्तमान दिन, महीने और वर्ष को बढ़ाता है क्योंकि यह चलता है। अंतिम परीक्षण का मामला मेरे कंप्यूटर पर लगभग एक सेकंड का है।

आउटपुट दूसरे प्रारूप में मुद्रित होता है:

01/01/1
31/12/999
23/15059/2014

3

शुतुरमुर्ग 0.5.0 , 197 बाइट्स

G~:J1401+4J*274227+146097/F3*4/F+38~+:f4*3+:e1461:p%4/F:g5*2+:h153:s%5/F1+:D;hs/F2+12:n%1+:M;ep/F4716-n2+M-n/F+:Y;{2014:Y;D365+:D;{M1-12%[31:x28x 30:yxyxxyxyx]=:dD<.{Dd-:D;M1+:M;}*}(}Y2014-*D"/M"/Y

अघोषित (हा):

G~:J;
4716:y;1401:j;2:m;12:n;4:r;1461:p;3:v;5:u;153:s;2:w;274277:B;38~:C;
Jj+4J*B+146097/F3*4/F+C+:f;
rf*v+:e;
ep%r/F:g;
ug*w+:h;
hs%u/F1+:D;
hs/Fm+n%1+:M;
ep/Fy-nm+M-n/F+:Y;
{
2014:Y;
D365+:D;
{
M1-12%[31 28 31 30 31 30 31 31 30 31 30 31]=:d
D<.{Dd-:D;M1+:M;}*
}(
}Y2014-*
D"/M"/Y

मैं ... वास्तव में सभी नए साल की खुशी से थक गया हूं और क्या नहीं। यही कारण है कि मैंने इसे बहुत अधिक नहीं बढ़ाया है। मैं इसे बेहतर बनाने के लिए वापस आ सकता हूं या नहीं।

Https://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number से एल्गोरिथम


0

PHP (278)

कमांड लाइन का उपयोग करके चलाएँ php -R '<code>'। (ध्वज एक वर्ण के रूप में गिना जाता है।)

if(0<$N=($n=$argn-1721426)-735233){$n=$N%365+735233;$o=12*($N/365|0);}for($y=1+400*($n/146097|0)+100*(($n%=146097)/36524|0)+(($n%=36524)/1461<<2)+(($n%=1461)/365|0);($n%=365)>=$d=@++$m-2?30+($m+($m>>3)&1):29-($y%4||!($y%100)&&$y%400);)$n-=$d;printf("$y-%02d-%02d",$m+@$o,$n+1);

अधिक पठनीय संस्करण (फ़ाइल नाम और बिना उपयोग किए चलाएं -R):

<?php

// step 1: read the input and fix up 2014 dates
if (0 < $N = ($n = fgets(STDIN) - 1721426) - 735233) {
    $n = $N % 365 + 735233; // wrap around to 2014-01-01
    $o = 12 * ($N / 365 | 0); // compute month offset
}

for (

// step 2: extract year
$y = 1
    + 400 * ($n / 146097 | 0)
    + 100 * (($n %= 146097) / 36524 | 0)
    + (($n %= 36524) / 1461 << 2)
    + (($n %= 1461) / 365 | 0);

// step 3: extract month and day
($n %= 365) >= $d = @++$m - 2
    ? 30 + ($m + ($m >> 3) & 1)
    : 29 - ($y % 4 || !($y % 100) && $y % 400);

) $n -= $d;

// step 4: print date string, adding the month offset
// previously computed in step 1.
printf("$y-%02d-%02d", $m + @$o, $n + 1);

0

सी (सॉर्ट ... जीसीसी इसे अनुमति देता है) 183

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

y=1;m;d;main(n,a){for(n=atoi(a[1]);n-->1721426;)++d>((m%12<7?m%2==0:m%2!=0)?30:m%12-1?29:y%(y%100?4:400)?27:28)&&(++m,d=0,m>11&&y<2014)&&(++y,m=0);printf("%d-%02d-%02d\n",y,m+1,d+1);}

यह @grc द्वारा पायथन 2 उत्तर के समान एल्गोरिथ्म का उपयोग करता है

संकलन के बाद का आउटपुट है

test2014 2086302
999-12-31

test2014 2456659
2014-01-01

test2014 2456789
2014-05-11

test2014 2457024
2014-13-01

test2014 2457389
2014-25-01

test2014 2469134
2014-411-07

test2014 2567890
2014-3657-29

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