চিরন্তন 2014 - PCG.SE নতুন বছরের ধাঁধা 2015


29

সুতরাং, এখন এটি 2015, এবং গত বছরের ধাঁধা থেকে একগুচ্ছ উত্তর এখন অবৈধ আউটপুট উত্পাদন শুরু করছে , এটি 2015 সংখ্যার সাথে জড়িত একটি প্রশ্নের জন্য সময় এসেছে।

বাদে ... কেন? আপনি কি পছন্দ করবেন না যদি গত বছরের সমস্যার আপনার তারিখ-ভিত্তিক উত্তরগুলি বৈধ থাকত? আমরা কেন আমাদের ক্যালেন্ডারটি এমন পরিবর্তন করি না যাতে এটি 2015 হয় না এবং আমরা কেবলমাত্র চিরকাল এবং 2014 সালেই বাঁচি?

আসুন একটি নতুন তারিখ স্বরলিপিটি সংজ্ঞায়িত করুন যাকে বলা হয় চিরন্তন 2014 সংকেত , যা নীচে:

  • 2014 এবং তার আগে তারিখগুলির জন্য, তারিখগুলি প্রলেপটিক গ্রেগরিয়ান ক্যালেন্ডারের মতো হবে
  • ২০১৫ এবং তার পরের বছরের তারিখগুলির জন্য, বছরটি ২০১৪ সালে থাকবে এবং মাসটি এটি সংখ্যা হবে যদি ২০১৪ সালের একই মাসের চক্রটি গত মাস ধরে চিরকাল চলতে থাকে। তাই 2015-02-08হবে 2014-14-08, এবং 2020-12-31হবে 2014-85-02। নোট করুন যে লিপ দিনগুলি হিসাব করা হয় না কারণ 2014 একটি লিপ বছর নয়।

আপনার কাজ হ'ল এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা জুলিয়ান জ্যোতির্বিদ্যার তারিখটিকে ইনপুট হিসাবে গ্রহণ করবে এবং জুলিয়ান তারিখের সাথে তারিখের সাথে একটি স্ট্রিং ফিরিয়ে দেবে শাশ্বত 2014 স্বরলিপি, যে কোনও YYYY-MM-DDবা DD/MM/YYYYবিন্যাসে।

আপনি ধরে নিতে পারেন যে জুলিয়ান দিনটি প্রবেশ করা সর্বদা 1721426(1 জানুয়ারী 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

অস্ট্রিচ ০.০.০ , 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.wikedia.org/wiki/Julian_day# গ্রেগরিয়ান_ক্যালেন্ডার_ফুল_ জুলিয়ান_ডাই_নম্বার থেকে অ্যালগরিদম


0

পিএইচপি (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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.