এটি কি লিপ বছর?


41

এই চ্যালেঞ্জটি বেশ সহজ। আপনি একটি ইনপুট নেবেন যা 1801 থেকে 2400 পর্যন্ত এক বছর হবে এবং যদি আউটপুটটি লিপ বছর হয় বা না হয়।

আপনার ইনপুটটিতে কোনও নতুন লাইন বা পিছনের স্থান নেই:

1954

আপনি যে কোনও উপায়ে আউটপুট দেবেন যা আপনার পছন্দ মত স্পষ্টভাবে ব্যবহারকারীকে জানায় যদি এটি লিপ বছর হয় বা না হয় (আমি হ্যাঁ / নায়ের জন্য y বা n গ্রহণ করব)

আপনি এখানে লিপ বছরের একটি তালিকা পেতে পারেন: http://kalender-365.de/leap-years.php আমি লক্ষ করব যে লিপ বছর সর্বদা চার বছর হয় না। 1896 একটি লিপ বছর, তবে 1900 নয়। এই "এড়িয়ে যান" অনুসরণকারী বছরগুলি হ'ল:

1900
2100
2200
2300

পরীক্ষার কেস:

1936 ->  y
1805 ->  n
1900 ->  n
2272 ->  y
2400 ->  y 

সম্পাদনা: এটি একটি আদর্শ গ্রেগরিয়ান ক্যালেন্ডারের উপর ভিত্তি করে: http://www.epochconverter.com/date-and-time/daynumbers-by-year.php


9
আপনার আরও পরিষ্কার হওয়া উচিত: প্রদত্ত বছরটি একটি লিপ বছর হয় এবং কেবল যদি তা হয় (divisible by 4)∧((divisible by 100)→(divisible by 400))
LegionMammal978

আপনার ইনপুটটিতে কোনও নতুন লাইন বা পিছনের স্থান নেই। এটি ডাং করুন, এটি আমাকে 2 বাইট বাঁচাতে পারে ...
ডেনিস

2
আপনার গ্রহণযোগ্য ইনপুট পরিসীমা 1601 থেকে 2400 এডি পর্যন্ত প্রসারিত করা উচিত 400 এটি 400 বছরের দুই বছরের গ্রেগরিয়ান চক্রকে অন্তর্ভুক্ত করে (যা সোমবার থেকে সর্বদা শুরু হয়)।
ডেভিড আর ট্রিবল

2
লিপ ইয়ার যদি মিথ্যা হয় এবং সত্যবাদী না হয় যদি লিপ ইয়ার গণনা না হয় তবে "স্পষ্টভাবে ব্যবহারকারীকে যদি তা হয় বা হয় না" হিসাবে গণনা করা হয়?
lirtosiast

@ lirtosiast আমিও তাই মনে করি। ব্যবহারকারী অনেক তাই অনুমান।
অ্যালিসডজি বলছেন মনিকাকে

উত্তর:


22

এপিএল, 16 14 12 টি অক্ষর

0একটি লিপ বছরের 1জন্য, একটি নন-লিপ বছরের জন্য ফেরত দেয় ।

≥/⌽×4 25 4⊤⎕

এই সমাধানটি চেষ্টা করে দেখুন tryapl.org এ । দ্রষ্টব্য যে আমি চেষ্টাটি dfn এ পরিবর্তন করেছি {≥/⌽×4 25 4⊤⍵}কারণ tryapl.com সমর্থন করে না (ব্যবহারকারীর ইনপুট নিন)। দ্রষ্টব্য যে এটি একটি খালি বাক্স, অনুপস্থিত অক্ষর নয়।

জে একই সমাধান:

4 25 4>:/@|.@:*@#:]

ব্যাখ্যা

ডায়াডিক (এনকোড) তার বাম আর্গুমেন্ট দ্বারা নির্দিষ্ট বেসটিতে তার ডান যুক্তি উপস্থাপন করে। আমি 4 25 4এই সমাধান বেস ব্যবহার । এটি বহুবর্ষ হিসাবে বছরের y প্রতিনিধিত্ব করে

y মোড 400 = 100 + 4 বি + সি  যেখানে বি <100 এবং সি <4।

প্রস্তাবের যাক α, β, এবং γ প্রতিনিধিত্ব যদি একটি বি, এবং নন-জিরো আছেন: প্রোপজিসন γ মিথ্যা হলে Y 4 দ্বারা খণ্ডনীয় হয়, βγ মিথ্যা হলে Y 100 এবং দ্বারা খণ্ডনীয় হয় αβγ হয় y যদি 400 দ্বারা বিভাজ্য হয় তবে মিথ্যা ।

একটি সত্য সারণী ( *"কেয়ার করবেন না" প্রতিনিধিত্ব করে) প্রস্তাব দেওয়া হয়েছিল - Y যদি লিপ-ইয়ার প্রাপ্ত হয় তা উপস্থাপন করে:

α β γ | Δ
0 0 0 | 1
1 0 0 | 0
* 1 0 | 1
* * 1 | 0

নিম্নলিখিত বিবৃতিতে Δ প্রকাশ α , β , এবং γ :

Δ = ¬ (( αβ ) → γ ))।

এই বিবৃতিটির কাঠামোর কারণে, কেউ can ≥/⌽α β γপ্রয়োগগুলি ← হ্রাস হিসাবে প্রকাশ করতে পারে ← এটি এই মুহুর্তে আমি যে ব্যাখ্যাটি দিচ্ছি তার উত্তরে।


16

পাইথ, 11 বাইট

!%|F_jQ*TT4

এই সম্পূর্ণ প্রোগ্রামটি এসটিডিআইএন থেকে পড়ে এবং লিপ বছরের জন্য সত্য প্রিন্ট করে এবং অন্যথায় মিথ্যা

পাইথের পরামর্শ দেওয়ার জন্য এবং মূলত আমার সিজেএম কোডটি পোর্ট করার জন্য @ জাকুবকে ধন্যবাদ জানাই।

পাইথ সংকলক / নির্বাহকের কাছে পরীক্ষার কেসগুলি নিজে যাচাই করুন ।

কিভাবে এটা কাজ করে

     jQ*TT   Returns the evaluated input in base 10 × 10.
  |F_        Swaps the digit order and reduces using logical OR.
             So far, we've achieved 1954 -> [19, 54] -> 54 || 19.
!%        4  Returns the logical NOT of the result modulo 4.
             This prints True for multiples of 4 and False otherwise.

15

সিজেম, 12 বাইট

rS+2m<~e|4%!

এই সম্পূর্ণ প্রোগ্রামটি STDIN থেকে পড়ে এবং লিপ বছরের জন্য 1 এবং অন্যথায় 0 টি প্রিন্ট করে।

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

কিভাবে এটা কাজ করে

r   e# Read from STDIN.
S+  e# Append a space.
2m< e# Rotate two characters to the left.
~   e# Evaluate.
    e# So far, we achieved "1954" -> "54 19" -> 54 19.
e|  e# Logical OR; keep the leftmost non-zero integer.
4%! e# Logical NOT of the kept integer modulo 4.
    e# This pushes 1 for multiples of 4 and 0 otherwise.

আমি আরও কয়েকটি 12 বাইট বিকল্প পেয়েছি। এটিকে 11 এ নামানোর জন্য আপনি তাদের কিছু খুঁজে পেতে পারেন? r2/~~\e|i4%!, r2/~~\~e|4%!, r2/:~~\e|4%!, r2/S*~\e|4%!এবং 13 বাইটr2/:~W%:e|4%!
মার্টিন Ender

@ মার্টিনবাটনার: এছাড়াও রয়েছে r2/:i:\e|4%!(12) এবং r2/:i(fe|~4%!(13)। আমি এমনকি গল্ফস্ক্রিপ্ট চেষ্টা করেছি (যার প্রয়োজন নেই r), তবে or4এটি একটি একক টোকেন হিসাবে ব্যাখ্যা করা হয়েছে। যদি কেবল ইনপুটটিতে একটি পেছনের নতুন লাইন থাকে ...
ডেনিস

14

জাভাস্ক্রিপ্ট (ES6), 21 টি অক্ষর

স্ট্যান্ডার্ড নিয়মটি হ'ল yএকটি লিপ বছর, যদি 4 টি ভাগ হয় yএবং যদি হয় 100 ভাগ হয় না yবা 400 ভাগ করে না y। কোডে,

y%4 == 0 && (y%100 != 0 || y%400 == 0)

এটির জন্য 100 এবং 400 এর দরকার নেই Instead পরিবর্তে এটি 16 বা 4 বিভক্ত হয় কিনা তা যাচাই করার পক্ষে যথেষ্ট হবে, অন্যথায় অন্যথায় 25 ভাগ করে যদি 16 বেছে নেওয়া হয়। গল্ফড, এটি হয়ে যায়

!(y%(y%25?4:16))

একটি জাভাস্ক্রিপ্ট ফাংশন যা এটি প্রয়োগ করে 21 অক্ষর দীর্ঘ:

l=y=>!(y%(y%25?4:16))


পার্ল, 28 26 টি অক্ষর

একই ধারণা, কিন্তু perl মধ্যে।

$_=$_%($_%25?4:16)?"n":"y"

-lpবিকল্পগুলি ব্যবহার করে চালান । উদাহরণ স্বরূপ,

perl -lpe '$_=$_%($_%25?4:16)?"n":"y"'

ইনপুট হিসাবে পরীক্ষার সেট সহ, এটি উত্পাদন করে

1936
y
1805
n
1900
n
2272
y
2400
y

আমি আমার জবাবটিতে আপনার পরামর্শটি ব্যবহার করেছিলাম, আপনার দেখতে পাইনি। এখন আমি ফিরে এসেছি। দ্রষ্টব্য: আপনার একমাস্ক্রিপ্ট specify নির্দিষ্ট করা উচিত, অন্যথায় কেউ 'ক্রোমে কাজ না করার' অভিযোগ করবেন
edc65

@ edc65: কারণ এটি ওয়েল, তিনি ECMAScript 6 উল্লেখ করা উচিত নয় ECMAScript 6. তীর ফাংশন নোটেশন ( y=>...) একটি ES6 বৈশিষ্ট্য।
টিম Čas

এই দুটি উত্তর হওয়া উচিত নয়?
dfeuer

9

পিপ , 13 বাইট

এটি প্রথম প্রদর্শিত হওয়ার চেয়ে আকর্ষণীয় ছিল। এটি কিছুটা ফাইনগলিং নিয়েছে, তবে শেষ পর্যন্ত আমি সেই দীর্ঘ উল্লেখগুলি এবং পরিবর্তনশীল (= 100) এর 400সাথে প্রতিস্থাপন করতে সক্ষম হয়েছি ।4h

!(a%h?aa/h)%4

1লিপ বছরের জন্য আউটপুট , 0নন-লিপ বছরের জন্য। ব্যাখ্যা:

               a is command-line argument (implicit)
  a%h?aa/h     If a is divisible by 100, divide it by 100; otherwise, leave it alone
 (        )%4  The result mod 4 is 0 if it's a leap year, nonzero otherwise
!              Negate and (implicitly) print

9

পাইথ, 19 15 14 বাইট

xFm!%Q^d2[2TyT

উপায় খুব সহজ। এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার জোতা

সম্পাদনা: মিস হয়েছে, আপনি এর পরিবর্তে সত্যবাদী / মিথ্যা মানগুলি মুদ্রণ করতে পারেন n/y। -4 বাইট

সম্পাদনা 2: মার্টিনের বর্গমূল ধারণা ব্যবহার করেছেন Used -1 বাইট

ব্যাখ্যা

                 implicit: Q = input number
         [         generate a list with the numbers:
          2          2
           T         10
            yT       2*10 = 20
  m              map each number d to:
   !%Q^d2          not(Q mod d^2) // True if Q % d^2 == 0 otherwise False
xF               fold by xor

9

Regex, 83 62 38

রেজিেক্সের দুটি অংশকে একত্রিত করার বিষয়ে পরামর্শের জন্য টবিকে ধন্যবাদ Thanks

যদি আমরা কেবল 1801..2400 পরিসরে মনোনিবেশ করি এবং অনুমান করি যে পূর্ণসংখ্যাগুলি:

(?!00)([02468][048]|[13579][26])(00)?$

কাঙ্ক্ষিত ব্যাপ্তির জন্য রুবিতে পরীক্ষা করুন ( ^= \Aএবং $= \Zকারণ রুবি):

r = /(?!00)([02468][048]|[13579][26])(00)?\Z/
(1801..2401).each do |year|
  leap = year % 4 == 0 && ((year % 100 != 0) || (year % 400 == 0))
  leap_regex = !year.to_s[r].nil?
  if leap != leap_regex
    print 'Assertion broken:', year, " ", leap, " ", leap_regex, "\n"
  end
end

(বোনাস) এমন কোনও কিছুর জন্য যা কেবল 1801..2400 এর জন্যই নয়, যে কোনও অ-নেতিবাচক বছরের জন্যও কাজ করবে:

^\d*(0000|(?!00)([13579][26]|(^|[02468])[048])(00)?)$

রুবিতে পরীক্ষা ( ^= \Aএবং $= \Zকারণ রুবি) প্রথম 100000 বছর:

r = /\A\d*(0000|(?!00)([13579][26]|(\A|[02468])[048])(00)?)\Z/
100000.times do |year|
  leap = year % 4 == 0 && ((year % 100 != 0) || (year % 400 == 0))
  leap_regex = !year.to_s[r].nil?
  if leap != leap_regex
    print 'Assertion broken:', year, " ", leap, " ", leap_regex, "\n"
  end
end

1
যদি আপনার কাছে থাকে তবে আপনি (?!)দুটি অংশকে একত্রিত করতে পারেন: (?!00)([02468][048]|[13579][26])(00)?$- 38 এর জন্য That এটি এক-অঙ্ক বছরের জন্য কাজ করবে না, যদিও।
টবির স্পিড

9

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

নিয়ম: (y%4==0) && (y%100!=0 || y%400==0)

গল্ফড: !(y%100<1&&y%400||y%4)(মূলত ডি মরগ্যানসের আইন ব্যবহার করে )

বিধি কার্যকর করার একটি কার্য:

l=y=>!(y%100<1&&y%400||y%4)

নিশ্চিত হওয়ার জন্য একটি পরীক্ষা (ফায়ারফক্সে চালানো):

l=y=>!(y%100<1&&y%400||y%4)

for(o=[],i=0;i<700;i++)
  y=i+1800,
  x=l(y),
  o[i/100|0]=(o[i/100|0]||'')+y+(x?' <b>Y</b>':' <i>N</i>')+'\n'
    
R.innerHTML='<td>'+o.join('</td><td>')+'</td>'
console.log(o[1])
td { white-space: pre; font-family: monospace; padding: 8px}

b { color: red; }
i { color: blue; }
<table>
  <tr id=R></tr>
</table>


3
আপনি যদি এর !(y%(y%25?4:16))পরিবর্তে ব্যবহার করেন তবে আপনি এটি ছয় অক্ষর দ্বারা হ্রাস করতে পারবেন !(y%100<1&&y%400||y%4)। টার্নারি অপারেটর দ্বারা বিরক্ত ব্যক্তিদের জন্য, আপনি !(y%(4<<2*!(y%25)))তিনটি অক্ষর ব্যবহার করতে এবং এখনও সংরক্ষণ করতে পারেন !(y%100<1&&y%400||y%4)
ডেভিড হামেন

1
ডেভিড হ্যামেনের পরামর্শটি তার উত্তরের মতো, সুতরাং আমার মনে হয় আপনার দৈর্ঘ্য 27 হিসাবে রাখা উচিত
লিটারোসিয়াসট

9

টিআই-বেসিক, 20 17 16 13

এটি টোকানাইজড হওয়ার কারণে, টিআই-বেসিক প্রায়শই সাধারণ গণিতের চ্যালেঞ্জের ক্ষেত্রে প্রতিযোগিতামূলক, তবে কোনও "বিভাজ্য" কমান্ড না থাকায় এটি নয়। হতে পারে এটি সর্বোপরি, তবে এটি সিজেএম এবং পাইথের চেয়ে আরও দীর্ঘ।

এটি ডেভিড হ্যামন্ডের পদ্ধতিটি ব্যবহার করে।

not(fPart(Ans/4/4^not(fPart(sub(Ans

16 বাইটে ওল্ড কোড:

not(fPart(Ans/16not(fPart(sub(Ansnot(fPart(Ans/4

Ungolfed:

not(fPart(Ans/16) and not(fPart(Ans/100) and not(fPart(Ans/4))))

fPart("ভগ্নাংশ অংশ"; ক্ষয়ক্ষতির বিভাগের চেয়ে উচ্চতর প্রাধান্য রয়েছে। টিআই-বেসিকে, ঘনিষ্ঠ-প্যারেনগুলি alচ্ছিক।

আমি sub(কমান্ডের অপ্রকাশিত আচরণ ব্যবহার করি , সাধারণত একটি স্ট্রিং পেতে ব্যবহৃত হয়: যখন তার যুক্তি স্ট্রিংয়ের পরিবর্তে একটি সংখ্যা হয়, তখন এটি সংখ্যাটি 100 দ্বারা ভাগ করে দেয় It এটি টিআই -৩৮ বা ৮৮ সিরিজের ক্যালকুলেটরটিতে কাজ করবে।

20 -> 17 কোডটি পুনরায় সাজিয়ে ক্লোজ-প্যারেনগুলি অপসারণের অনুমতি দেওয়ার জন্য; 17 -> 16 এর সাথে 400 প্রতিস্থাপন করে; 16 -> 13 ডেভিড হ্যামন্ডের ধারণাটি ব্যবহার করে।


9

স্ট্যাকাইলজিক, ২২6 বাইট (প্রতিযোগী নয়)

হ্যা সেটা ঠিক. আমি এখানে পাওয়া চ্যালেঞ্জের জন্য স্ট্যাকাইলজিক (নন-টিসি) -এর একটি প্রোগ্রাম তৈরি করেছি, যা হেলকা হাম্বা আবিষ্কার করেছিলেন । এটি চ্যালেঞ্জের পরে তৈরি হয়েছে, তাই প্রতিদ্বন্দ্বিতামূলক।

স্ট্যাকাইলজিকের কেবল বাইনারি ইনপুট রয়েছে, সুতরাং 10 (বা আরও বেশি কোনও অঙ্ক উপেক্ষা করা হবে) বিট বাইনারি অবশ্যই ব্যবহার করা উচিত (প্রথমে কমপক্ষে উল্লেখযোগ্য বিট ইনপুটযুক্ত)। নির্দিষ্ট রেঞ্জের বাইরের কোনও তারিখ ব্যর্থ হতে পারে, কারণ এটি কেবল ইনপুটড নম্বরটি যাচাই করে: এটি অপ্রয়োজনীয় তারিখগুলি আবরণ করে না

স্ট্যাকাইলোগিকের সাথে এটিই আমার প্রথম চ্যালেঞ্জ নয়, স্ট্যাকাইলোগিকের সাথে এটিই প্রথম চ্যালেঞ্জ।

এই গণ্ডগোলের জন্য প্রস্তুত হন:

1
0
1?
010
1?0
010
1?10
?1010
001010
?1010
?1010
?010
?10
?0
0
?
110
?10
11010
?010
11010
?1010
001010
?1010
?1010
?1010
?1010
?010
?0
110
?10
11010
?010
1010
01010
01010
?010
?0
110
?0
110
?0
110
1?0
?10
0?10
?10
?0
01
?
?<
0

এটি তৈরি করতে আমাকে এতদিন সময় লেগেছে, কারণ স্ট্যাকাইলজিক হ'ল সবচেয়ে বিভ্রান্তিকর ভাষা এবং আমি অত্যন্ত অপঠনযোগ্য: আপনার বর্তমান বিভাগটি সম্পাদনা করার আগে আপনাকে কীভাবে বাকি প্রোগ্রামটি সম্পাদন করেছে তা জানতে হবে। এমনকি এটি তৈরি করার সময় আমাকে পাঠযোগ্যতার জন্য স্পেস যুক্ত করতে হয়েছিল।

পরিমিত ব্যাখ্যা

এটি এটি কী করে তার একটি সহজ ব্যাখ্যা।

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

প্রথমত, এই প্রোগ্রামটি কমপক্ষে উল্লেখযোগ্য বিটগুলির একটি NOR করবে, তাদের প্রক্রিয়াটিতে ছাড়বে। এর অর্থ এটি যদি 4 দ্বারা বিভাজ্য হয় তবে এটি প্রোগ্রামের মূল অংশে অগ্রসর হবে, অন্যথায় 0 আউটপুট দেয়।

দ্বিতীয়ত, পয়েন্টারটি স্ট্যাকাইলোগিকের গোলকধাঁধায় পৌঁছে দেওয়া হয়, এখান থেকে, যদি পরবর্তী দুটি বিট শূন্য হয়, এটি তাত্ক্ষণিকভাবে আউটপুট 1 হবে (তখন এটি 16 দ্বারা বিভাজ্য হবে, এবং অন্য কোনও শর্ত সত্ত্বেও একটি লিপ বছর), অন্য এটি 1801 এবং 2400 এর মধ্যে 4 দ্বারা বিভাজ্য কোনও সংখ্যার নয় তবে লিপ বছর নয় কিনা তা পরীক্ষা করবে।

বিস্তারিত ব্যাখ্যা করার জন্য, এই পোস্টটি ইতিমধ্যে তার চেয়ে বহুগুণ বেশি লম্বা করা জড়িত


8

আইবিএম সিস্টেম জেড এসেম্বেলার - 56 বাইট।

(উত্সের 96 বাইট। পূর্বে 712 384 202 উত্স বাইট, 168 বাইট নির্বাহযোগ্য)

ছোট সংস্করণ এখনও। আর কলারের রেজিস্টার সংরক্ষণ করে না, আক্ষরিক সঞ্চয়স্থানে পরিবর্তন হয়, পরিবর্তিত ঠিকানা মোড।

 l        CSECT      
         using l,15 
         l  5,y     
         n 5,f      
         bnz r      
         xr 4,4     
         l 5,y      
         d 4,c      
         ch 4,i     
         bne i      
         n 5,f      
         bnz r      
i        dc h'0'    
r        b  *       
y        dc f'2004' 
f        dc f'3'    
c        dc f'100'  
         end 

নতুন সংস্করণ. এটি একটি লিপ বছর হলে একটি এস0সি 1 দিয়ে আবেন্ড করবে এবং এটি না থাকলে লুপ হবে। আশা করি ফলাফলটি ইঙ্গিত করার প্রয়োজনীয়তা পূরণ করুন।

l        CSECT             
         ASMDREG           
         SYSSTATE archlvl=2
         IEABRCX  DEFINE   
         save  (14,12)     
         larl  r9,s        
         using s,r9        
         st 13,w+4         
         la 13,w           
         st 13,w+8         
         la 5,2004         
         st 5,y            
         n 5,=f'3'         
         bnz r             
         xr r4,r4          
         l 5,y             
         d r4,=f'100'      
         ch r4,=h'0'       
         bne i             
         n 5,=f'3'         
         bnz r             
i        dc h'0'           
r        b  0              
s        dc 0d'0'          
y        ds f              
w        ds 18f            
         ltorg             
         end  

ঠিক আছে, তাই সংক্ষিপ্ত নয় (যদিও এটি একবারে আমরা প্রকৃত সম্পাদিত কোড প্লাস দোভাষী সংখ্যার দিকে তাকালে ...)

leapyear CSECT                                                
         ASMDREG                                              
         SYSSTATE archlvl=2                                   
         IEABRCX  DEFINE                                      

         save  (14,12)                                        

         larl  r9,staticArea                                  
         using staticArea,r9                                  
         st r13,w_savea+4       .Save callers savearea        
         la r13,w_savea         .Address my savearea          
         st r13,w_savea+8         . and save it               

         open  (O,OUTPUT)             .open file              

         la r5,1936             .r5 = input year              
         st r5,years            .Save year                    

         cvd r5,double          .Convert year to p-decimal    
         mvc edarea,=xl8'4020202020202120' .Move in edit mask 
         ed edarea,double+4      .Make packed decimal year printable                              
         mvc outrec(4),edarea+4  .Move year string to output area                             
         bas r10,isitleap       .Call leap year routine       

         close (O)              .Close files            
         b return               .Branch to finish

isitleap ds 0h                                                      
         mvi outrec+5,c'N'      .Set default value                                   
         n r5,=f'3'             .Are last 2 bits 0 (Divisible by 4)?
         bnz notleap            .No - not leap                      
         xr r4,r4               .Clear R4                           
         l r5,years             .Reload r5 with year                
         d r4,=f'100'           .divide r4/r5 pair by 100           
         ch r4,=h'0'            .Remainder 0?                       
         bne isleap             .No - leap year                     
         n r5,=f'3'             .Quotient divisible by 4?           
         bnz notleap            .No - not leap                      

isleap   ds    0h                                                   
         mvi outrec+5,c'Y'      .Move in leap year indicator                                    

notleap  ds    0h                                                   
         put O,outrec           .Print output record                                    
         br r10                 .Return to caller                   

* Program termination                                               
return   ds 0h                                                      
         l r13,w_savea+4         .Restore callers savearea          
         return (14,12),,rc=0    .Restore registers and return    
* storage areas                                                     
staticarea  dc 0d'0'                                                
outrec      ds cl10                                                 
years       ds f                                                    
w_savea     ds 18f                save area                         
edarea      ds cl8                    .edit area                    
double      ds d                                                    
* Macros and literals                                               
         print nogen                                                
O        dcb   recfm=F,lrecl=6,dsorg=PS,ddname=O,macrf=PM           
         print gen                                                  
*                                                                   
         ltorg                         literal storage              
         end  

আউটপুট:

লিপ বছরের জন্য অ্যাবেন্ড এস 0 সি 1, এস 222 (সিপিইউ সময় শেষ হয়ে গেলে) না থাকলে।

1936 Y 1805 N 1900 N 2272 Y 2400 Y

(যখন একাধিকবার চালানো হবে)


স্টোরেজ অঞ্চলগুলি ন্যূনতম আকার (13 বাইট) তৈরি করে মঞ্চের অঞ্চল 'লিপফ্ল্যাগ' অপসারণ এবং প্রোগ্রামে কেবল এক বছরের (5 এর চেয়ে বেশি) অন্তর্ভুক্ত করে 376 বাইটের নিচে।
স্টিভ আইভেস

384 বাইট একটি সামান্য বিন্যাসিত আউটপুট সরবরাহ করে:
স্টিভ আইভেস

1
ভাষার আকর্ষণীয় এবং শিক্ষামূলক পছন্দগুলির জন্য +1। :-)
টবি স্পিড

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

7

সিজেম, 18 16 বাইট

q~[YAK]f{2#%!}:^

দেয় 1অধিবর্ষ এবং জন্য (truthy) 0(falsy) অন্যথায়।

সমস্ত পরীক্ষার মামলা এখানে চালান।

ব্যাখ্যা

q~                 e# Read and eval input.
  [YAK]            e# Push an array containing 2, 10, 20 (the square roots of the
                   e# relevant divisors).
       f{    }     e# Map this block onto that array, also passing in the input year.
         2#        e# Square the divisor.
           %!      e# Modulo followed by logical negation. Gives 1 if the year is divisible
                   e# by the given divisor and 0 otherwise.
                   e# At this point we have one of the following arrays:
                   e#   [0 0 0] - not a leap year
                   e#   [1 0 0] - a leap year
                   e#   [1 1 0] - not a leap year
                   e#   [1 1 1] - a leap year
              :^   e# Reduce XOR onto this array, which gives 1 if there is an odd number
                   e# of 1s and 0 if there's an even number.

6

গণিত, 40 27 বাইট, 17 অক্ষর

#∣4∧(#∣100<U+F523>#∣400)

17 টি অক্ষর, তবে 27 বাইট ব্যবহার করে। টিপটির জন্য @ এলফালফাকে ধন্যবাদ। মনে রাখবেন যে উল্লম্ব বারগুলি বিভাজনের জন্য আসলে U + 2223। <U+F523>সংশ্লিষ্ট অক্ষর দিয়ে প্রতিস্থাপিত হবে।


2
এটি সেই ধাঁধাগুলির মধ্যে একটি যেখানে ম্যাথমেটিকা ​​একটি সমাধান দেয় যা ধরণের ধোঁকাবাজি অনুভব করে: লিপইয়ারকিউ [#] এবং
জেলড্রেজ ২

1
আপনি ব্যবহার করতে পারেন প্রতিনিধিত্ব করতে Divisible: #∣4&&(!#∣100||#∣400)&21 অক্ষর, 27 হল UTF-8 বাইট।
আলেফাল্ফ

@ জেলড্রেডজ তবুও, এটি এপিএল সমাধানের চেয়ে কম নয়।
FUZxxl

@alephalpha অন্যথা, আপনি ব্যবহার করতে পারে U+F523( \[Implies]) এটিকে করতে #∣4&&(#∣100<U+F523>#∣400)&19 অক্ষর (কিন্তু এখনও 27 বাইটস) জন্য।
LegionMammal978

এটি একটি স্ট্যান্ডার্ড লুফোল; আপনি এমন একটি ফাংশন ব্যবহার করছেন যা ঠিক প্রয়োজনীয় কার্যকারিতা করে। এটি ভারবোটেন।
FUZxxl

6

আর, 29

!(Y=scan())%%4&Y%%100|!Y%%400

টেস্ট রান

> !(Y=scan())%%4&Y%%100|!Y%%400
1: 1936
2: 1805
3: 1900
4: 2272
5: 2400
6: 2200
7: 
Read 6 items
[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE

5

সি, 81

আমি আরও ছোট করতে পারি, তবে এটি আর্গুমেন্ট (উদাহরণস্বরূপ atoi) কে বিশ্লেষণ না করেই ঝরঝরেভাবে 'চর' প্রকারে আটকে রয়েছে :

main(c,v)char**v;{char*p=*v+9;p-=2*(96==*p+p[1]);putchar("ynnn"[(2**p^p[1])&3]);}

এটি অবশ্যই 4 টি অক্ষরের দীর্ঘ নামের সাথে ডাকা উচিত, কারণ এটি স্ট্যান্ডার্ড অনুমান করে যে যুক্তিগুলি তাত্ক্ষণিকভাবে প্রোগ্রামটির নাম অনুসরণ করে, NULs দ্বারা পৃথক। তদুপরি, এটি ধরে নেওয়া হয় যে একক যুক্তি ASCII এ এনকোড করা আছে এবং এর কোনও শীর্ষস্থান নেই space

ব্যাখ্যা:

main(c,v)
char**v;
{
    char *p = *v+9;
    if (p[0] + p[1] == '0'+'0')
        p -= 2;
    putchar("ynnn"[((*p << 1) ^ p[1])&3]);
}

*v+9'দশকের' অঙ্কের অবস্থান v[1]+2

যদি 'দশক' এবং 'ইউনিট' অক্ষরগুলি 96 এর সাথে যুক্ত হয় তবে আমরা শেষ হয়ে যাই 00, সুতরাং দুটি অক্ষরের ব্যাকআপ রাখি , যাতে 'দশক' এবং 'ইউনিট' শতাব্দীর সংখ্যাতে নির্দেশ করে।

দ্বিগুণ 'দশ', মোড 4 সহ এখন xor 'ইউনিট' এটি কাজ করে কারণ 10==±2 mod 4, 'দশ' এর নীচের অংশটি 'ইউনিট' এর বিট 1 টি টগল করতে পারে। আমরা ফলাফলটি আমাদের অবশিষ্টাংশ টেবিলের সূচক হিসাবে ব্যবহার করি, yকেবলমাত্র মডিউলারের ফলাফলটি শূন্য হলে মুদ্রণ করা হয়।



4

সেড, 55

s/00$//
y/0123456789/yNnNyNnNyN/
/N.$/y/ny/yn/
s/.\B//g
  • প্রথম লাইনটি 100 দ্বারা সঠিক সেঞ্চুরি ভাগ করে দেয়।
  • দ্বিতীয় রেখাটি বিজোড় অঙ্কগুলিতে 'এন', 'y' কে 4s, এবং নন -4 এ 'এন' দেয়।
  • বিজোড় পেনাল্টিমেট ডিজিট থাকলে তৃতীয় লাইনের 'y' এবং 'n' কে বদল করা হবে (কারণ 10 হ'ল 2 মোড 4)
  • চূড়ান্ত লাইনটি শেষ অক্ষর ব্যতীত সমস্ত মুছবে

লক্ষ্য করুন অ অধিবর্ষ হিসাবে মুদ্রিত হতে পারে nবা Nকিনা তারা জোড় না বিজোড় হয় উপর নির্ভর করে। আমি এটিকে নিয়মের একটি সৃজনশীল ব্যাখ্যা হিসাবে বিবেচনা করি যা তাদের ধারাবাহিক হতে হবে তা উল্লেখ না করেই 'হ্যাঁ' এবং 'না' বিকল্পের অনুমতি দেয়।


4

পাইথন 2 - 37

g=lambda x:(x%4or x%400and x%100<1)<1

মনে রাখবেন যে যদি aএকটি nonnegative পূর্ণসংখ্যা হয়, তবে a<1লেখার একটি ছোট উপায় not bool(a)। সর্বশেষে <1এইভাবে কার্যকরভাবে প্রথম বন্ধনীর এক্সপ্রেশনকে একটি বুলিয়ানে রূপান্তরিত করে ফলাফলটিকে অবহেলা করে।

ফাংশন প্রয়োগ করা হচ্ছে gএকটি পূর্ণসংখ্যা n1801 এবং 2400 মধ্যে ফিরে আসবে Trueযদি nএকটি অধিবর্ষ, এবং Falseঅন্যথায়।


3

কেডিবি (কিউ), 27 বাইট

{0=x mod(4 400)0=x mod 100}

ব্যাখ্যা

               0=x mod 100      / boolean of 100 divisibility
        (4 400)                 / 0b -> 4, 1b -> 400
 0=x mod                        / boolean of 4/400 divisibility
{                         }     / lambda

পরীক্ষা

q){0=x mod(4 400)0=x mod 100}1936 1805 1900 2272 2400
10011b

3

জুলিয়া, 30 28 বাইট

y->(y%4<1&&y%100>0)||y%400<1

এটি একটি নামহীন ফাংশন তৈরি করে যা একটি পূর্ণসংখ্যার যুক্তি গ্রহণ করে এবং একটি বুলিয়ান মান দেয় returns এটি কল করার জন্য, এটির একটি নাম দিন f=y->...

Ungolfed:

function f(y)
    (y % 4 == 0 && y % 100 != 0) || y % 400 == 0
end

উদাহরণ:

julia> for y in [1936, 1805, 1900, 2272, 2400] println(f(y)) end
true
false
false
true
true
true

3

পিএইচপি - 45 বাইট

$b=$argv[1]%400;echo !$b|!($b%4)&!!($b%100);

সত্যিই বিশেষ কিছু নেই, কেবল টাইপ-জাগলিংকে আপত্তি জানায়।


3

সি #, 23 বাইট

y=>y%25<1?y%16<1:y%4<1;

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

পরীক্ষার কেস সহ পুরো উত্স:

using System;

namespace CountingLeapYears
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,bool>s=y=>y%25<1?y%16<1:y%4<1;
            Console.WriteLine(s(1936)); //y
            Console.WriteLine(s(1805)); //n
            Console.WriteLine(s(1900)); //n
            Console.WriteLine(s(2272)); //y
            Console.WriteLine(s(2400)); //y
        }
    }
}


3

টি-এসকিউএল 37 22 বাইট

ব্রাডিসির মন্তব্যে 15 বাইট সংরক্ষণ করা হয়েছে।

এর অভাবের জন্য সাধারন হার্ডকোড ভেরিয়েবল stdin

যেমন

DECLARE @ NVARCHAR(4) = '2016'

তারপরে সমাধানটি হ'ল:

PRINT ISDATE(@+'0229')

1
আমি যদি চ্যালেঞ্জটি সঠিকভাবে পড়ছি তবে আমি মনে করি আপনি কেবল 1বা 0সরাসরি প্রত্যাবর্তন করে একগুচ্ছ বাইট সংরক্ষণ করতে পারেন :PRINT ISDATE(@+'0229')
ব্র্যাডিসি

3

জাভা 8, 49 45 22 20 বাইট

n->n%(n%25<1?16:4)<1

-২ বাইট @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।

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

কিছু 22 বাইট সমাধান:

n->n%25<1?n%16<1:n%4<1

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

n->(n%25<1?n%16:n%4)<1

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

java.time.Year::isLeap

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

ব্যাখ্যা:

n->                // Method with integer parameter and boolean return-type
   n%          <1  //  Return whether the integer is divisible by:
     (n%25<1?      //   If the input is divisible by 25:
             16    //    Check if its divisible by 16
            :      //   Else:
             4)    //    Check if its divisible by 4 instead

আরেকটি 22 বিকল্প বাইট: java.time.Year::isLeap
অলিভিয়ার গ্রাগোয়ার

2
এবং একটি 20 বাইট সমাধান:n->n%(n%25<1?16:4)<1
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়েরগ্রোয়ার সুন্দর 20-বাইটার! এবং বুঝতে পারিনি যে বিল্টিনটি 22 বাইটও ছিল। :)
কেভিন ক্রুইজসেন


2

জাভাস্ক্রিপ্ট ES6, 32, 29, 26

নিম্নলিখিত যে কোনও লাইন কাজ করে:

f=y=>new Date(y,2,0).getDate()&1
g=y=>!(y&3)^!(y%100)>!(y%400)
h=y=>!(y&3|y%100<1&&y%400)

2

সি, 57 বাইট

স্পিডিং / নিউলাইন সহ পিছনে স্টিডিন থেকে ইনপুট নেয়। কেবল সামান্য এডিয়ান মেশিনগুলিতে কাজ করে (হ্যাঁ, আজকাল সকলেই যেমন বিই তে রয়েছেন)। আউটপুটগুলি ওয়াই বা এন।

main(y){scanf("%d",&y);y=y%(y%100?4:400)?78:89;puts(&y);}

ব্যাখ্যা

Ungolfed:

int main(int y) {
   scanf("%d", &y);
   y = y % (y % 100 ? 4 : 400) ? 'N' : 'Y';
   puts(&y);
}

প্রথমত, scanfবছরটি y তে পূর্ণসংখ্যা হিসাবে পড়ে। তারপরে, বছরটি 100 দ্বারা বিভাজ্য কিনা তার উপর নির্ভর করে y কে 4 বা 400 দিয়ে মডুলোড করা হয় rema এখন 0x000000??, যেখানে 0x??নির্ধারিত চরিত্রটি। সামান্য এন্ডিয়ান মেশিনে থাকার কারণে, মেমরির ক্ষেত্রে এটি সংরক্ষণ করা হয় ?? 00 00 00। এটি একটি নাল-টার্মিনেটেড সি স্ট্রিং, কেবলমাত্র নির্ধারিত অক্ষরগুলি সহ। Y এর ঠিকানা পুতে দেওয়া হয় এবং চরটি মুদ্রণ করা হয় (একটি ট্রেলিং নিউলাইন সহ)।


1
"আপনার পছন্দ মতো যে কোনও উপায়ে আপনি আউটপুট দেবেন ব্যবহারকারীকে স্পষ্টভাবে জানায় যে এটি কোনও লিপ বছর নয়" " আপনি 'ওয়াই' বা 'এন' এর পরিবর্তে 1 বা 0 ফিরিয়ে একটি দম্পতি বাইট সংরক্ষণ করতে পারেন? (আমি অনুমান করে সত্যিকার অর্থে সি মোটেও জানি না)
অ্যালেক্স এ।

@AlexA। সম্পাদনার জন্য ধন্যবাদ - এখন আমি কীভাবে সিনট্যাক্স হাইলাইট করতে জানি :) আমি এটি বিবেচনা করেছি। এএসসিআইআই কোডগুলি দুটি অঙ্কের, তাই এর থেকে কোনও লাভ হয় না (উপায় দ্বারা, আমি বড় হাতের অক্ষরটি 3 ডিজিটযুক্ত বলে 2 বাইট সংরক্ষণ করতে বড় হাতের Y এবং N ব্যবহার করছি)। এগুলি অনুক্রমিক, যাতে এটি কার্যকর হতে পারে। দুর্ভাগ্যবশত, অপারেটর প্রাধান্য কারণে আমি একই বাইট গণনা পাবেন: main(y){scanf("%d",&y);y=!(y%(y%100?4:400))+48;puts(&y);}। আমি লিপ বছরের জন্য খালি লাইন এবং অন্য কোনও অক্ষর (এএসসিআইআই 1-99) আউটপুট করতে পারলে আমি 48 বাইটে যেতে পারি, তবে আমার মনে হয় এটি নিয়মগুলি কিছুটা বাঁকানো। আপনি কি মনে করেন?
আন্দ্রে বিওনদো

চরগুলি গণনা করার সময় অবশ্যই আমি কিছু ভুল করেছি। এটি 57 নয়, 59 :)
অ্যান্ড্রিয়া বিওনডো

1
হ্যাঁ, আমি বলব যে এটি নিয়মগুলি নমন করছে তবে আপনি প্রশ্নটিতে মন্তব্য করতে পারেন এবং ওপিকে নিশ্চিতকরণের জন্য জিজ্ঞাসা করতে পারেন। একটি ভাল টুল কাউন্টিং জন্য বাইট এই এখানে ভাবেন অনেক চিন্তা করি --I এটি ব্যবহার।
অ্যালেক্স এ।

নাহ, আমি এটি যেমনটি রেখে দেব :)
আন্দ্রে বিয়নদো

2

পাওয়ারশেল, 31 বাইট

আমি বলার জন্য উত্সাহিত যে আমি বিল্টিনের চেয়ে এই খাটোটি আরও ছোট করেছিলাম!

param($a)!($a%(4,16)[!($a%25)])

আউটপুটগুলি লিপ বছরের জন্য সত্য এবং অন্যথায় মিথ্যা।

Builtin:

[datetime]::IsLeapYear($args[0])

যদিও, আমি যদি বিবৃতিটি প্রসারিত করতে চাইতাম 'স্পষ্টভাবে ব্যবহারকারীকে বলে যে এটি লিপ বছর হয় বা না হয়' এবং মানহীন কিছু করতে পারি তবে আমি 3 বাইট সংরক্ষণ করতে এবং ব্যবহার করতে পারতাম:

param($a)$a%(4,16)[!($a%25)]

0লিপ বছরের জন্য এই আউটপুটগুলি এবং নন-লিপ বছরের জন্য 1 বা তার বেশি, যা আমি পছন্দ করি না যেহেতু আমি লিপ বছরের জন্য আরও বেশি স্ট্যান্ডার্ড সত্যবাদী মান ফিরিয়ে দিতে পছন্দ করি।


2

LOLCODE, 228 202 159 বাইট

HOW IZ I f YR a
MOD OF a AN 100
O RLY?
YA RLY
MOD OF a AN 4
O RLY?
YA RLY
b R 1
OIC
NO WAI
MOD OF a AN 400
O RLY?
YA RLY
b R 0
NO WAI
b R 1
OIC
OIC
IF U SAY SO

Ungolfed:

HAI 1.3 BTW "HAI" does nothing functionally in current versions and does not throw an error if you omit it.
HOW IZ I leap YR input
    I HAS A output
    DIFFRINT MOD OF input AN 100 AN 0 BTW Thanks @LeakyNun, In LOLCODE any non-empty values, i.e. 0, "", etc. default to WIN.
    O RLY?
        YA RLY
            BOTH SAEM MOD OF a AN 4 AN 0
            O RLY?
                YA RLY
                    output R WIN BTW "WIN" is true, but in the actual program I used 1 as a truthy value because it's shorter.
            OIC
        NO WAI
            DIFFRINT MOD OF a AN 400 AN 0
            O RLY?
                YA RLY
                    output R FAIL BTW "Fail" is false, but in the actual program I used 0 as a falsy value.
                NO WAI
                    output R WIN
            OIC
    OIC
    FOUND YR output BTW This statement is implied in the golfed version.
IF U SAY SO BTW "KTHXBYE", just like "HAI" has no functional purpose and throws no error on omission.
KTHXBYE

পাইথন উচ্ছৃঙ্খল, কারণ LOLCODE বিভ্রান্ত করছে:

def leap:
    if(year % 100 != 0):
        if(year % 4 == 0):
            output = true
    else:
        if(year % 400 != 0):
            output = false
        else:
            output = true
    return(output)

এটি একটি ফাংশন সংজ্ঞা সংক্ষিপ্ত হবে?
লিকি নুন

সম্ভবত, তবে আমি এটি পরে সম্পাদনা করব।
ওল্ডবুনি 2800

আপনি মূল কোডটি একটি ফাংশন হিসাবে আপডেট করেছেন, তবে অবরুদ্ধ কোডটি নয়?
ধ্বংসাত্মক লেবু

আমি ভেবেছিলাম LOLCODE- এ স্বয়ংক্রিয় ধরণের জবরদস্তি রয়েছে, যার অর্থ কোনও শূন্য নয় মান সমান WIN..
লিকি নুন

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