একটি তারিখ সরল করুন


9

এটি ভগ্নাংশগুলি সরলকরণের সাথে সমান, তবে তারিখগুলির সাথে!

আপনার প্রোগ্রামের ইনপুট অবশ্যই ফর্মের হতে হবে mm/dd উদাহরণস্বরূপ

3/4 //March 4
12/15 //December 15
1/1 // January 1

আমরা ধরে নিই যে ইনপুটটি বৈধ হবে যে মাসে তাদের মধ্যে এই সংখ্যাগুলি থাকে:

January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31

আপনার প্রোগ্রামটির কাজটি ধরে নেওয়া বৈধ ইনপুট নেওয়া এবং পুনরাবৃত্তভাবে (বা পুনরাবৃত্তভাবে) তারিখটি সহজ করা এবং প্রতিটি পুনরাবৃত্তিতে (0 তম সহ) উপরের লিখিত হিসাবে মাসের পুরো নাম দিয়ে তারিখ আউটপুট করা।

উদাহরণ স্বরূপ:

এর একটি ইনপুট দেওয়া হয়েছে:

12/18

আউটপুট হবে

December 18
June 9
February 3

ইতিমধ্যে সরলীকৃত এমন একটি ইনপুট কেবল নিজেকেই আউটপুট দেয়:

11/17

আউটপুট:

November 17

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

সরলিকৃত তারিখটি একটি অবৈধ তারিখ উত্পন্ন করে এমন কোনও ক্ষেত্রে আমি ভাবতে পারি না তবে আপনি যদি কখনও পথে অবৈধ তারিখ উত্পন্ন করেন তবে আউটপুট:

Illegal Date

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

অ্যালগরিদম:

প্রতিটি পুনরাবৃত্তিতে আপনি ক্ষুদ্রতম সংখ্যার দ্বারা ভাগ করেন যা সংখ্যক এবং ডিনোমিনেটরকে ভাগ করে।

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

আমি আশা করি এটি পরিস্কার।

যে কোনও ভাষা অনুমোদিত। এটি কোড গল্ফ, সংক্ষিপ্ততম কোড জয়!


আমি উত্তর পোস্ট করার সময় প্রশ্নটি বন্ধ ছিল। দোহ!
t-clausen.dk

@ t-clausen.dk চ্যালেঞ্জটি আবার খোলা হয়েছে।
অ্যাডমবর্কবার্ক

কেন থেকে 12/18থেকে 6/9এবং 4/6(আমি সব পুনরাবৃত্তির জগাখিচুড়ি পাবেন না ... যখন আমি একটি ভগ্নাংশ আমি immedialtely পেয়েছিলাম ফলে সরলীকৃত মান প্রক্রিয়া সহজ)?
edc65

উত্তর:


2

জেলি , 59 বাইট

ṣ”/VµÆDf/2ị:@µÐĿị1¦€“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»ṣ⁶¤j€⁶j⁷

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

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

ṣ”/VµÆDf/2ị:@µÐĿị1¦€“...»ṣ⁶¤j€⁶j⁷  Main link. Argument: mm/dd

ṣ”/                                Split at slashes.
   V                               Eval each chunk, yielding [m, d] (integers).
    µ                              Begin a new, monadic chain. Argument: [m, d]
             µÐĿ                   Execute the chain to the left until the results
                                   are no longer unique. Yield the list of all
                                   intermediate results.
     ÆD                              Compute the divisors of each number.
       f/                            Intersect them.
         2ị                          Select the one at index 2. If there is only
                                     one divisor, ị wraps around and selects 1.
           :@                        Divide [m, d] by this common divisor.
                        ¤            Combine the links to the left into a chain.
                 “...»                 Yield the month's name, space-separated.
                      ṣ⁶               Split at spaces.
                €                    For each pair...
             ị                          index into the month's names...
              1¦                        for the first element.
                         j⁶€         Join each pair, separating by spaces.
                            j⁷       Join, separating by linefeeds.


0

টিএসকিউএল 296 বাইট

স্ট্যান্ডার্ড ডেটনেমটি ব্যবহারের জন্য আমাকে প্রচুর পরিমাণে বাইট খরচ করতে দেওয়া হচ্ছে না, তবে কয়েকটি বাইট সংরক্ষণ করতে আমি ডিফল্ট তারিখের বর্ণনার প্রথম 3 টি অক্ষর ব্যবহার করেছি (mon dd yyyy hh: miAM (বা প্রধানমন্ত্রী) ফর্ম্যাট সহ) এবং যুক্ত করেছি মাসের বাকি অংশ

Golfed:

use master
DECLARE @ varchar(5) = '12/2'

DECLARE @m int=month('2000/'+@),@d INT=day('2000/'+@)WHILE @m>0BEGIN PRINT left(dateadd(d,@m*29,0),3)+choose(@m,'uary','uary','ch','il','','e','y','ust','tember','ober','ember','ember')+' '+LEFT(@d,2)SELECT @m/=min(n),@d/=min(n)FROM(SELECT number FROM spt_values)x(n)WHERE @m%n+@d%n=0 and n>1 END

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

Ungolfed:

use master
DECLARE @ varchar(5) = '12/2'

DECLARE @m int=month('2000/'+@),@d INT=day('2000/'+@)
WHILE @m>0
BEGIN
PRINT
 left(dateadd(d,@m*29,0),3)
 +choose(@m,'uary','uary','ch','il','','e','y','ust',
  'tember','ober','ember','ember')+' '+LEFT(@d,2)
SELECT @m/=min(n),@d/=min(n)
FROM
(
  SELECT number
  FROM spt_values
)x(n)
WHERE
  @m%n+@d%n=0
  and n>1
END

উম্ম ... সেখানে প্রথম দুটি লাইন কী করছে ???
এরিক আউটগল্ফার

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ প্রথম লাইনটি এই স্ক্রিপ্টটির জন্য কোন ডাটাবেসটি ব্যবহার করবে তা বলছে, দ্বিতীয় লাইনটি ইনপুট ভেরিয়েবল ঘোষণা করছে। স্ক্রিপ্টটি কোথায় কার্যকর করা হবে এবং ইনপুট ভেরিয়েবলটি কী তা বলছি তা নির্ধারণ করে আমি তাদের গণনায় অন্তর্ভুক্ত করি নি
t-clausen.dk

আমি '12/2'দ্বিতীয় লাইনে একটি দেখতে পাচ্ছি , আপনি কি আমাকে সত্য বলছেন তা নিশ্চিত?
এরিক আউটগল্ফার

@ ইজিᴏʟғᴇʀ আমি ভয় করি আমি আপনার প্রশ্নটি বুঝতে পারি না
t-clausen.dk

আমি মনে করি আপনি একটি হার্ড-কোডেড তারিখ ব্যবহার করছেন, যদিও এসটিকিউল এবং ভেরিয়েন্টগুলিতে এসটিডিএন সমর্থিত কিনা তা আমি নিশ্চিত নই ... এছাড়াও, মনে হয় আপনি ভুল বানান Septemberদিয়েছিলেন Septemper'temper','ober','ember','ember')+' '+LEFT(@d,2)
এরিক আউটগল্ফার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.