বছরের দিন সংখ্যা গণনা করুন


13

মনে হচ্ছে আমাদের কাছে এটি এখনও নেই, তাই আমরা এখানে যাচ্ছি:

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে একটি তারিখ নেয় এবং বছরের দিন সংখ্যা আউটপুট করে। আপনি এর জন্য কোনও বিল্টিন ব্যবহার করতে পারেন না!

বিধি

  • যথারীতি আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন।
  • ইনপুটটির ফর্ম্যাটটি আপনার উপর নির্ভর করে তবে এটিতে এক বছর, এক মাস এবং একটি দিন থাকতে হবে। আপনার সমাধানটি কোনটি ব্যবহার করে তা পরিষ্কার করুন!
  • কোনও তারিখ সম্পর্কিত বিল্টিন অনুমোদিত নয়! আপনি নিজেই কাজটি করতে হবে। তারিখ ক্রিয়াকলাপের সাথে সম্পর্কিত নয় এমন বিল্টিনগুলি ঠিক আছে।
  • গণনার ভিত্তি হ'ল গ্রেগরিয়ান ক্যালেন্ডার।
  • আপনি লিপ-বছর হিসাব নিতে হবে।
  • আপনাকে কেবল বছরের জন্য হ্যান্ডেল করতে হবে [1, 9999]
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • সর্বনিম্ন বাইট গণনা জয়!

Testcases

এখানে ইনপুট ফর্ম্যাটটি YYYY / এমএম / ডিডি

2016/07/05 -> 187
2000/03/28 -> 88
0666/06/06 -> 157
6789/10/11 -> 284
0004/04/04 -> 95
1337/07/13 -> 194

শুভ কোডিং!


আমরা কি কোনও নির্দিষ্ট তারিখের পরে থেকে বিল্টিনগুলি ব্যবহার করতে পারি? এক বছর একটি লিপ বছর কিনা সে সম্পর্কে কী?
lirtosiast

@ থমাস কোনও তারিখ-সম্পর্কিত বিল্টিন অনুমোদিত নয়। চ্যালেঞ্জটিতে মন্তব্যটি দেওয়ার জন্য ধন্যবাদ জানাতে চাই! :)
ডেনকার

@ ডেনারএফে আপনি সমস্ত বিল্ট-ইনগুলি নিষেধ করলেন কেন?
অলিসডজি কোডিডেক্ট.কম

উত্তর:


2

পাইথ, 31 বাইট

+s<X1+L28jC"3Ȕ"4!%|F_jQ*TT4tEE

জন্য @Dennis এবং @Jakube ধন্যবাদ অধিবর্ষ অংশ । ইনপুটটি হ'ল YYYY, এমএম, ডিডি আলাদা লাইনে।

+                          add [day] to
  s <                      sum of first [month]-1 values in the list
      X                    add 1 to
        1                  the second element (January)...
        +L                 \
           28              |
           j               }   lengths of all the months
             C "3Ȕ"       | 
             4             /
        ! %                ... if the year is a leap year; that is, 4 divides...
            |F _ j         fold logical OR over reversed
                   Q       the year
                   *TT     converted to base 100
            4
      t E                 [month]-1
  E                       [day]

টেস্ট স্যুট


8

জাভাস্ক্রিপ্ট ES6, 81 69 বাইট

(y,m,d)=>d+parseInt("03479cehkmpr"[--m],36)+m*28-(y%(y%25?4:16)&&m>1)

ধরে নিচ্ছি মাসগুলি 1-ভিত্তিক, অন্যথায় আমি 2 বাইট সংরক্ষণ করতে পারি।

সম্পাদনা: @ ব্যবহারকারী81655 এর টিপ ব্যবহার করে 12 বাইট সংরক্ষণ করা হয়েছে।


3

সি, 96 102 89 61 বাইট

g(y,m,d){printf("%d",m/2*31+--m/2*30-(y%(y%25?4:16)?2:1)+d);}

2

পাইথন 3, 152 148 150 বাইট

m,d,y=map(int,input().split());n=[0,31,(59,60)[(y%4==0 and y%100!=0)or y%400==0]]
for i in range(m):n+=[n[-1]+(31,30)[i in[1,3,6,8]]]
print(n[-4]+d)

"MD YYYY" ফর্ম্যাটে তারিখ নেয়।


1
পাইথন ৩ থেকে আপনার নির্দিষ্ট বৈশিষ্ট্যের প্রয়োজন না থাকলে আপনার পাইথন ২ ব্যবহার করা উচিত, কারণ এরপরে আপনার প্রিন্টগুলিতে ব্র্যাকেটের দরকার নেই যা আপনাকে আপনার মুদ্রণটি কব্জি করে একটি বাইট সংরক্ষণ করতে দেয়print n[m-1]+d
ডেনকার

প্রথম লাইনে আপনি y% 4 == 0 ও y% 100 লিখতে পারেন! = 0, আমি মনে করি
মেগা ম্যান

2

পাইথন 2, 100 82 বাইট

@ নীলের উত্তরের একটি পাইথন বন্দর :

lambda d,m,y:d+int("03479cehkmpr"[m-1],36)+(m-1)*28-(y%(4if y%25 else 16)and m>2)

পূর্ববর্তী উত্তর হিসাবে, 17 বাইট যোগ (99 টি বাইট মোট) একটি সম্পূর্ণ প্রোগ্রাম দেবে:

print(lambda d,m,y:d+int("03479cehkmpr"[m-1],36)+(m-1)*28-(y%(4if y%25 else 16)and m>2))(*input())

পূর্ববর্তী উত্তর:

নামবিহীন ল্যাম্বদা হিসাবে:

lambda d,m,y:d+sum(31-(n in(3,5,8,10))for n in range(m-1))-(3if y%4 or(y%400!=0and y%100==0)else 2)

2 বাইট পেনাল্টির জন্য নামযুক্ত ল্যাম্বডায় রূপান্তর করা যায়। বিকল্পভাবে, একটি সম্পূর্ণ প্রোগ্রাম (বিন্যাসে ইনপুট নেওয়া D,M,Y) 117 বাইটের জন্য অর্জন করা যেতে পারে:

print(lambda d,m,y:d+sum(31-(n in(3,5,8,10))for n in range(m-1))-(3if y%4 or(y%400!=0and y%100==0)else 2))(*input())

কয়েকটি ছোট গল্ফ 76 বাইট
মনিকা

0

পাইথন 3, 125 বাইট

print((lambda d,m,y:sum([3,not(y%400 and not y%100 or y%4),3,2,3,2,3,3,2,3,2,3][:m-1])+m*28-28+d)(*map(int,input().split())))

এই সমস্যার আরেকটি পদ্ধতি approach কোডটি পাইথনের বুলিয়ান বীজগণিত সম্পাদন অগ্রাধিকারের সুবিধাগুলি গ্রহণ করে এবং যেহেতু notশেষ অপারেশন, বুলিয়ান রূপান্তর স্বয়ংক্রিয় is সমষ্টি শেষ হয়ে গেলে, বুলিয়ান 1 বা 0 হিসাবে গণ্য হয় ইনপুট ফর্ম্যাটটি "YY MM DDDD" স্ট্রিং। ইনপুট সিস্টেম @ স্টিভেকার্টের অনুরূপ অনুরূপ দ্বারা অনুপ্রাণিত ।

ফাংশন হিসাবে অন্য ফর্ম, 91 বাইট

def f(d,m,y):return sum([3,not(y%400 and not y%100 or y%4),3,2,3,2,3,3,2,3,2,3][:m])+m*28+d

এক্ষেত্রে ইনপুটটি তিনটি পূর্ণসংখ্যার হয়, মাসটি 0-10-এর মধ্যে থাকে। এটি পাইথন 2 তেও কাজ করবে।


0

এক্সেল, 106 বাইট

=AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100))))+30*B1-31+CHOOSE(B1,1,2,0,1,1,2,2,3,4,4,5,5,6)+C1

তিনটি কক্ষে ইনপুট নেয় A1= বছর, B1= মাস, C1= দিন।


AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100))))

1 যদি লিপইয়ার, অন্যথায় 0

30*B1-31+CHOOSE(B1,1,2,0,1,1,2,2,3,4,4,5,5,6)+C1

একাধিক 30, অতিরিক্ত দিনের জন্য চয়ন করুন, মাসে আরও দিন


বিবর্তন:

=IF(AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)))),1,0)+CHOOSE(B1,0,31,59,90,120,151,181,212,243,273,304,334,365)+C1
=IF(AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)))),1,0)+CHOOSE(B1-1,31,59,90,120,151,181,212,243,273,304,334,365)+C1
=IF(AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)))),1,0)+30*(B1-1)+CHOOSE(B1,0,1,-1,0,0,1,1,2,3,3,4,4,5)+C1
=IF(AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)))),1,0)+30*B1-30+CHOOSE(B1,0,1,-1,0,0,1,1,2,3,3,4,4,5)+C1
=IF(AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100)))),1,0)+30*B1-31+CHOOSE(B1,1,2,0,1,1,2,2,3,4,4,5,5,6)+C1
=AND(C1>2,OR(MOD(A1,400)=0,AND(MOD(A1,4)=0,MOD(A1,100))))+30*B1-31+CHOOSE(B1,1,2,0,1,1,2,2,3,4,4,5,5,6)+C1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.