লিপ সেকেন্ডের জন্য লাফ!


28

যেহেতু আজ ২ 26 তম লিপ দ্বিতীয়বারের মতো উপলক্ষে চিহ্নিত হয়েছে, তাই আপনার চ্যালেঞ্জ হ'ল জিএমটি বা ইউটিসি-তে এখন পর্যন্ত যে প্রতিটি লিপ সেকেন্ড রয়েছে তার তারিখ এবং সময় এবং একই সাথে আজকের ঘটনাটি ঘটবে।

ইনপুট

কোনও ইনপুট নেই।

আউটপুট

1972-06-30 23:59:60
1972-12-31 23:59:60
1973-12-31 23:59:60
1974-12-31 23:59:60
1975-12-31 23:59:60
1976-12-31 23:59:60
1977-12-31 23:59:60
1978-12-31 23:59:60
1979-12-31 23:59:60
1981-06-30 23:59:60
1982-06-30 23:59:60
1983-06-30 23:59:60
1985-06-30 23:59:60
1987-12-31 23:59:60
1989-12-31 23:59:60
1990-12-31 23:59:60
1992-06-30 23:59:60
1993-06-30 23:59:60
1994-06-30 23:59:60
1995-12-31 23:59:60
1997-06-30 23:59:60
1998-12-31 23:59:60
2005-12-31 23:59:60
2008-12-31 23:59:60
2012-06-30 23:59:60
2015-06-30 23:59:60

বিধি

যেহেতু আমার সন্দেহ আছে যে অনেকগুলি বিল্ট-ইন রয়েছে যা লিপ-সেকেন্ডের অনুমতি দেয়, তাই আমি তাদের অনুমতি দেব।

স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

সংক্ষিপ্ততম কোড জিতেছে।

তারিখের ফর্ম্যাটটিতে শূন্য-প্যাডযুক্ত মাস এবং 4-অঙ্কের বছর, পাশাপাশি সামরিক সময় এবং সময় থেকে তারিখটি পৃথক করতে হবে। UTCশেষে রাখা alচ্ছিক । আপনার ড্যাশ বা স্ল্যাশগুলির পছন্দ।

সম্পাদনা: হ্যাঁ পূর্বাভাস অনুসারে, এটি একটি এনকোডিং চ্যালেঞ্জ হয়ে উঠেছে। যদি কেবল এনকোডিংই লিপ দ্বিতীয় সমস্যাটি ঠিক করতে পারে, ... তবে আমাদের সমস্ত কোডটি অনেক বেশি ব্যবহারিক হবে। ব্যবহারিক ব্যবহারের সাথে আরও মজাদার চ্যালেঞ্জগুলির জন্য আমাদের কিছু ধারণা প্রয়োজন?


আউটপুটে কি সেই সঠিক বিতরণ থাকা দরকার, বা 26 তারিখ থাকা অবধি তার কোনও বিতরণ থাকতে পারে?
ইসমাইল মিগুয়েল

2
@ ইসমাইল মিগুয়েল তাদের এই ক্রমে থাকা দরকার।
mbomb007

বিষয়টির বাইরে, তবে তালিকার দিকে তাকিয়ে আমি ভাবছি যে আমরা কেন আগের শতাব্দীর চেয়ে আজকাল কম লিপ সেকেন্ডের প্রয়োজন।
মিস্টার লিস্টার

@ শ্রীলিস্টার লিঙ্কিত উইকিপিডিয়া নিবন্ধটি দেখুন। আমি মনে করি এটি পৃথিবীর পরিবর্তনশীল গতির সাথে সম্পর্কযুক্ত do
mbomb007

উত্তর:


25

সিজেম, 72 70 69 64 বাইট

26,"~g¼K&Béx¸¦­Ø"240bFbf{<1b2md\1972+'-@6X$4*-'-Z3$" 23:59:60"N}

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

আমরা যত প্রতিটি লিপ সেকেন্ড এনকোডিং করে শুরু + d - 2 * (1972 ওয়াই) , যেখানে ডি হল 1 যদি এটা ডিসেম্বরে এবং ঘটে 0 অন্যথায়।

সমস্ত এনকোডেড লিপ সেকেন্ডের অ্যারেটি হ'ল:

[0 1 3 5 7 9 11 13 15 18 20 22 26 31 35 37 40 42 44 47 50 53 67 73 80 86]

আসুন এই অ্যারে এল

যেহেতু অ্যারে আরোহী ক্রমে রয়েছে, তাই আমরা প্রকৃত সংখ্যার পরিবর্তে ধারাবাহিক পার্থক্যগুলি সংরক্ষণ করতে পারি:

[1 2 2 2 2 2 2 2 3 2 2 4 5 4 2 3 2 2 3 3 3 14 6 7 6]

এই অ্যারেটিকে একটি বেস 15 সংখ্যার অঙ্ক হিসাবে গণ্য করে আমরা পূর্ণসংখ্যা পাই

19238985373462115979359619336

240 বেসে (অঙ্কগুলিতে কাস্ট করা) অঙ্কগুলি

~g¼K&Béx¸¦­Ø

কোড

26,             e# Push I := [0 ... 25].
"~g¼K&Béx¸¦­Ø"   e# Push the string from above.
240bFb          e# Convert from base 250 to base 15 to push L.
f{              e# For each J in I:
                e#   Push L.
  <             e#   Replace L with L[:J].
  1b            e#   Push the sum S of the integers in L[:J].
  2md           e#   Push (S / 2) and (S % 2).
  \1972+        e#   Add 1972 to (S / 2).
  '-@           e#   Push '-' and rotate (S % 2) on top.
  6X$4*-        e#   Compute (6 - 4 * (S % 2)).
  '-Z           e#   Push '-' and 3.
  3$            e#   Push a copy of (S % 2).
  " 23:59:60"   e#   Push that string.
  N             e#   Push a linefeed.
}

28
এই অনুভূতি যখন আপনার মধ্যে বিল্ট থাকে তখন প্রায় সম্পূর্ণ সমস্যার সমাধান হয় এবং তবুও সিজেমে ম্যানুয়াল সমাধানটি সংক্ষিপ্ত হয়।
অ্যালেক্স এ

9
@AlexA। সেখানে ম্যাথামেটিকাল মধ্যে কিছু বিল্ট-ইন যা আমি তার চেয়ে কম বাইটে reimplement পারে ম্যাথামেটিকাল মধ্যে
মার্টিন এন্ডার

@ মার্টিনবাটনার: নৃশংস।
অ্যালেক্স এ।

35

আর, 78 75 বাইট

বিল্ট-ইনস, আপনি বলেন? আচ্ছা ...

message(paste(as.Date(.leap.seconds)-1,"23:59:60\n"),"2015-06-30 23:59:60")

আর এর একটি স্বয়ংক্রিয় পরিবর্তনশীল .leap.secondsরয়েছে যা সিস্টেমের স্থানীয় সময় প্রদত্ত প্রতিটি লিপ দ্বিতীয় সন্নিবেশের তারিখ এবং সময় ধারণ করে। আর সংস্করণ ৩.২.০ হিসাবে, এটি আজ অন্তর্ভুক্ত করে না, তাই আমি ম্যানুয়ালি যোগ করেছি।

অবহেলিত + ব্যাখ্যা:

# Convert the datetime values to UTC dates. These will be a day past the
# expected output, so we can subtract 1 to get what we want.
dates <- as.Date(.leap.second) - 1

# Paste the UTC time and a newline onto the end of each date
datetimes <- paste(dates, "23:59:60\n")

# Print each time, including today, on its own line
message(datetimes, "2015-06-30 23:59:60")

আপনি এটি অনলাইন চেষ্টা করতে পারেন !


আপনি যদি কোনও ভেরিয়েবলকে "23:59:60" বরাদ্দ করতে পারেন তবে আপনি কিছু অক্ষর সংরক্ষণ করতে পারেন
চার্লস

1
@ নোটাটচার্লস: আমি সে সম্পর্কে ভেবেছিলাম, তবে স্ট্রিংগুলির সংমিশ্রনের R পদ্ধতিটি আজকের তারিখ এবং সময়কে আরও ছোট করে তুলতে যথেষ্ট সংক্ষিপ্ত নয়। যদিও ইনপুট জন্য ধন্যবাদ!
অ্যালেক্স এ।

24

এইচটিএমএল, 594 বাইট

1972-06-30 23:59:60<br>1972-12-31 23:59:60<br>1973-12-31 23:59:60<br>1974-12-31 23:59:60<br>1975-12-31 23:59:60<br>1976-12-31 23:59:60<br>1977-12-31 23:59:60<br>1978-12-31 23:59:60<br>1979-12-31 23:59:60<br>1981-06-30 23:59:60<br>1982-06-30 23:59:60<br>1983-06-30 23:59:60<br>1985-06-30 23:59:60<br>1987-12-31 23:59:60<br>1989-12-31 23:59:60<br>1990-12-31 23:59:60<br>1992-06-30 23:59:60<br>1993-06-30 23:59:60<br>1994-06-30 23:59:60<br>1995-12-31 23:59:60<br>1997-06-30 23:59:60<br>1998-12-31 23:59:60<br>2005-12-31 23:59:60<br>2008-12-31 23:59:60<br>2012-06-30 23:59:60<br>2015-06-30 23:59:60

¯ \: _ (ツ): _ / ¯


6
@ ভিওজ- এই প্রশ্নটি কলমোগোরভ-জটিলতা হিসাবে ট্যাগ এবং তাই এটি একটি সঠিক আইনী উত্তর। যদিও জয়ের সম্ভাবনা নেই ...
ডিজিটাল ট্রমা

10
@ এমলেপেজ এটি "স্ট্যান্ডার্ড লুফোলস "গুলির মধ্যে একটি।
জ্যাকব রায়হলে

4
@ ভুইটস ফাইলটি সেভ করুন, একটি ব্রাউজারে খুলুন। এটি একটি workingএইচটিএমএল কোড
edc65

9
@ অ্যান্টনডি'আন্দ্রেয়া হ্যাঁ, তাই কি? চ্যালেঞ্জগুলির ক্ষেত্রে অসর্থতার অনুরোধ করা হয়নি code golf
edc65

5
@নাটোলিগ আপনি [কলমোগোরভ-জটিলতা]
ভাইজরক্স

11

সি, 160 146 141 140 বাইট

প্রথমবার পোস্ট করা, "স্ট্যান্ডার্ড লুফোলস" কী তা নিশ্চিত হন না। আমি অবশ্যই প্রিন্টফ সতর্কতা আছে।

160 বাইট:

মূল ধারণাটি প্রতি বছর দুটি বিট ব্যবহার করে লিপ সেকেন্ডগুলি এনকোড করা হয়: একটি জুনের জন্য এবং ডিসেম্বরের জন্য একটি। লুপটি অভ্যন্তরীণভাবে একবারে এনকোডিংটি একবারে খানিকক্ষণ গ্রাস করে। একটি 128-বিট পূর্ণসংখ্যা ছাড়া, বাহ্যিক লুপটি প্রয়োজনীয়। বাকী সবই হিসাবরক্ষণ এবং গণিত। :-)

int main(){long long X=0x2495288454AAAB,Y=1972,Z=1;while(Y<2000){while(X){if(X&1)printf("%d-%02d-%d 23:59:60\n",Y,6*(2-Z),31-Z);Y+=Z^=1;X>>=1;}X=0x104082000;}}

141 বাইট:

প্রস্তাবিত টিপস প্রয়োগ করে এটি 146 বাইটে নেমে আসে। তারপরে আমি বাইরের শর্তটি সহজ করার একটি উপায় খুঁজে পেয়েছি (ওয়াই <2000 থেকে কেবল জেড পর্যন্ত), এটি 141 বাইটে নামিয়ে আনছি। একটি টুইটের এত কাছে!

main(Z){long long X=0x2495288454AAAB,Y=1972;while(Z){while(X)X&1?printf("%d-%02d-%d 23:59:60\n",Y,12-6*Z,31-Z):1,Y+=Z^=1,X/=2;X=4362608640;}}

140 বাইট:

আমি লক্ষ্য করেছি যে তারিখের ড্যাশটি দিনটিকে নেতিবাচক করে তোলা যেতে পারে। জুনে নেতৃত্বের শূন্যের কারণে মাসে এটি করা যায় না। তবে কমপক্ষে এটি এখন একটি টুইটে ফিট করে!

main(Z){long long X=0x2495288454AAAB,Y=1972;while(Z){while(X)X&1?printf("%d-%02d%d 23:59:60\n",Y,12-6*Z,Z-31):1,Y+=Z^=1,X/=2;X=4362608640;}}

সুন্দর সংস্করণ:

main(Z) {
    long long X = 0x2495288454AAAB, Y = 1972;
    while (Z) {
        while (X)
            X&1 ? printf("%d-%02d%d 23:59:60\n", Y, 12-6*Z, Z-31) : 1,
            Y += Z ^= 1,
            X /= 2;
        X = 4362608640;
    }
}

বোনাস সংস্করণ:

আমি একটি 64৪-বিট পূর্ণসংখ্যার বিট-বদল করে বাইরের লুপটি অপসারণ করেছি, তবে এটি দীর্ঘ "স্বাক্ষরযুক্ত দীর্ঘ দীর্ঘ" কারণে 150 বাইট রয়েছে; যদি আমি "uint64" এর মতো কিছু ব্যবহার করতে পারি তবে এটি 138 বাইট হবে।

main(Z) {
    unsigned long long Y = 1972, X = 0x2495288454AAAB, W = 8520720;
    while (X)
        X&1 ? printf("%d-%02d-%d 23:59:60\n", Y, 12-6*Z, 31-Z) : 1,
        Y += Z^= 1,
        X = X/2 | (W>>=1)<<63;
}

4
পিপিসিজিতে আপনাকে স্বাগতম। "স্ট্যান্ডার্ড লুফোলস" এই পোস্টটিকে বোঝায় , তবে সাধারণত এর অর্থ "সাধারণ জ্ঞান ব্যবহার করুন এবং প্রতারণা করবেন না"। :)
মার্টিন ইন্ডার

1
আমি মনে করি একটি forলুপ ব্যবহার করা কিছু বাইট সংরক্ষণ করবে। বিটিডাব্লু, int main()-> main()। আপনি পেতে পারে এই খুব সহায়ক।
স্পিক্যাট্রিক্স

এছাড়াও: X>>=1হিসাবে একই X/=2, 6*(2-Z)একই হিসাবে 12-6*Zএবং 4362608640এক বাইট চেয়ে কম 0x104082000intসামনে main()অপ্রয়োজনীয়, এবং যদি আপনি পরিবর্তন main()করতে main(Z)তারপর আপনি ঘোষণা অপসারণ করতে পারেন Z=1
খুঁতখুঁতে ossifrage

সত্যিই দুর্দান্ত সমাধানif(X&1)printf(...);X&1?printf(...):1;
ভাবার

এবং while(X){...}কমা ব্যবহার না করে যাতে আপনি বন্ধনীগুলি অপসারণ করতে পারেনwhile(X)X&1?printf("%d-%02d-%d 23:59:60\n",Y,6*(2-Z),31-Z):1,Y+=Z^=1,X>>=1;
ইউয়ানজট

9

পাইথন 3, 91

এসপি 3000 দ্বারা এনকোডিং এবং স্ট্রিং ফর্ম্যাটিং ব্যবহার করে তবে একটি ম্যাজিক সংখ্যার চেয়ে পাইথন 3 বাইট অবজেক্টে মানগুলি সঞ্চয় করে ।

for n in b'()+-/1357:<>BGKMPRTWZ]kqx~':print('%d-%02d-3%d 23:59:60'%(1952+n/2,n%2*6+6,n%2))

এনকোডিংয়ের বাইটগুলির 256 সম্ভাব্য মানগুলির মধ্যে কেবল 86 টির প্রয়োজন, তাই এটি আরও সুন্দর দেখানোর জন্য প্রিন্টযোগ্য অক্ষরের একটি ব্যাপ্তি ব্যবহৃত হয়।


7

ব্রেইনফাক, 806

++++++++[>++++++>+++++++>+++++++>++++++>++++++>++++++>+++++++>++++++>++++++>++++++>++++>++++++>++++++>+++++++>+++++++>+++++++>+++++++>+++++++>++++++>+<<<<<<<<<<<<<<<<<<<<-]>+>+>->++>--->>-->--->+++>>>++>+++>++>--->+>++>-->>++[<]>[.>]<[<]>>>>>>+>---->>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>+>-------->>->++++>>>-[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>++[<]>[.>]<[<]>>>>++>>+>---->>>+[<]>[.>]<[<]>>>>++[<]>[.>]<[<]>>>+>---------[<]>[.>]<[<]>>>>++>>->++++>>>-[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+[<]>[.>]<[<]>>>>+>>+>---->>>+[<]>[.>]<[<]>>>>++>>->++++>>>-[<]>[.>]<[<]>>>>+>>+>---->>>+[<]>[.>]<[<]>+>--------->--------->---[<]>[.>]<[<]>>>>+++[<]>[.>]<[<]>>>+>------>>->++++>>>-[<]>[.>]<[<]>>>>+++[<]>[.>]

আপনি এই অনলাইন দোভাষীর উপর এটি চালাতে পারেন


6

পাইথন 2, 111 104 বাইট

n=0x6697f252225354422533333330;y=1972
while n:print'%d-%02d-3%d 23:59:60'%(y,n%2*6+6,n%2);y+=n/2%8;n/=16

বেস এনকোডিং এবং আরও বেস এনকোডিং।


5

জিএনইউ সেড + তারিখ: 112

সাধারণ লিনাক্স ডিস্ট্রিবিউশনগুলির মধ্যেও অন্তর্নির্মিত লিপ সেকেন্ড থাকে। GNU সেড এবং তারিখ ব্যবহার:

sed -n 's/^\([0-9]\+\).*/1899-12-31 \1sec/p' /usr/share/zoneinfo/leap-seconds.list|date -f- +"%Y-%m-%d 23:59:60"

জিএনইউ সেড + তারিখ: 90

পথটি কেটে কয়েকটি অক্ষর সাফ করা:

sed -n 's/^\([0-9]\+\).*/1899-12-31 \1sec/p' /u*/s*/z*/leap*|date -f- +'%Y-%m-%d 23:59:60'

টবি স্পিড দ্বারা সংগীত GNU সেড + তারিখ: 84

মন্তব্যগুলিতে গভীরভাবে গল্ফযুক্ত সংস্করণ প্রস্তাবিত:

sed -nr 's/^([0-9]+).*/date -d "1899-12-31 \1sec" "+%F 23:59:60"/ep' /u*/s*/z*/leap*

লিপ-সেকেন্ডের ডেটা কোথায় পাওয়া যাবে তা শেখানোর জন্য ধন্যবাদ। দুর্ভাগ্যক্রমে, আমার date(জিএনইউ 8.23) পরের মিনিটের প্রথমটি হিসাবে তাদের প্রদর্শন করে। আপনি কী ব্যবহার করছেন যা 60-সেকেন্ডের মিনিটটি বোঝে?
টবি স্পিড

গনুহ coreutils, আমি এটা 76 নিচে গেলাম, খেউরি সঙ্গে বাইট -rপতাকা, বদলে dateদিয়ে s///eপরিবর্তক, এবং প্রতিস্থাপন %Y-%m-%dসঙ্গে %Fdate: টি জেড = ইউটিসিsed -nr 's/^([0-9]+).*/date -d "1900-1-1 \1sec" "+%F %T"/ep' /u*/s*/z*/leap*
টবি Speight

আমি জানতাম আমি কিছু মিস করেছি। মনে হয় এটিকে ম্যানুয়ালি উল্লেখ করার মতো কোনও উপায় নেই, অন্যান্য সমাধানগুলির বেশিরভাগের চেয়ে কম খারাপ নয়। আসুন দেখা যাক যে কেউ এই তারিখের সঠিকভাবে সেই সেকেন্ডগুলিকে সমর্থন করার জন্য কোনও তারিখের গ্রন্থাগার নিয়ে আসে।
জেনস এরাত

আমি 1899-12-31 \1secতারিখের জন্য এবং 23:59:60সময় হিসাবে হার্ডকোডিং ব্যবহার করে সেখানে পৌঁছেছি :sed -nr 's/^([0-9]+).*/date -d "1899-12-31 \1sec" "+%F 23:59:60"/ep' /u*/s*/z*/leap*
টবি

3

জাভাস্ক্রিপ্ট ( ES6 ) 125

`Inside এর ভিতরে থাকা নতুন লাইনটি তাৎপর্যপূর্ণ এবং গণনাযোগ্য।

পরীক্ষা করতে, নীচের স্নিপেটটি চালান (কেবলমাত্র এক্সমা স্ক্রিপ্ট 6, ফায়ারফক্স)

alert([..."09:;=DEFIX[01234567?ABGJQS"].map((c,i)=>c.charCodeAt()+1924+(i>10?'-12-31':'-06-30')+' 23:59:60').sort().join`
`)


2

পিএইচপি, 198 বাইট

foreach([.5,1,2,3,4,5,6,7,8,9.5,10.5,11.5,13.5,16,18,19,20.5,21.5,22.5,24,25.5,27,34,37,40.5,43.5] as$d){$h=(int)$d-ceil($d);echo date("Y-m-d 23:59:60",mktime(0,0,0,-6*$h,31+$h,(int)$d+1972))."\n";}

দুর্ভাগ্যক্রমে, আমি জানি না আমি \nতারিখের ফাংশনটি in োকাতে পারি কিনা । যদি তাই হয় তবে এটি 3 বাইট কম .""


আপনি উভয় ফালা (int)এবং কিছু সাদা স্থান সরাতে পারেন। তারিখটি একটি ত্রুটি ছুড়ে দেয়, যদি ডিফল্ট সময় অঞ্চল সেট না করা থাকে তবে এটি দিয়ে একটি নীরব করুন @। 187 বাইট:foreach([.5,1,2,3,4,5,6,7,8,9.5,10.5,11.5,13.5,16,18,19,20.5,21.5,22.5,24,25.5,27,34,37,40.5,43.5]as$d){$h=$d-ceil($d);echo@date("Y-m-d 23:59:60",mktime(0,0,0,-6*$h,31+$h,$d+1972))."\n";}
অক্টোফেক্স

2

8086 মেশিন কোড + ডস, 92 বাইট

কোডের হেক্সডাম্প:

BE 3A 01 B1 57 D1 E0 75 03 AD EB F9 72 09 50 BA
47 01 B4 09 CD 21 58 BB 50 01 81 77 FC 01 04 80
37 01 80 3F 31 74 10 83 EB 05 4B FE 07 80 3F 3A
75 05 C6 07 30 EB F3 E2 CC C3 AA 2A 77 B5 6A DD
DF B6 BE FF 7D BF 31 39 37 32 2D 30 36 2D 33 30
20 32 33 3A 35 39 3A 36 30 0D 0A 24

চালাতে, 92-বাইটগুলি একটি- comফাইলটিতে লিখুন এবং 32-বিট উইন্ডোজ বা ডসবক্সের অধীনে চালান।

কোডটি 87 টি বিট সহ বিটম্যাপ ব্যবহার করে, প্রতি বছর অর্ধেক। বিএসটি এমএসবি থেকে শুরু করে 16 টি গ্রুপে সাজানো হয়েছে।

বিটম্যাপ ডিকোডিং:

                 ; when the program starts, ax=0 (tested on DOSBox)
myloop:
    shl ax, 1    ; shift the MSB left into the carry flag
    jnz mywork   ; if some bits are left in the register, work normally
    lodsw        ; if all bits were shifted out, load the next 16 bits
    jmp myloop   ; and check the MSB again

কোডটির কাঠামোর কারণে, ডিকোডিংয়ের সময় কিছু বিট হারিয়ে যায়, তাই আমাকে সেগুলি পুনরাবৃত্তি করতে হয়েছিল। এই পুনরাবৃত্তি বিটম্যাপটি ফুলে যায় না কারণ আমাকে যাইহোক 87 বিট থেকে 96 বিট প্যাড করতে হয়েছিল।

দ্বিতীয় লিপ মুদ্রণের পরে (বা প্রিন্টিং নয়), আউটপুট বার্তার ASCII কোডগুলিতে ম্যানিপুলেশন ব্যবহার করে কোডটি অর্ধেক বছর তারিখ বৃদ্ধি করে।

উত্স কোড (এর সাথে একত্রিত হতে পারে tasm):

    mov si, offset mydata
    mov cl, 57h ; number of iterations

myloop:
    shl ax, 1   ; shift the MSB left into the carry flag
    jnz mywork  ; if some bits are left in the register, work normally
    lodsw       ; if all bits were shifted out, load the next 16 bits
    jmp myloop  ; and check the MSB again
mywork:
    jc myinc_date ; shifted bit 1? - skip printing the message

    push ax
    mov dx, offset mymsg
    mov ah, 9
    int 21h     ; print the message
    pop ax

myinc_date:
    mov bx, offset mymsg + 9 ; pointer to the middle of the message
    xor word ptr [bx - 4], 401h ; change month 06<->12
    xor byte ptr [bx], 1 ; change day 30<->31
    cmp byte ptr [bx], '1'
    je myloop_end ; if 31 December, no need to increase the year
    sub bx, 5 ; pointer beyond the last digit of the year

myinc_year:
    dec bx
    inc byte ptr [bx] ; increase the digit
    cmp byte ptr [bx], '0' + 10
    jne myloop_end ; if the digit was less than 9, done
    mov byte ptr [bx], '0' ; set the digit to 0
    jmp myinc_year ; continue increasing other digits

myloop_end:
    loop myloop
    ret ; terminate the program

; In the following bitmap, the spaces before some LSBs
; show that the least significant 1-bit and all
; following 0-bits are lost during decoding.
mydata:
    dw 02aaah ; 00101010101010     10
    dw 0b577h ; 101101010111011    1
    dw 0dd6ah ; 11011101011010     10
    dw 0b6dfh ; 101101101101111    1
    dw 0ffbeh ; 11111111101111     10
    dw 0bf7dh ; 101111110111110    1

mymsg:
    db '1972-06-30 23:59:60',13,10,'$'

আমি এটি পরীক্ষা করতে চাই, তবে আমি কোথাও কোনও একক সম্পাদক খুঁজে পাচ্ছি না যা আপনাকে হেক্স পেস্ট করতে এবং এটি একটি বাইনারি ফাইলে সংরক্ষণ করতে দেয়।
মিস্টার লিস্টার

@ মিস্টারলিস্টের কোনও সাধারণ হেক্স সম্পাদক আপনার পক্ষে এটি করা উচিত।
TheDoctor

1

পাইথ - 88 84 বাইট

ডেটা সঙ্কুচিত করতে চরে রূপান্তরিত করে এবং 06-30বনাম 12-31সংখ্যা হিসাবে বনাম তথ্য সংরক্ষণ করে ।

jbm++-2047ed?"-06-30"hd"-12-31"" 23:59:60"C,j33678243 2CM"KKJIHGFEDBA@><:9765421*'# 

(শেষে একটি স্থান আছে)

এটি এখানে অনলাইনে চেষ্টা করে দেখুন


1

পাইথন 2, 123 121 116 114 111

আমি এটি বেশ সংক্ষিপ্তভাবে পরিচালনা করতে পেরেছি, তবে এটি কতটা খাটো পেতে পারে তা আমি নিশ্চিত নই। আমি ব্যবহার করার চেষ্টা করেছি exec, তবে বিন্যাসটি খুব ব্যয়বহুল হয়ে যায়।

আমি লিঙ্কযুক্ত উইকিপিডিয়া পৃষ্ঠা থেকে টেবিলের বেস 16 টি এনকোডিং ব্যবহার করেছি।

সম্পাদনা করুন: হেক্স এনকোডিংটি ব্যবহারের ভিত্তি 36 এর চেয়ে কম হয় (কম গল্ফযুক্ত সংস্করণ দেখুন))

এখানে চেষ্টা করুন

n=0x410208002495288454aaab
for i in range(88):
    if n%2:print"%d-%02d-3%d 23:59:60"%(1972+i/2,i%2*6+6,i%2)
    n/=2

কম গল্ফড:

s=bin(int('WELD24ZDGIMBWWLFM',36))[2:]
for i in range(44):
    t,s=int(s[0]),s[1:]
    if t:print"%d-06-30 23:59:60"%(i+1972)
    t,s=int(s[0]),s[1:]
    if t:print"%d-12-31 23:59:60"%(i+1972)

1

সি, 155 149 147 বাইট

এখানে স্ট্রিং এবং দৈর্ঘ্যের এনকোডিং ব্যবহার করে সি-তে আরও একটি পদ্ধতি রয়েছে। আমার অন্যান্য সি সলিউশন হিসাবে পুরোপুরি নিখরচায় নয়, তবে সম্ভবত এটি উন্নত করা যেতে পারে?

155 বাইট:

মাস / দিন ধরে রাখতে স্ট্রিং ব্যবহার করে।

main(Y){Y=1972;char*M="06-3012-31",*B="#@DGCDF7D3daTdS#!",b,c;while(b=*B++-33){c=b>>1&7;while(c--)printf("%d-%.5s 23:59:60\n",Y++,M+b%2*5);Y+=(b>>4&7)-1;}}

149 বাইট:

মাস / দিনের স্ট্রিং দূর করে।

main(Y){Y=1972;char*B="#@DGCDF7D3daTdS#!",b,c;while(b=*B++-33){c=b>>1&7;while(c--)printf("%d-%02d-%d 23:59:60\n",Y++,6+b%2*6,30+b%2);Y+=(b>>4&7)-1;}}

147 বাইট:

বছরের সূচনাটি নির্মূল করা।

main(Y){char*B="#@DGCDF7D3daTdS#!",b,c;while(b=*B++-33){c=b>>1&7;while(c--)printf("%d-%02d-%d 23:59:60\n",1971+Y++,6+b%2*6,30+b%2);Y+=(b>>4&7)-1;}}

144 বাইট:

আমি যদি স্কিপ গণনাটি রান করার আগে (পরে নয়) প্রয়োগ করার জন্য বাফারটিকে পুনরায় কোড করে দিয়েছিলাম, তবে আমি লুপের সময় বাইরের স্টেটমেন্টগুলিকে পুনরায় অর্ডার করতে পারি, কমা অপারেটরটি ব্যবহার করতে পারি, এবং 2 বাইট সংরক্ষণ করে বন্ধনীগুলি সরিয়ে ফেলতে পারি।

আমি দিনটিকে নেতিবাচক করে দিয়ে আমার অন্য বাইট সংরক্ষণ করতে পারি (আমার অন্যান্য সমাধান হিসাবে)।

সুন্দর:

main(Y) {
    char *B = "#@DGCDF7D3daTdS#!", // buffer of bytes encoding runs
         b, // current byte
         c; // current count
    while (b = *B++-33) { // get byte
        c = b>>1&7; // get count
        while (c--) printf("%d-%02d-%d 23:59:60\n", 1971+Y++, 6+b%2*6, 30+b%2); // run
        Y += (b>>4&7)-1; // skip years
    }
}

ব্যাখ্যা:

রানগুলি বাইটগুলিতে এনকোড করা হয়। প্রতিটি বাইটে জুন বা ডিসেম্বর, দৈর্ঘ্য গণনার জন্য 3 বিট, একটি এড়ানো গণনাের জন্য 3 বিট এবং 1 টি অব্যবহৃত উচ্চ বিট কিনা তা বলতে একটি বিট থাকে।

স্কিপ কাউন্ট একটি রান পরে এড়িয়ে যাওয়ার বছর সংখ্যা; এটি 1972-এ দুটি লিপ সেকেন্ডের জন্য -1 দ্বারা অফসেট হয় a দৈর্ঘ্যটি কত রান হয়; এটি সম্ভবত +1 দ্বারা অফসেট করা যেতে পারে তবে এটি বর্তমানে নেই।

সুতরাং একটি বাইটটির অর্থ: "পরবর্তী বাইটে যাওয়ার আগে" জুনের (বা ডিসেম্বর) লিপ সেকেন্ডের দীর্ঘ বছরগুলি করুন, তারপরে স্কিপ -১ বছর এড়িয়ে যান "।

বাইটগুলি এটিকে পঠনযোগ্য করে তুলতে এবং অভিনব এনকোডিং এড়ানোর জন্য 33 দ্বারা অফসেট করা হয়।

এর অর্থ যদিও 1998-2005 কভার করার জন্য আমাদের পর্যাপ্ত পরিমাণ স্কিপ বিট রয়েছে, আমরা ASCII সীমার বাইরে নেই, সুতরাং আমাদের অতিরিক্ত শূন্য দৈর্ঘ্যের রান রয়েছে। এছাড়াও, 1979 এর নিজস্ব উপস্থিতি কারণ 1972-1979 দৈর্ঘ্যটি একটি খুব দীর্ঘ।

বাইটগুলিতে পর্যাপ্ত পরিমাণে বিট রয়েছে, সুতরাং এই সমস্যাগুলি শেষ পর্যন্ত সমাধানযোগ্য হতে পারে।


1

কিউ / কেডিবি +, 95 94 93 বাইট

asc 1_" "0:([]raze("DEFGHIJKSUV[^eh";"DMNOQXYZ]lo"){("d"$"m"$-12*95-6h$x)-y}'1 185;`23:59:60)

ব্যাখ্যা

প্রতি বছর +1 এর জন্য ১৯০৫ সাল থেকে ASCII চরিত্র হিসাবে কয়েক বছর ধরে এনকোড করুন, যেমন:

1972 -> 1973 -> 68 -> D

6h$xপালাক্রমে "D"ফিরে 68। যেহেতু qএর তারিখ যুগান্তকারী হয় 2000.01.01, আমরা বিয়োগ 95এবং পূর্ণসংখ্যার-টু-ডেট রূপান্তর সঞ্চালন "d"$"m"$-12*95-6h$x

আমরা উপরে +1 করার কারণটি হ'ল আসল বছরের 31 শে ডিসেম্বর বা 30 জুন, অর্থাৎ 1 বা 185 দিন পাওয়ার জন্য পরবর্তী বছরের শুরু থেকে দিনের সংখ্যা বিয়োগ করা । সুতরাং, ডিসেম্বরে লিপ সেকেন্ডের সাথে এবং জুনে যারা তাদের জন্য বছরগুলি উপস্থাপন করে । পেয়ারিং-বিয়োগ মাধ্যমে সম্পন্ন করা হয় , যেখানে এবং"DEFGHIJKSUV[^eh""DMNOQXYZ]lo"(a;b){x-y}'(c;d)ab বছরগুলি যথাক্রমে বিয়োগ করা হবে cএবং dদিন সংখ্যা।

" "0:([]...) কলাম শিরোনাম উত্পন্ন হবে এমন একটি ছোট ক্যাভ্যাট সহ আমাদের সঠিক ফর্ম্যাটিং দিতে ফলাফল প্রস্তুত করে। 1_শিরোনামটি ড্রপ করে এবং ascআদেশটি সঠিক হওয়ার জন্য অবশেষে প্রয়োগ করুন ।

সম্পাদন করা : 'পুনরায় বেস' 100 এর পরিবর্তে 95 বছর বিয়োগ করতে (1 টি অক্ষর সংরক্ষণ করা)।

2 সম্পাদনা করুন : পূর্ণসংখ্যা-থেকে-তারিখ রূপান্তর ফাংশনের অভ্যন্তরে অপারেটরদের অবস্থান পুনরায় অর্ডার করা।


1

পাইথন, 204 201

e,g,h=0,1972,0
for i in range(1,27):e,g,h={2:1,9:2,10:1,12:2,15:1,16:2,17:1,20:2,21:1,22:7,23:3,24:4,25:3}.get(i,e),g+e,(h,1-h)[i in[2,10,14,17,20,21,22,25]];print`g`+("-06-30","-12-31")[h]+" 23:59:60"

আপনি এটির সাথে repl.it এ খেলতে পারেন ।

সম্পাদনা: পুরোপুরি মারধর! সংক্ষেপণের উত্তরগুলি আশ্চর্যজনকভাবে সংক্ষিপ্ত।


আশ্চর্যের বিষয় হল, আমার পিএইচপি আনসারটি একইরকম অ্যালগরিদম ব্যবহার করে খাটো। আমি সবসময় আশা করি পাইথনটি আরও কমপ্যাক্ট হবে। আপনি কি আরও একটু গল্ফ করতে পারেন?
ভয়েটকাস

আমি একবার দেখে নেব। আমি মনে করি সেরা রুটটি যদিও সংক্ষেপণ, এবং অন্যরা ইতিমধ্যে এটি করেছে
sudo rm -rf স্ল্যাশ

0

পিএইচপি, 164 বাইট

foreach([.5,1,2,3,4,5,6,7,8,9.5,10.5,11.5,13.5,16,18,19,20.5,21.5,22.5,24,25.5,27,34,37,40.5,43.5]as$d){echo(ceil($d)+1971).($d%2?'-12-31':'-06-30')." 23:59:60\n";}

এটি @ ভয়েটকাসের ধারণার মধ্যে কয়েকটি পরিবর্তন mod


0

পাইথন, 221 217

def d(x):
 q=x%10
 if x%2==0:
  p,r=q/2,"06-30"
 else:
  p,r=(q-1)/2,"12-31"
 return"%d%d-%s 23:59:60"%(p+197,x/10,r)
for x in [20,21,31,41,51,61,71,81,91,12,22,32,52,73,93,5,24,34,44,55,74,85,57,87,28,58]:print(d(x))

কিছু অন্তর্দৃষ্টি

মূলত, d(x)একটি একক 2-অঙ্ক পূর্ণসংখ্যার থেকে 3 পূর্ণসংখ্যার ভেক্টরকে সংক্রামিত করে। d(x)এর বিপরীত ফাংশন (26 লিপ সেকেন্ডের তারিখেরও বেশি) হিসাবে নির্মিত হয় c(v), যা ঘুরে দেখা যায় এমন একটি সংক্ষেপণ ফাংশন যা 3-আপলকে (1998,12,31) 85 এর মতো সংখ্যায় পরিণত করে the , 21 ... 28,58] আমি অন্য একটি অ্যালগরিদম ডিজাইন করেছি যাচাই করতে যে ডোমেনের চেয়ে কমপ্রেস ফাংশন বাইজেক্ট রয়েছে। এটি হ'ল, আমি নিশ্চিত করেছি যে নিম্নলিখিত প্রোগ্রামটি সদৃশ তৈরি করে না এবং আমি এর আউটপুটটিকে উপরের প্রোগ্রামটির তালিকা হিসাবে ব্যবহার করেছি।

dates = [(1972,06,30),
    (1972,12,31),
    (1973,12,31),
    (1974,12,31),
    (1975,12,31),
    (1976,12,31),
    (1977,12,31),
    (1978,12,31),
    (1979,12,31),
    (1981,06,30),
    (1982,06,30),
    (1983,06,30),
    (1985,06,30),
    (1987,12,31),
    (1989,12,31),
    (1990,12,31),
    (1992,06,30),
    (1993,06,30),
    (1994,06,30),
    (1995,12,31),
    (1997,06,30),
    (1998,12,31),
    (2005,12,31),
    (2008,12,31),
    (2012,06,30),
    (2015,06,30)]

def c(v):
    x = (v[0] % 10) * 10
    x += v[2] % 30
    x += 2 * (int(v[0] / 10) - 197)
    return x

for v in dates:
    print(c(v))

c(v)খুব সাধারণ স্কিম ব্যবহার করে কম্প্রেশন ফাংশনটি বাইজেক্টিভ হওয়ার জন্য ডিজাইন করা হয়েছিল। এর উদাহরণ হিসাবে নেওয়া যাক (1998,12,31)।

  • এক্সপ্রেশন (v [0]% 10) * 10 বছরের একক নির্বাচন করে (উদাঃ 1 9 9 8) -> 8) এবং এটি আউটপুটের দশম অঙ্ক করে (এখন x = 80)।
  • সেখানে মাত্র দু'মাস-দিনের সংমিশ্রণ রয়েছে যেখানে লিপ দ্বিতীয়টি ঘটে, তাই আমি 06,30 কেস এবং 12,31 কেসের মধ্যে পার্থক্য করার জন্য দিনের উপাদানটি ব্যবহার করার সিদ্ধান্ত নিয়েছি। দিনটি 30 হলে ভি [2]% 30 হ'ল 0 হয়, এবং দিনটি 31 হয় 1 হয়। আমাদের উদাহরণস্বরূপ, আমরা 1 যোগ করতে x (সুতরাং এখন x = 81)।
  • অবশেষে, আমি পর্যবেক্ষণ করেছি যে এই ধাঁধাটি কেবল 5 দশক জড়িত; তাই আমি যদি প্রথম দশকে (সত্তর দশক) থেকে 0 এবং শেষ দশকে (2010) 4 থেকে 4 মানচিত্র করি তবে আমি দুর্দান্ত জিনিসগুলি করতে পারি। আরও নির্দিষ্টভাবে, 0,1,2,3,4 এ ম্যাপিংয়ের পরিবর্তে 0,2,4,6,8 এ আমি মানচিত্রটি x এর এককে যুক্ত করতে পারি, যা আগের নিয়মের কারণে 0 বা হয় ১. সুতরাং শেষ পর্যন্ত আমাদেরও এই শেষ পদক্ষেপটি সক্ষমতা বাধা দেয় না এবং আমরা পেয়েছি যে একটি 06,30 মামলার ইউনিট 0,2,4,6,8 এর মধ্যে একটি এবং এটির ইউনিটগুলি 12,31 কেস 1,3,5,7,9 এর মধ্যে একটি। সুতরাং বাইজিকেশন সুস্পষ্ট। আমাদের উদাহরণ হিসাবে, 1998 তৃতীয় দশকে (70s-> 0, 80s-> 1, 90s-> 2) তাই আমরা 2 * 2 = 4 যুক্ত করি add সুতরাং আমরা এক্স = 85 পাই।

এটি সত্য কিনা তা যাচাই করতে আমি প্রোগ্রামটি লিখেছিলাম এবং তারপরে আমি d(x)ইনভার্স হিসাবে সংজ্ঞায়িত করেছি c(v)। আমাদের উদাহরণে, সি ((1998,12,31)) 85 এবং ডি (85) সঠিকভাবে মুদ্রণ করে 1998-12-31 23:59:60


1
সরান q=x%10এবং প্রতিস্থাপন qসঙ্গে x%10সর্বত্র। এটা খাটো। আমি এখানে আপনার প্রোগ্রামে কিছু অতিরিক্ত গল্ফিংয়ের একটি সহায়ক বর্ণনাও দিচ্ছি । আমি পাইথন পৃষ্ঠাতে গল্ফিংয়ের টিপস দেখার পরামর্শ দিই ।
mbomb007

এটি কোড-গল্ফ , সুতরাং আপনার কোডের দৈর্ঘ্য যে কোনও উপায়ে সংক্ষিপ্ত করার চেষ্টা করা উচিত।
mbomb007

-1

gzip, 114 বাইট

Hexdump:

1f8b080853f9975502006c006dd04b0a80300c84e1bde01dbc40218fa6697aff8309e2a6fa6f3f86cc10adb426a3b95ce62b6a0d398f07d59aeb8e4ed80983701026e1242cc0a9307e1aa11306615211b59710527b3961270cba9994fc7fc944829092faeedc313e7803993cfafb20020000

উপরে বর্ণিত বাইটগুলি দিয়ে একটি ফাইল তৈরি করুন।

"এল" নামে একটি নতুন ফাইল পাওয়ার জন্য গানজিপ বা অন্য একটি সংক্ষেপণ প্রোগ্রাম ব্যবহার করে এক্সট্রাক্ট করুন। এই ফাইলটিতে কাঙ্ক্ষিত আউটপুট রয়েছে।

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