আজকের দিনটি (বা অন্যান্য তারিখ) কী?


12

কার্য

এমন একটি প্রোগ্রাম বা একটি ফাংশন লিখুন যা কোনও ব্যবহারকারীর প্রবেশের তারিখের একটি সপ্তাহ-দিনের নাম গণনা করে।

ইনপুট আউটপুট

ইনপুট একটি স্ট্রিং YYYYMMDD,।

ইনপুট মানগুলির উদাহরণ:

20110617: জুন 17, 2011
19040229: ফেব্রুয়ারী 29, 1904
06661225: 25 ডিসেম্বর, 666
00000101: জানুয়ারী 1, 0
99991231: 31 ডিসেম্বর, 9999

আপনি ধরে নিতে পারেন যে সমস্ত ইনপুট বৈধ। নোট করুন যে বছর শূন্য বৈধ।

আউটপুট 0এবং এর মধ্যে একটি পূর্ণসংখ্যা 6। প্রতিটি পূর্ণসংখ্যা একটি সপ্তাহ-দিনের নাম উপস্থাপন করে। আপনি নির্দ্বিধায় সিদ্ধান্ত নিতে পারেন কোনটি পূর্ণসংখ্যার মতো সপ্তাহব্যাপী নাম উপস্থাপন করে

০১: সোমবার
১: মঙ্গলবার
2: বুধবার
...
6: রবিবার

(ক্রম) বা এই এক

০১: সোমবার
২: বুধবার
2: রবিবার
...
6: শনিবার

(ক্রমে নয়)

পরীক্ষার কেস

ইনপুট সপ্তাহ-দিনের আউটপুট ([0..6 -> সোমবার..সান্দে] এই উদাহরণে ব্যবহৃত হয়))

20110617 শুক্রবার 4
19500101 রবিবার 6
22220202 শনিবার 5
19000228 বুধবার 2
19000301 বৃহস্পতিবার 3
19450815 বুধবার 2
19040229 সোমবার 0
19040301 মঙ্গলবার 1
17760704 বৃহস্পতিবার 3
20000228 সোমবার 0
20000229 মঙ্গলবার 1
20000301 বুধবার 2
20121223 রবিবার 6
00000401 শনিবার 5
66660606 বুধবার 2
59161021 শনিবার 5

সীমাবদ্ধতা

আপনি না ব্যবহার কোনো তৈরি function / class ধরনের / ... যা টাইমস্ট্যাম্প বা তারিখ, মত সাথে সম্পর্কিত হয় Dateক্লাস Java/ JavaScript/ ActionScriptঅথবা getdateফাংশন PHP

আপনার গ্রেগরিয়ান ক্যালেন্ডার ব্যবহার করা উচিত , যা এখন অনেক লোক ব্যবহার করে।

অবশ্যই, সংক্ষিপ্ততম কোড জিতেছে। যদি দুটি কোডের দৈর্ঘ্য একই হয় তবে সর্বাধিক ভোটের কোডটি জয়ী হয়।

(নির্ধারিত: যখন 5 টিরও বেশি কোড রয়েছে যেখানে বেশি (বা সমান) +1ভোট রয়েছে)


আজ? কেন, বড়দিন!
জোয় অ্যাডামস

3
আশাবাদী সমাধান বাশে লিখিত (6 টি অক্ষর) : echo 4.
ট্রুথিলিটি

1
@ থ্রিয়েলিটি না, আমার অর্থ এই নয় .. আমি যা চেয়েছিলাম তা হ'ল এমন একটি কোড যা কোনও টাইপ করা তারিখের সপ্তাহের দিন প্রিন্ট করে / ফেরত দেয়, কেবল আজকের সপ্তাহের দিনটি প্রিন্ট করে না।
জিমিনপি

ওহ আমি জানি. এই এক এটি কি।
ট্রুথিলিটি

এটি ঠিক কমপক্ষে 14% সময়!
ড্রাকো

উত্তর:


2

রুবি, 95 92 টি অক্ষর

0: সোমবার, দিয়ে সরল সরু রুবি বাস্তবায়ন

p ((y=(d=gets.to_i)/(k=100)/k-((m=d/k%k)<3?1:0))+y/4-y/k+y/400+"squsptrotqro"[-m].ord+d%k)%7

4

পিএইচপি - 101 97 103 125 টি অক্ষর

  • সাকামোটো অ্যালগরিদম
  • ০ = রবিবার

কোড

<?php fscanf(STDIN,"%4d%2d%2d",$y,$m,$d);@$a=a032503514624;$y-=$m<3;$z=$y+1;echo($y+$y/4%$z-$y/100%$z+$y/400%$z+$a[$m]+$d)%7;

বিঃদ্রঃ

দুর্ভাগ্যক্রমে, পিএইচপি-র গতিশীল, দুর্বল টাইপিংয়ের কারণে সাকামোটো অ্যালগোরিদম প্রতিটি বিভাগ অপারেশনকে স্পষ্টত মেঝে না দিয়ে সঠিকভাবে কাজ করে না।


আপনি আবার পরীক্ষা করতে পারেন? কিছু বছর এটি আমাকে বিভিন্ন ফলাফল দেয় (উদাহরণস্বরূপ বুধবারের পরিবর্তে মঙ্গলবার টেস্টকেস 17760704 ফলন দেয়)।
হাওয়ার্ড

@ জোয়ার্ড এটি খুব অদ্ভুত; 17760704 এর জন্য, আমি বুধবার পেয়েছি। আমি অন্যান্য অসঙ্গতি পেয়েছি, যদিও আমি যার জন্য অ্যাকাউন্ট করতে পারি না, যেমন 19040229 মঙ্গলবার ফেরত দেয়। এটি কী কারণ হতে পারে তা নিশ্চিত নয়। আমি আবার অ্যালগরিদমকে আবার প্রসারিত করার সময় একই ফলাফল পাই y+y/4-y/100+y/400
রিন্টন

আমি এটি 497 * y / 400 দিয়ে ঘটতে দেখতে পাচ্ছি: y=4সেক্ষেত্রে সঠিক 5 এর পরিবর্তে 4 y+y/4+y/100+y/400(যেখানে কেবল প্রথম দুটি শর্ত খেলতে আসে) এর পরিবর্তে 4 ফিরবে । এটিই আমার জাভাস্ক্রিপ্টের উত্তরটি জর্জরিত করে। এটি কি সম্ভব যে ইনটসের পরিবর্তে ডাবলস তৈরি হচ্ছে? (আমার পিএইচপি জানতে খুব দুর্বল))
ডকম্যাক্স

@ ডকম্যাক্স: এক্সপ্রেশনটি প্রসারিত করার একই ফলাফল রয়েছে (497y / 400 সমতুল্য হওয়া উচিত: y / 100 বিয়োগ করা হবে এবং Y / 400 নির্বিশেষে আবার যুক্ত করা হবে)। আমি অনুমান করছি যে পিএইচপি কেবল গোলের পরিবর্তে দশমিকের পরে সমস্ত কিছু কেটে ফেলছে। আমি মডুলোর আগে গোল করে এটি পরীক্ষা করেছি। এটি দুটি অসঙ্গতি সংশোধন করে, তবে 19040229 এখনও একই ফলাফল দেয়। অন্য কোন ধারণা?
রিন্টন

@ প্রিন্টআন আমার মনে হয় না এটি গোলাকার। তারা মৌলিকভাবে পৃথক। উপরে থেকে উদাহরণটি ধরুন (y = 4): 497 * 4/400 = 1988/400 = 4 তবে অন্যদিকে 4 + 4 / 4-4 / 100 + 4/400 = 4 + 1-0 + 0 = 5 । শর্তাবলী / 100 এবং / 400 আপনার গণনায় খুব বেশি ওজন পান যে 2000 এ পৌঁছানো যায় না।
হাওয়ার্ড

2

সি - 129

main(y,m,d,s)
{
    scanf("%04d%02d%02d",&y,&m,&d);
    y-=s=86400;
    d+=y+"-addgbegcfadf"[m];
    m>2?y++:0;
    putchar(48+(d+y/4-y/100+y/400+s+s)%7);
}

কমপক্ষে আমার সিস্টেমে (লিনাক্স x86) বিভাগ কীভাবে শূন্যের দিকে ঘুরবে এগুলি আপত্তিজনক।

যাদু ধ্রুবক, 86400দুটি উদ্দেশ্য করে:

  • সপ্তাহের দিনটিকে প্রভাবিত না করে এটিকে নেতিবাচক করতে বছর থেকে বিয়োগ করুন। এটি এটি তোলে যাতে বিভাগগুলি নীচের পরিবর্তে গোল হয়ে যাবে।
  • দিনের সংখ্যাটি শিফট করুন তাই সোমবার 0 হবে।

এটিও একদিনে সেকেন্ডের সংখ্যা হতে পারে।


y+=m>2;পরিবর্তে ব্যবহার করুন m>2?y++:0;এবং কয়েক বাইট অফ শেভ।
ক্লিয়ারার

2

জাভাস্ক্রিপ্ট, 126 টি অক্ষর

0 = রবিবার সহ সাকামোটোর অ্যালগরিদম ব্যবহার:

prompt().replace(/(....)(..)(..)/,function(_,y,m,d){y-=m<3;alert((+d+y-~(y/4)+~(y/100)-~(y/400)+ +".621462403513"[+m])%7)})

আমার সন্দেহ হয় বিভাগগুলি ভেঙে যেতে পারে তবে এখনই আমি এটি দেখছি না।

সম্পাদনা করুন: বিভাগগুলি উন্নত হয়েছে ( ~~যখন আপনি ঠিক করতে পারেন তখন প্রয়োজন নেই ~)।


2

পাইথন 2 , 83 116 113 109 বাইট

কার্যকরী Sakamoto এর এলগরিদম । গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

সম্পাদনা: আমার এই যুগগুলি আগে ঠিক করা উচিত ছিল। কোডটি আসলে কোডটি ঠিক করার জন্য জোনাথন অ্যালানের পরামর্শ থেকে +2 বাইট by

def w(s):m=int(s[4:6]);y,d=int(s[:4])-(m<3),int(s[6:]);return(y+y/4-y/100+y/400+int('032503514624'[m-1])+d)%7

ইনপুটটি একটি একক স্ট্রিং হওয়া উচিত।
msh210

int('032503514624'[m-1])6 বাঁচায়
জোনাথন অ্যালান

0

পার্ল - 110 বাইট

পার্ল-পি সোর্স.পিএল বা পার্ল-পেপ 'হিয়ার-ইজ-কোড' দিয়ে চালানোর জন্য এখানে একটি সমাধান রয়েছে।

s/((..)(..))(..)(..)/(1+3*$1+$2-2*($1%4+$2%4)-(2<$4?$4+(1&$4&&4-(8&$4)):(2^$4)+(!($3%4)-!-$3+!($2%4)))+$5)%7/e

স্ট্যান্ডিনে কেবল পরীক্ষার কেস-অনুলিপি করুন।

ভেরিয়েবল, স্ট্রিং কনস্ট্যান্ট এবং বিভাগ ছাড়াই এটি একমাত্র কোড বলে মনে হচ্ছে।


0

জাভাস্ক্রিপ্ট (ES6), 73 বাইট (প্রতিযোগী নয়)

d=>(w=new Date(d[s="slice"](0,4),d[s](4,6)-1,d[s](-2)).getDay())-(w?1:-6)

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

f=
d=>(w=new Date(d[s="slice"](0,4),d[s](4,6)-1,d[s](-2)).getDay())-(w?1:-6)
o.innerText=f(i.value="59161021")
oninput=_=>i.value.length==8&&(o.innerText=f(i.value))
<input id=i type=number><pre id=o>


অ-প্রতিযোগিতা কেন?
প্রোগ্রামার

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