প্রদত্ত বছরের প্রতি মাসে শেষ রবিবারটি সন্ধান করুন


21

এফ # সমাধানগুলি 140 টি অক্ষরের অভ্যন্তরে পরিচিত এবং এটি একটি রোসটা কোড সমস্যা।

ইনপুট বছরের জন্য স্টডআউট বা স্ট্রিং ভেরিয়েবলের প্রয়োজনীয় ফলাফল 2014:

2014-01-26 2014-02-23 2014-03-30 2014-04-27 2014-05-25 2014-06-29 2014-07-27 2014-08-31 2014-09-28 2014-10-26 2014-11-30 2014-12-28

যেমন অনুরোধ করা হয়েছিল, 1900 এর জন্য:

1900-01-28 1900-02-25 1900-03-25 1900-04-29 1900-05-27 1900-06-24 1900-07-29 1900-08-26 1900-09-30 1900-10-28 1900-11-25 1900-12-30

এবং 2000:

2000-01-30 2000-02-27 2000-03-26 2000-04-30 2000-05-28 2000-06-25 2000-07-30 2000-08-27 2000-09-24 2000-10-29 2000-11-26 2000-12-31

উত্থাপিত হয়েছে কারণ বেশিরভাগ ভাষায় তারিখগুলি বিশ্রীভাব প্রকাশ করে। তারিখের পাঠাগারগুলিকে অনুমতি দেওয়ার চেয়েও বেশি, আমি সেগুলি দেখতে আশা করি! তবে যদি বেস ভাষার সাথে বাহ্যিক হয় তবে পোস্টের নামে ঘোষণা করুন (উদাঃ সি # + জন স্কিটের নোডাটাইম)।

ব্যাখ্যা:

  • বছরের পরিসর 1900 থেকে 3015
  • গ্রেগরিয়ান ক্যালেন্ডার
  • যদি তা অন্যথায় গুরুত্বপূর্ণ হয় তবে ইউ কে / লন্ডনের পক্ষে প্রচলিত is
  • কমান্ডলাইন সুইচ বা স্টিডিন গ্রহণকারী একটি প্রোগ্রাম ভাল, স্টাডাউটের ফলাফল তৈরি করে
  • বছরের জন্য একটি মান গ্রহণ এবং স্ট্রিং ফিরিয়ে ফাংশনটিও ঠিক।

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


@ Sp3000 - 1752 বিশেষ করে বিশ্রী হতে পারে :-)
খুঁতখুঁতে ossifrage

@ মার্টিনবাটনার: দয়া করে তারিখের গ্রন্থাগারগুলি ব্যবহার করুন, লোকেরা ভাষাগুলির সাথে তারা যেগুলি ব্যবহার করেন তা ঘোষণা করতে জিজ্ঞাসা করার জন্য প্রশ্নটি সম্পাদনা করেছেন।
ফিল এইচ

1
আপনার বৈধ ইনপুট এবং কয়েক বছরের গ্রেগরিয়ান গ্রহণ সম্পর্কে বিবেচনা করতে হবে। (অর্থাত্ ১৯৩০ এর আগে যদি বছরের পরিসীমা অন্তর্ভুক্ত করে তবে গ্রেগরিয়ান ক্যালেন্ডারটি স্থানীয়ভাবে নির্বিশেষে পুরো ব্যাপ্তির জন্য ব্যবহার করা উচিত; বা আউটপুট লোকেলের পরিবর্তে পৃথক হতে পারে; বা আপনার আগে একটি কাট অফের তারিখ দেওয়া উচিত) জুলিয়ান ক্যালেন্ডার ব্যবহার করা উচিত এবং পরিবর্তনটি প্রায় তিন বছর ধরে কেসগুলি পরীক্ষা করা উচিত)।
পিটার টেলর

1
@ স্ক্যোয়ামিশোসিফ্রেজ: আমি এটিকে ১৯০০ এবং গ্রেগরিয়ানের মধ্যে সীমাবদ্ধ রেখেছি, কারণ আমি বরং গবেষণাটি এড়াতে কোনও গবেষণা প্রকল্প এড়াতে চাই ...
ফিল এইচ

1
@ অ্যাডেম: একটি উত্তরের জন্য আপনাকে এত দীর্ঘ অপেক্ষা করানোর জন্য দুঃখিত :) হ্যাঁ সত্যই।
ফিল এইচ

উত্তর:


1

Dyalog APL সঙ্গে ক্যাল থেকে dfns , 19 বাইট

আগের চেয়ে বেশি দেরী!

বছরের জন্য প্রম্পট দেয় , yyyy এমডি ফর্ম্যাটে তারিখের তালিকা ফেরত দেয় ।

⎕{⍺⍵,2↑⊢⌿cal⍺⍵}¨⍳12

সংখ্যার ইনপুট জন্য প্রম্পট এবং যে বাম আর্গুমেন্ট হতে দিন

{... বেনামে ফাংশন (নীচে পাওয়া) প্রতিটি এর জন্য প্রয়োগ করা

⍳12 1 থেকে 12 (মাস) পর্যন্ত সংখ্যাগুলি

উপরোক্ত বেনামে ফাংশনটি নিম্নরূপ:

⍺⍵, বাম এবং ডান যুক্তিগুলি (অর্থাত্ বছর এবং মাস) প্রিপেন্ড করুন

2↑ প্রথম দুটি চরিত্র

⊢⌿ নীচে সবচেয়ে সারি

cal জন্য ক্যালেন্ডার

⍺⍵ বাম যুক্তি এবং ডান যুক্তি (বছর এবং মাস)

অনলাইনে চেষ্টা করুন:

  1. আমদানি এবং এর নির্ভরতাগুলি এখানে ক্লিক করার পরে এই পৃষ্ঠায় ফিরে যান cal

  2. পরীক্ষার কেসগুলি চালাতে এখানে ক্লিক করুন


খুব ভালো. কোনও এপিএল লাইব্রেরির জন্য আশা ছিল যা বুঝতে পারে যে তারিখগুলি কী বোঝায়, তবে ক্যুল যুক্তিযুক্ত!
ফিল এইচ

@ ফিলিলের তারিখ এবং দিন ?
অ্যাডম

1
@ ফিলিচ এখানে মাই সার্ভারের তারিখের নেমস্পেসও রয়েছে।
অ্যাডম

1
@ ফিলাহ এবং ডায়ালগ এপিএল এর ডায়াডিক আদিমরা এবং .নেট তারিখের বিষয়গুলি+ - < = নিয়ে কাজ করুন
অ্যাডম

7

রুবি, 91 + 6 = 97

#!ruby -prdate
$_=(Date.new(y=$_.to_i)...Date.new(y+1)).select(&:sunday?).chunk(&:mon).map{|k,v|v[-1]}*' '

বেশ ভাল কাজ করে। select(&:sunday?)চমত্কার, এবং আশ্চর্যজনকভাবে, *' 'সমস্ত ফর্ম্যাটটি নিজেই করে।


দুর্দান্ত কৌশল! chunkপরিবর্তে ব্যবহার করে আপনি আরও তিনটি অক্ষর সংরক্ষণ করতে পারেন group_by
ক্রিশ্চিয়ান লুপাস্কু

তাই আমি পারি, দুর্দান্ত।
হিস্টোক্র্যাট

6

4.x + এনসিএল, 57 এ বাশ করুন

যদি নতুন লাইনের বিভাজকগুলি ফাঁকের পরিবর্তে ঠিক থাকে তবে আমরা বিবৃতি -nথেকে স্যুইচ এবং ট্রেলিং স্পেসটি সরাতে পারি echo। এবং আমি অনুমান করি যে এটি এখনও শেবাং ছাড়া কাজ করবে, তাই আমি সেটিকেও সরিয়ে দিয়েছি:

for i in {01..12};{ echo "$1-$i-`ncal $i $1|tail -c-3`";}

আসল স্ক্রিপ্ট (by৩ বাইট):

#!/bin/bash
for i in {01..12};{ echo -n "$1-$i-`ncal $i $1|tail -c-3` ";}

ব্যবহার:

$ bash sundays.sh 2014
2014-01-26
2014-02-23
2014-03-30
2014-04-27
2014-05-25
2014-06-29
2014-07-27
2014-08-31
2014-09-28
2014-10-26
2014-11-30
2014-12-28
$

দ্রষ্টব্য: ৪.০০ এর পূর্বে বাশ সংস্করণগুলি কয়েক মাস থেকে শীর্ষস্থানীয় জিরোগুলিকে বাদ দেবে। এই পরিবর্তন করে 5 অক্ষরের যোগে সংশোধন করা যেতে পারে {01..12}থেকে `seq -w 1 12)`। এছাড়াও, tail -c-3এমন কিছু সিস্টেমে সমস্যা দেখা দিতে পারে যেখানে আউটপুটটি ncalপিছনের স্থানগুলি অন্তর্ভুক্ত করে তবে আমি সেগুলির বিষয়ে অবগত নই।


1
পার্থক্যটি কি আসলে বাশ সংস্করণ নয় ডারউইনের সাথে সম্পর্কিত? বাশ ৪.০-তে যুক্ত করা হয়েছিল (যদিও এর মধ্যে কিছু বাগ ছিল)। যাইহোক, 1 টি চরিত্রটি এখনও `…`ভাল অভ্যাসের পরিবর্তে ব্যবহার করে বাঁচা যায় $(…)
manatwork

আহ, হতে পারে। ডারউইন বলছে এটি সংস্করণ ৩.২.৫৩ ব্যবহার করছে; দেবিয়ান 4.1.5 ব্যবহার করছে।
চটজলদি ossifrage

@ মানটওয়ার্ক পিএস ঠিক পেছনের টিকগুলি সম্পর্কে আপনার মন্তব্য লক্ষ্য করেছেন। ভাল ধরা, ধন্যবাদ!
স্কেওমিশ ওসিফরেজ

#!/bin/bashগল্ফিংয়ের উদ্দেশ্যে আপনাকে গণনা করার দরকার নেই বলে আমি মনে করি ।
ডিজিটাল ট্রমা

পছন্দ করুন দেখে মনে হচ্ছে আমি স্পেসগুলির পরিবর্তে লাইন ব্রেকগুলিও ব্যবহার করতে পারি। নিচে 57 এখন বাইট :-)
খুঁতখুঁতে ossifrage

6

আইবিএম ডিএফএসআরটি, 71, 72 বা 80 টি অক্ষরের 11 3 লাইন

 OPTION COPY 
 OUTFIL REPEAT=12,OVERLAY=(5:SEQNUM,2,ZD,5,2,1,8,Y4T,LASTDAYM,TOJUL=Y4T*
 ,9,7,Y4T,ADDDAYS,+1,TOJUL=Y4T,1:16,7,Y4T,PREVDSUN,TOGREG=Y4T(-),12X) 

কলামার আউটপুট ফর্ম্যাট সহ দুটি উত্তর সময়ের পরীক্ষায় দাঁড়িয়েছে। এটি আমাকে একটি "লুপ" দেয়, এর মধ্যে আউটফিল পুনরায় = বর্তমান রেকর্ডটি বহুবার অনুলিপি করে।

মানটি পেতে বিভিন্ন কৌশল, যা দীর্ঘ বলে মনে হয় তবে সংক্ষিপ্ত কারণ আমি পরের বছরে দ্বাদশ রেকর্ডের সাথে মোকাবিলা করার কোনও শর্তহীন পদ্ধতিতে কাজ করতে পারি না, এবং এটি শর্তসাপেক্ষে IFTHEN=(WHEN=, দ্বিগুণ এবং অন্য কিছু সামগ্রী সহ তৈরি করি । দোলাতে লাভ (মাসের প্রথমটি এটি করার সহজতম উপায়) রাউন্ডআউটআউটগুলি (নির্দিষ্ট সিনট্যাক্স প্রয়োজনীয়তা) থেকে খুব বেশি হারাতে হয়।

এটি মাসের শেষ দিনটি খুঁজে পেতে একটি ইনবিল্ট ফাংশন (ডিএফএসআরটি-তে সমস্ত ফাংশন অন্তর্নির্মিত) ব্যবহার করে। তারপরে নিম্নলিখিত মাসের প্রথমটিতে পেতে একদিন (ফাংশন) যুক্ত করুন এবং পূর্বের রবিবারটি পাওয়ার জন্য PREVDSUN ফাংশনটি ব্যবহার করুন (যা সর্বদা আগের মাসের শেষ রবিবার হবে, আগের মতো)।

বছরটিকে (ইনপুট) বৈধ তারিখে পরিণত করার সময়, মাসের জন্য একটি দুই-অঙ্কের ক্রম সংখ্যা ব্যবহৃত হয় এবং সেই মানটিও সেই দিনের জন্য অনুলিপি করা হয়, যেহেতু প্রারম্ভিক বিন্দু যতক্ষণ বৈধ ততক্ষণ আমাদের বিবেচনা করে না does শুরুতে মাসের শেষ দিন পরে: এর 5,2চেয়ে সংক্ষিপ্ত C'01'

বিস্তারিত এখানে:

বিকল্প কপি - আউটপুট থেকে ইনপুট ফাইল অনুলিপি করুন

আউটফিল - বিভিন্ন নির্বাচন এবং ফর্ম্যাট সহ একাধিক আউটপুট ফাইলগুলিকে মঞ্জুরি দেওয়ার জন্য, বিন্যাসিত প্রতিবেদন তৈরি করা। সংক্ষিপ্ত পছন্দ INRECহিসাবে ব্যবহার কারণ REPEAT=

পুনরায় = 12 - প্রতিটি রেকর্ডের 12 অনুলিপি তৈরি করুন। এই উদাহরণে, SEQNUM এর কারণে কেবলমাত্র একটি ইনপুট রেকর্ড (পূর্ববর্তী সংস্করণের বিপরীতে) থাকতে পারে।

5: - রেকর্ডের 5 কলামে শুরু করুন।

SEQNUM, 2, জেডডি - সিকোয়েন্স নম্বর, এক, দুটি অঙ্ক থেকে শুরু করতে ডিফল্ট, "জোনেড দশমিক" (স্বাক্ষরযুক্ত, যা তারা হবে, অক্ষর হিসাবে একই হবে)।

1,8 - 8 টি বর্তমান অবস্থানের দৈর্ঘ্যের জন্য বাইট 1 টি (9)। এটি কারণ যে ওয়াই 4 টি 8 টি দেখতে হবে অন্যথায় একটি পৃথক তারিখের ফর্ম্যাট ব্যবহার করা হবে।

ওয়াই 4 টি - সিসিআইএমডিডি-ফর্ম্যাট তারিখ (তত্ক্ষণাত 8 এর সামনে এর কারণে)।

লাস্টডেম - মাসের শেষ দিন (সপ্তাহ, ত্রৈমাসিক এবং বছরেরও সম্ভবত)।

তোজুল = - তারিখ ফাংশনের জন্য আউটপুট তারিখ-রূপান্তর (তোজুল টোগ্রেগের চেয়ে একটি অক্ষর কম)

9,7 - এখন এটি 7 দীর্ঘ, ওয়াই 4 টি সিসিওয়াইডিডিডি হতে চলেছে।

ADDDAYS - বেশ কয়েকটি দিন যুক্ত করে, পরবর্তী মাস / বছরে চলে গেলে স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয় (এটিও ADDMONS এবং ADDYEARS হতে পারে)

প্রিভিডসুন - জুলিয়ান তারিখটি এসেছিল, পূর্ববর্তী রবিবারটি অবস্থিত, "-" পৃথককারী সহ সঠিক আউটপুট ফর্ম্যাটটি পেতে টোগ্রেগ (আপনার বিভাজকের মতো কিছু হতে পারে)

12 এক্স - ফাঁকা বিষয়বস্তু পরিষ্কার করার জন্য যা আমাদের এটি এত অল্প সময়ে এটি করার অনুমতি দিয়েছে

2014 এর জন্য উপরের থেকে আউটপুটটি হ'ল:

2014-01-26
2014-02-23
2014-03-30
2014-04-27
2014-05-25
2014-06-29
2014-07-27
2014-08-31
2014-09-28
2014-10-26
2014-11-23
2014-12-28

SORT কে কী করতে হবে তা বলার জন্য কিছু দরকার। কোনও ডিফল্ট নেই। OPTION COPYসবচেয়ে সংক্ষিপ্ত, SORT FIELDS=COPYসমান তবে লম্বা।

এই বার নিজেই কাজটি হয়েছে OUTFIL(রিপাইটি ব্যবহারের অনুমতি দেওয়ার জন্য)। কাজের কোডটি তর্কযোগ্যভাবে 160 (2 * 80), 144 (2 * 72), 140 (72 + 69), বা 138 (70 + 68) (নেতৃস্থানীয় ফাঁকা বাদ দেওয়া, জোর করে চালিয়ে যাওয়া এবং ফাঁকা ফাঁকা স্থানগুলি বাদ দিয়ে) is

প্রদত্ত যে প্রাপক তারা কী করছে তা জানতে হবে, আমি মনে করি যে আমি বলতে পারি যে ডিএফএসআরটি কোডটি ১৯০০ সাল থেকে যে কোনও বছরের জন্য প্রতিমাসের শেষ রবিবারের তালিকা তৈরি করতে (যে বছর 0001 থেকে চলবে, তবে আমি গবেষণাটিকে এড়িয়ে চলেছি) ভাল) 9999 অবধি (যদিও ডিএফএসওআরটি 9999 সাল পর্যন্ত সমর্থন করে তবে পূর্ববর্তী সমাধানটি 9999 সালে কাজ করবে না যেহেতু 12 তম তারিখটি পরের বছরে যায়) টুইট করা যেতে পারে।

কোডটি এত দীর্ঘ কেন, যদি বিশেষত অ্যাপ্লিকাল ইনবিল্ট-ফাংশনগুলি থাকে?

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

এখন আমাদের জুলিয়ান ডেট হয়েছে .... টিবিসি?


 OPTION COPY 
 INREC OVERLAY=(1,4,C'0201',1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8*
 ,94:C'1',89:1,4,ZD,ADD,+1,ZD,LENGTH=4,14:C'3',22:C'4',30:C'5',38:C'6',*
 46:C'7',54:C'8',62:C'9',69:C'10',77:C'11',85:C'12',127:X,89,8,Y4T,PREV*
 DSUN,TOGREG=Y4T(-),116:X,81,8,Y4T,PREVDSUN,TOGREG=Y4T(-),105:X,73,8,Y4*
 T,PREVDSUN,TOGREG=Y4T(-),94:X,65,8,Y4T,PREVDSUN,TOGREG=Y4T(-),83:X,57,*
 8,Y4T,PREVDSUN,TOGREG=Y4T(-),72:X,49,8,Y4T,PREVDSUN,TOGREG=Y4T(-),61:X*
 ,41,8,Y4T,PREVDSUN,TOGREG=Y4T(-),50:X,33,8,Y4T,PREVDSUN,TOGREG=Y4T(-),*
 39:X,25,8,Y4T,PREVDSUN,TOGREG=Y4T(-),28:X,17,8,Y4T,PREVDSUN,TOGREG=Y4T*
 (-),17:X,09,8,Y4T,PREVDSUN,TOGREG=Y4T(-),1:1,8,Y4T,PREVDSUN,TOGREG=Y4T*
 (-),11:X,18,120,6X) 

কিছু দরকার JCL

//LASTSUNG EXEC PGM=SORT 
//SYSOUT   DD SYSOUT=* 
//SORTOUT  DD SYSOUT=* 
//SYSIN    DD * 

এবং একটি ইনপুট ফাইল (জেসিএল এর অন্য একটি লাইন এবং তিনটি ডাটা স্ট্রিম আইটেম):

//SORTIN DD *
2014 
1900 
2000 

উত্পাদন:

2014-01-26 2014-02-23 2014-03-30 2014-04-27 2014-05-25 2014-06-29 2014-07-27 2014-08-31 2014-09-28 2014-10-26 2014-11-30 2014-12-28
1900-01-28 1900-02-25 1900-03-25 1900-04-29 1900-05-27 1900-06-24 1900-07-29 1900-08-26 1900-09-30 1900-10-28 1900-11-25 1900-12-30
2000-01-30 2000-02-27 2000-03-26 2000-04-30 2000-05-28 2000-06-25 2000-07-30 2000-08-27 2000-09-24 2000-10-29 2000-11-26 2000-12-31

প্রকৃতপক্ষে 9999 সাল পর্যন্ত কাজ করবে।

ডিএফএসএআরটি হ'ল আইবিএমের মেইনফ্রেম বাছাইয়ের পণ্য। ডেটা ম্যানিপুলেটেড করা যায়, তবে যেহেতু বাছাই কী এবং প্রকারগুলি প্রায়শই বড় এবং দীর্ঘস্থায়ী হয়, তাই ডিএফএসএআরটি নিয়ন্ত্রণ কার্ডগুলিতে কোনও লুপিং কনস্ট্রাক্ট থাকে না, তাই আমরা কোনও লুপে একটি SORT রাখতে পারি না। গল্ফের মতো কাজের জন্য জিনিসগুলিকে কিছুটা দীর্ঘায়িত করে তোলে।

কেন উত্তর পোস্ট করবেন, কারণ ডিএফএসওআরটির একটি PREVDdayফাংশন রয়েছে। তাই এক মাসে শেষ রবিবার সহজ। এটি পরের রবিবার (PREVDSUN) পরবর্তী মাসের প্রথম দিন পর্যন্ত।

এটি একটি "অপরেন্ড" (ওভারলি) এর মধ্যে করাও মজাদার ছিল, কিছুটা এর মধ্যে sprintfবা এর মতোই কিছু করার মতো।

এখানে এটি নিয়ন্ত্রিত:

 OPTION COPY 

 INREC OVERLAY=(1,4,C'0201',1,8,1,8,1,8,1,8,1,8,1,8, 
         1,8,1,8,1,8,1,8, 
         1,8,94:C'1',89:1,4,ZD,ADD,+1,ZD,LENGTH=4, 
         14:C'3',22:C'4',30:C'5',38:C'6',46:C'7',54:C'8',
         62:C'9',69:C'10',77:C'11',85:C'12', 
        127:X,89,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
        116:X,81,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
        105:X,73,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         94:X,65,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         83:X,57,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         72:X,49,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         61:X,41,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         50:X,33,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         39:X,25,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         28:X,17,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         17:X,09,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
          1:1,8,Y4T,PREVDSUN,TOGREG=Y4T(-), 
         11:X,18,120,6X) 

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

প্রতিটি রেকর্ডের জন্য INREC প্রক্রিয়া করা হয়।

ওভারলে একটি বিদ্যমান রেকর্ডের সামগ্রী পরিবর্তন করার অনুমতি দেয়। প্রক্রিয়াটিতে রেকর্ডটি যদি তার দৈর্ঘ্যের বাইরেও প্রসারিত হয়, তবে এটি কোনও সমস্যা নয়।

1,4 বছর আসছে। এটির সাথে 020 এর আক্ষরিক সংযোজন রয়েছে এবং তারপরে ক্রমাগত 1,8 টি এটিকে 11 বার পুনরাবৃত্তি করে one৯ বাইটের একটি দীর্ঘ চক দিতে,

বর্ধিত বর্তমান রেকর্ডের দ্বাদশতম বছর এটিতে 1 যুক্ত হয় এবং এর মাসটি 1 (জানুয়ারী) এ পরিণত হয়।

বাকি 10 মাস 3 থেকে 11 এর মধ্যে পরিবর্তন করা হয়।

তারপরে 12 টি রয়েছে, এই ধরণের জিনিসটির বিপরীত ক্রমে (ওভারলাইয়ের কারণে):

127:X,89,8,Y4T,PREVDSUN,TOGREG=Y4T(-),

এন: রেকর্ডে একটি কলাম নম্বর। এক্স একটি ফাঁকা সন্নিবেশ করায়। 89,8 সেই কলাম / দৈর্ঘ্য থেকে ডেটা নেয়, ওয়াই 4 টি এটিকে সিসিওয়াইএমএমডিডি তারিখ হিসাবে বিবেচনা করে, প্রিভিডিএসএম আগের রবিবারে কাজ করে, টগ্রেগ = ওয়াই 4 টি (-) এটিকে গ্রেগরিয়ান সিসিওয়াই-এমএম-ডিডি তারিখ হিসাবে প্রকাশ করে।

কারণ আপনি যদি আবর্জনা পেয়ে থাকেন তবে যদি ওভারলাইয়ের কোনও নির্দিষ্ট অংশের উত্স এবং লক্ষ্যটি ধ্বংসাত্মকভাবে ওভারল্যাপ হয় তবে চূড়ান্ত পুনরুদ্ধার 11:X,18,120,6X)এবং কিছুটা গণ্ডগোল ।

ম্যানুয়ালগুলি এবং কাগজপত্রগুলি এখানে পাওয়া যাবে: http://www-01.ibm.com/support/docview.wss?uid=isg3T7000080 , এবং 900+ পৃষ্ঠার ডিএফএসওআরটি অ্যাপ্লিকেশন প্রোগ্রামিং গাইড অন্তর্ভুক্ত রয়েছে।

সমস্ত আইবিএম পণ্যগুলির মতো সমস্ত ম্যানুয়াল বিনামূল্যে জন্য পাওয়া যায় (খুব ব্যয়বহুল একটি অল্প পরিমাণ ব্যতীত যা বিশ্বের খুব কম সংখ্যক লোক এমনকি বোঝার ভান করে)।

সমস্ত ডিএফএসএআরটি নিয়ন্ত্রণ কার্ড অবশ্যই একটি ফাঁকা দিয়ে শুরু করা উচিত start 72 কলামটি কেবল ধারাবাহিকতার জন্য ব্যবহৃত হয় (কোনও শূন্যস্থানই এটি করবে তবে * প্রচলিত) is 72 কলামের পরে সিকোয়েন্স নম্বর অঞ্চলটি অনুসরণ করা হবে যা প্রতিটি রেকর্ডকে 80 বাইট করে ignored

সমাধান আসতে পারে আরও কয়েক দম্পতি, সম্ভবত।


5

বাশ, 63 বাইট

for i in {01..12};{  date -v30d -v${i}m  -v2014y  -vsun +%Y-%m-%d;}

আউটপুট:

2014-01-26
2014-02-23
2014-03-30
2014-04-27
2014-05-25
2014-06-29
2014-07-27
2014-08-24
2014-09-28
2014-10-26 
2014-11-30
2014-12-28

for i in {1..12};{ date -v30d -v${i}m -v$1y -v0w +%Y-%m-%d;}- 60 বাইট
ডিজিটাল ট্রমা

-vপরম dateথেকে বিএসডি তারিখ নির্দিষ্ট। সুতরাং এটি ওএসএক্সে কাজ করে তবে বেশিরভাগ লিনাক্সে নয় - সম্ভবত এটি উত্তরে বলা উচিত।
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা, ম্যাক এবং আমার লিনাক্সে কাজ করে।
michael501

4

পাইথন 2 - 189 বাইট

y=input()
for m in range(12):
 d=[31-(1322>>m&1),28+(y%400<1or 1>y%4<y%100)][m==1];Y=y-(m<2);Z=Y%100;C=Y/100
 while(d+13*((m-2)%12+4)/5+Z+Z/4+C/4-2*C)%7-1:d-=1
 print"%d-%02d-%d"%(y,m+1,d),

STDIN এর মাধ্যমে তারিখটি প্রবেশ করান।

এখনও আরও অনেক গল্ফিং করা যায়। প্রোগ্রামটি কেবল মজাদার জন্য কিছুটা ওভারবোর্ডে গেছে:

  • কোনও আমদানি নেই, বিশেষত কোনও বিল্ট-ইন ডেট ফাংশন ব্যবহার না করা
  • সপ্তাহের দিন গণনার জন্য জেলারের সমষ্টি ব্যবহার করে

মন্তব্য

  • 1322 হ'ল একটি ফেব্রুয়ারী মাসে 30 বা 31 দিন রয়েছে কিনা তা নির্ধারণের জন্য একটি যাদু লুক টেবিল
  • zfillইনপুট ব্যাপ্তির কারণে বছরের জন্য কোনও প্রয়োজন নেই , না যে দিনগুলি সর্বদা 20 এর বেশি হবে

পাইথন 2 - 106 বাইট

মজাদার নয় এমন সমাধান:

from calendar import*
y=input();m=1
while m<13:w,n=monthrange(y,m);print"%d-%02d-%d"%(y,m,n-(n+w)%7),;m+=1

calendar.monthrangeদুটি সংখ্যা ফেরত দেয়: সপ্তাহের দিনটি মাস শুরু হয় ( w) এবং মাসে দিনগুলি (n ) । ক্যাচের কারণে সমাধানটি সামান্য পাল্টে দেওয়া - সপ্তাহের দিনটি সোমবারের জন্য 0 থেকে শুরু হয় , রবিবার নয়! যাইহোক, এটি সত্য দ্বারা অফসেট হয়n এটি 1-ভিত্তিক ।


1
একটি খুব নির্বোধ পাইথ উত্তর:$from calendar import monthrange as gt$V12AGH>QhN%"%d-%02d-%d"(QhN-H%+GH7
FryAmTheEggman

3

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

স্থির টাইমজোন সমস্যাগুলি সম্পাদনা করুন পুনরাবৃত্তি করা হলে সংক্ষিপ্ত হতে পারে। হতে পারে.

F=y=>{
  for(n=i=o=[];!o[11];)
    d=new Date(Date.UTC(y,0,++i)),m=d.getMonth(),
    d.getDay()||(m!=n&&o.push(p.toISOString().slice(0,10)),p=d,n=m);
  return o.join(' ')
}

আপনি ব্যবহার করতে পারেন new Date(y,0,++i,9)। এছাড়াও, এটি 2100 এবং তদূর্ধের লিপ বছরের জন্য ব্যর্থ হয় কারণ জেএসের সেই লিপ বছরগুলি সম্পর্কে কোনও তথ্য নেই এবং এইভাবে Feb 292100 বা তদুর্ধের জন্য লিপ বছরে মোটেই নেই ।
অপ্টিমাইজার

@ অপ্টিমাইজার এটি জেএস নয়: 2100,2200,2300 লিপ বছর নয়। 2014 একটি লিপ বছর এবং জেএস জানে। 9 ঘন্টা ব্যবহারের জন্য, আমি যাচাই করতে পারছি না তবে আমি মনে করি যে আপনি যদি মেলবোর্নে উদাহরণস্বরূপ হন তবে কাজ করবে না ...
edc65

আহ .. কখনই জানতেন না আমরা প্রতি 400 বছরে 3 দিন ড্রপ করি। 9 সম্পর্কে - আমি +1100 (মেলবোর্ন) এর -1000 (হাওয়াই) থেকে আমার সময় অঞ্চল পরিবর্তন new Date(2014,0,26,9)রবিবার সঠিক দান ছিল ISOসেইসাথে স্ট্রিং getDay()হিসাবে 0
অপ্টিমাইজার

3

জাভাস্ক্রিপ্ট, ES6, 222 219 199 বাইট

রোসটা উইকিতে আমি কোনও জাভাস্ক্রিপ্টের উত্তর দেখতে পাইনি।

এখানে আমরা যাচ্ছি:

S=Y=>{for(l=[],p=new Date(Y,i=0);i<365+!(Y%4);)if(!(d=new Date(Y,0,++i,9)).getDay()){p.getMonth()-d.getMonth()&&l.push(p);p=new Date(d)}return[...l,p].map(x=>x.toISOString().split("T")[0]).join(" ")}

এটি একটি ফাংশন তৈরি করে S যা পছন্দসই আউটপুট সহ একটি স্ট্রিং প্রদান করে। ফাংশনটিও লিপ বছরগুলি যত্ন করে।

ES6 এর কারণে এটি কেবল সর্বশেষতম ফায়ারফক্সে কাজ করে।

টিপসটির জন্য অ্যাপসিলারদের ধন্যবাদ যা এটি 200 বাইটে হ্রাস পেয়েছে

স্ট্যাক স্নিপেট হিসাবে নীচে অবরুদ্ধ সংস্করণটি সন্ধান করুন যা আপনি নিজে এখানে চালাতে পারবেন:

S=Y=>{
  for(l=[],p=new Date(Y,i=0);i<365+!(Y%4);)
    if(!(d=new Date(Y,0,++i,9)).getDay()){
      p.getMonth()-d.getMonth()&&l.push(p);
      p=new Date(d)
    }
  return[...l,p].map(x=>x.toISOString().split("T")[0]).join(" ")
}

alert(S(parseInt(prompt())))


আপনি পার্সেন্টের চেয়ে + প্রম্পট () ব্যবহার করতে পারেন এবং কিছু বাইট শেভ করতে পারেন
জ্যাকব

@ জ্যাকব প্রম্পটটি বাইট কাউন্টে যোগ করা হয়নি।
অপ্টিমাইজার

ওআইসি। আমার প্রশ্নটি পড়া উচিত ছিল ...
জ্যাকব

@ অ্যাপসিলার্স একটি টন ধন্যবাদ! আপনার টিপের উপর ভিত্তি করে সমস্যাটি স্থির করে এটিকে অনেক হ্রাস করেছে।
অপ্টিমাইজার

ইনপুট 2100আউটপুট 2100-01-31 2100-02-28 2100-03-28 2100-04-25 2100-05-30 2100-06-27 2100-07-25 2100-08-29 2100-09-26 2100-10-31 2100-11-28 2100-12-26 2101-01-02ভুল।
কিওয়ারটি

3

রিবোল - 120 116 80 79 76

d: do join"1-1-"input print collect[for m 2 13 1[d/2: m keep d - d/weekday]]


অবহেলিত + কিছু টিকা:

d: do join "1-1-" input         ;; golfy way to create Rebol date! datatype 1-Jan-(year)

print collect [
    for m 2 13 1 [              ;; loop thru months 2 to 13!
        d/2: m                  ;; move to (1st of) next month
        keep d - d/weekday      ;; collect/keep last sunday of month
    ]
]

রেবোল কনসোলে রবিবার গণনার উদাহরণ:

>> ; get last sunday of Jan 2014

>> d: 1-1-2014
== 1-Jan-2014

>> d/month: d/month + 1
== 2

>> d
== 1-Feb-2014

>> d/weekday
== 6

>> d - d/weekday
== 26-Jan-2014

>> ; above is last sunday of Jan 2014
>> ; and when pass end of year (ie. month 13!)

>> d/month: 13
== 13

>> d
== 1-Jan-2015

সম্ভাব্য 87: ডি: 1-1-1 ডি / বছর: ইনপুট প্রিন্ট সংগ্রহ করুন [পুনরাবৃত্তি এম 12 [ডি / মাস: এম + 1 রাখুন ডি - ডি / সপ্তাহের দিন]]
rgchris

@ আরজিক্রিস ধন্যবাদ ক্রিসকে। এটির আরও 7 টি অক্ষর শেভ করতে সক্ষম হয়েছিল।
draegtun

নিস !! এটা খারাপ, কিন্তু কখনই তেমন মনে জন্য একটি শর্টকাট হচ্ছে।
rgchris

2

সিজেম, 122 102 বাইট

30li:X400%){[1387Yb30f+~28I!I4%!I100%e&|g+\]W%{\_2$>7*-\7%7\m1$+}/}fI;]12/W=12,{101+s1>}%]z{X+W%'-*S}/

এটি তারিখ লাইব্রেরির কোনও ফর্ম ব্যবহার করে না। এটি এখনও অনেক গল্ফ করা যেতে পারে, আমি মনে করি।

এটি এখানে পরীক্ষা করুন।


3
আমি এত দর্শনীয়ভাবে স্টোক করেছি যে সিজেএম উত্তরটি একবারের জন্য কোড-গল্ফ চ্যালেঞ্জের শীর্ষ উত্তর নয়। আমি সুখী হয়ে মারা যেতে পারি .. আজকের দিনটি খুব ভাল (যতক্ষণ না এটি 6 বাইটে নেমে আসে, স্পষ্টতই)
ব্র্যান্ডন

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

1

আর, 128 অক্ষর

P=paste;f=format;a=strptime(P(1:366,scan()),"%j %Y");cat(sort(sapply(split(a,f(a,"%B")),function(x)P(tail(x[f(x,"%u")==7],1)))))

লাইন বিরতি সহ:

P=paste
f=format
a=strptime(P(1:366,scan()),"%j %Y")
cat(sort(sapply(split(a,f(a,"%B")),function(x)P(tail(x[f(x,"%u")==7],1)))))

1

সি # 255

Ungolfed

static void Main(string[] a)
    {
        int y = Int32.Parse(Console.ReadLine());
        DateTime d = new DateTime(y, 1, 1);
        while (d.Year == y)
        {
            if (d.DayOfWeek == DayOfWeek.Sunday && d.Day>(DateTime.DaysInMonth(y,d.Month)-7))
                Console.WriteLine(d.ToShortDateString());
            d = d.AddDays(1);
        }
        Console.ReadKey();
    }

সম্পাদনা করুন: শুধুমাত্র গত রবিবার প্রিন্ট করতে পরিবর্তন করা হয়েছে :)


প্রয়োজনীয় আউটপুট ফর্ম্যাট নয়। + এটি কোড গল্ফ
edc65

1

প্রশ্ন, 67

{({{1<>x mod 7}-[;1]/x}')14h$1_til[13]+13h$"D"$(($)x),".01.01"}

এই কিউ জন্য কোন তারিখ লাইব্রেরি ব্যবহারযোগ্য?
ফিল এইচ

1

"ওহ, না, ওকে আবার!"

জাভা - 259 246 বাইট

void g(int y){for(int i=;i<12;i++){GregorianCalendar c=new GregorianCalendar(y,i,0);c.set(c.DAY_OF_WEEK,c.SUNDAY);c.set(c.DAY_OF_WEEK_IN_MONTH,-1);System.out.print(y+"-"+String.format("%02d",(c.get(c.MONTH)+1))+"-"+(c.get(c.DAY_OF_MONTH))+" ");}}

অবরুদ্ধ সংস্করণ:

void g(int y){
    for (int i = 0; i < 12;i++) {
        GregorianCalendar c = new GregorianCalendar(y, i, 0);
        c.set(c.DAY_OF_WEEK, c.SUNDAY);
        c.set(c.DAY_OF_WEEK_IN_MONTH, -1);
        System.out.print(y+"-"+String.format("%02d",(c.get(c.MONTH)+1))+"-"+(c.get(c.DAY_OF_MONTH))+" ");
    }
}

ব্যবহার:

import java.util.GregorianCalendar;
import java.util.Scanner;

public class LastSundayInYear {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Year?");
        int year = scanner.nextInt();
        LastSundayInYear sunday = new LastSundayInYear();
        sunday.g(year); 
    }

    void g(int y){
        for (int i = -1; ++i < 12;) {
            GregorianCalendar c = new GregorianCalendar(y, i, 0);
            c.set(c.DAY_OF_WEEK, c.SUNDAY);
            c.set(c.DAY_OF_WEEK_IN_MONTH, -1);
            System.out.print(y+"-"+String.format("%02d",(c.get(c.MONTH)+1))+"-"+(c.get(c.DAY_OF_MONTH))+" ");
        }
    }
}

আউটপুট:

2014-01-26 2014-02-23 2014-03-30 2014-04-27 2014-05-25 2014-06-29 2014-07-27 2014-08-31 2014-09-28 2014-10-26 2014-11-30 2014-12-28

তবুও আরেকটি "আসুন কেবল জাতির জন্য একটি জাভা জবাব দিন" উত্তর। আচ্ছা ভালো. তবে, অন্ততপক্ষে, যেহেতু আপনি আমার উত্তরের এই পর্যায়ে পৌঁছানোর জন্য বিরক্ত করেছিলেন, তাই আমি আপনাকে আরও কিছুটা বিরক্ত করার চেষ্টা করব এবং আমার যুক্তি ব্যাখ্যা করার চেষ্টা করব।

পদ্ধতিটি gপছন্দসই বছর পায় এবং, প্রতিটি মাসের জন্য, একটি GregorianCalendarঅবজেক্ট তৈরি করে (মাসগুলি 0 থেকে 11 পর্যন্ত যায়)। তারপরে, প্রথমটি c.setসপ্তাহের দিনটিকে রবিবার হিসাবে সেট করে এবং দ্বিতীয়টি ঘোষণা করে যে আমরা মাসের শেষ সপ্তাহটি চাই - যেমনটি সরকারী ডকুমেন্টেশনে দেখা যায় । System.out.printlnযে রবিবার তারিখ আউট প্রিন্ট (যদি আমরা এই অধিকার করছিলে, বছর হিসাবে প্রিন্ট করা হবে c.get(c.YEAR), কিন্তু ব্যবহার yআবার 13 টি অক্ষর বন্ধ shaves), মাস সেপ্টেম্বর জানুয়ারি থেকে একটি শূন্য যোগ করার জন্য ফরম্যাট করা হয়েছে (এবং মান বৃদ্ধি করা হয় কারণ, ভাল, এখানে মাসগুলি 0-10 প্রতিনিধিত্ব করে) এবং গত রবিবারের দিনটি মুদ্রিত হয়। এবং এই পদ্ধতিটি অন্যান্য এগার মাসের জন্য পুনরাবৃত্তি করা হয়।


0

সি #, 212 , 237

string x(int y){var s="";var t="";var d=new DateTime(y,1,1);for(;;){if(d.Year!=y){return s;}t=(d.DayOfWeek==DayOfWeek.Sunday)?t=string.Format("{0}-{1}-{2} ",d.Year,d.Month,d.Day):t;s=(d.AddDays(1).Month!=d.Month)?s+=t:s;d=d.AddDays(1);}}

লাইন বিরতি সঙ্গে

string x(int y)
    {
        var s = "";
        var t = "";
        var d = new DateTime(y,1,1);
        for (;;)
        {
            if (d.Year != y) {
                return s;
            }
            t = (d.DayOfWeek == DayOfWeek.Sunday) ? t = string.Format("{0}-{1}-{2} ", d.Year, d.Month, d.Day) : t;
            s=(d.AddDays(1).Month!=d.Month)?s+=t:s;
            d=d.AddDays(1);
        }
    }

2014 এর আউটপুট

"2015-1-25 2015-2-22 2015-3-29 2015-4-26 2015-5-31 2015-6-28 2015-7-26 2015-8-30 2015-9-27 2015-10-25 2015-11-29 2015-12-27"

প্রয়োজনীয় আউটপুট ফর্ম্যাটটি নয়
edc65

সেখানে, স্থির। উত্তম?
ড্যারেন ব্রেন

0

সি # 171

একটি স্ট্রিং ফিরে ফাংশন।

string S(int y){var r="";for(int m=1;m<13;++m){var d=new System.DateTime(y,1,1).AddMonths(m).AddDays(-1);r+=y+string.Format("-{0:00}-{1} ",m,d.Day-d.DayOfWeek);}return r;}

Ungolfed

string S(int y)
{
    var r="";
    for (int m=1;m<13;++m)
    {
        var d = new System.DateTime(y, 1, 1).AddMonths(m).AddDays(-1);
        r += y + string.Format("-{0:00}-{1} ", m, d.Day - d.DayOfWeek);
    }
    return r;
}

0

সি # 194

লিনক ব্যবহার:

string d(int y){return string.Join(" ",Enumerable.Range(1,12).Select(m=>new DateTime(y,m,DateTime.DaysInMonth(y,m))).Select(d=>d.AddDays(-(int)d.DayOfWeek)).Select(d=>d.ToString("yyy-MM-dd")));}

Ungolfed

string d(int y)
{
    return string.Join(" ",Enumerable.Range(1,12)
        .Select(m => new DateTime(y, m, DateTime.DaysInMonth(y, m)))
        .Select(d => d.AddDays(-(int)d.DayOfWeek))
        .Select(d => d.ToString("yyy-MM-dd")));
}

আউটপুট

2013-01-27 2013-02-24 2013-03-31 2013-04-28 2013-05-26 2013-06-30 2013-07-28 2013-08-25 2013-09-29 2013-10-27 2013-11-24 2013-12-29

0

গণিত - 171

একটি বেনামি কার্যক্রমে মোড়ানো, স্ট্রিংটি দেয়

StringJoin[Last@#~DateString~{"Year","-","Month","-","Day"," "}&/@GatherBy[Select[DateRange[DateObject[{#}],DateObject[{#+1}]],DayName@#==Sunday&],DateValue[#,"Month"]&]]&

প্রথম গণিত গল্ফ। আমার মনে হচ্ছে এটি যথেষ্ট পরিমাণে হ্রাস পেতে পারে।


0

ভিবি-192

Function z(y)
For i = 1 To 11
a = 0
s = IIf(i <> 11, DateSerial(y, i + 1, 1), DateSerial(y + 1, 1, 1))
While Weekday(s - a) <> 1
a = a + 1
Wend
r = r + Str(s - a) + " "
Next
z = r
End Function

খারাপ হতে পারে ^^

আমার দ্বিতীয় এবং শেষ এন্ট্রি (মনে হয় না যে আমি এটি আরও ছোট করে তুলতে পারি)

142

Function z(y)
Dim m(12)
For i = 1 To 366
s = DateSerial(y, 1, 1) + i
If Weekday(s) = 1 Then m(Month(s)) = s
Next
z = Join(m, " ")
End Function

0

রুবি 76

কমান্ডলাইন প্যারামিটার ব্যবহার করে ruby sundays.rb 1900। তারিখের পাঠাগারটি ব্যবহার করে।

require'date';puts (1..12).map{|m|d=Date.new($*[0].to_i,m,-1);d-d.wday}*" "
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.