আর কত দিন বাকি?


21

আর কত দিন বাকি?

সম্প্রতি, আমি আমার ফোনে একটি 5 মিনিটের টাইমার ব্যবহার করে পিজা তৈরি করছিলাম। কেউ যখন হেঁটেছিল এবং আমাকে জিজ্ঞাসা করেছিল যে কত দিন বাকি ছিল, আমি কীভাবে প্রশ্নের উত্তর দিতে পারি সে সম্পর্কে প্রথমে একটি মুহুর্তের জন্য আমি বিভ্রান্ত হয়ে পড়েছিলাম। আপনি দেখুন, যদি বর্তমান মুহুর্তে টাইমার 3:47-এ থাকত, যখন আমি 'তিন মিনিট সাতচল্লিশ সেকেন্ড' জোরে জোরে পড়তাম, সময় বদলে যেত। অতএব, আমি এমন একটি সময় টাইমার পৌঁছাতে হবে বের করতে হবে মাত্র হিসাবে আমি এটা পড়া শেষ।

এটি আপনার চ্যালেঞ্জ: এই প্রক্রিয়াটি স্বয়ংক্রিয় করা। যে কোনও উপযুক্ত বিন্যাসে (":" সীমিত, বা এক মিনিট এবং দ্বিতীয় আর্গুমেন্ট হিসাবে) সময় দেওয়া হয়েছে, সেই বর্তমান মুহুর্তের আদিতম সময়কে আউটপুট দেয় যা পড়তে সমান পরিমাণ সময় লাগবে কারণ টাইমার পেতে সময় লাগবে করতে। আমরা ধরে নিচ্ছি যে প্রতিটি সিলেবলটি পড়তে 1 সেকেন্ড সময় নেয়।

আরও বিধি

  • আপনাকে অবশ্যই 'মিনিট' এবং 'সেকেন্ড' প্রত্যেকটির দুটি সিলেবল হিসাবে অবশ্যই গণনা করতে হবে, পাশাপাশি তাদের মধ্যে একটি 'এবং'।
  • পিজ্জা কখনও রান্না করতে 59:59 এর বেশি সময় নেয় না।
  • '১১ মিনিট এবং ০ সেকেন্ড' 10 টি শব্দযুক্ত শব্দ নয়: আপনাকে অবশ্যই '11 মিনিট '(অর্থাত্ 5 টি অক্ষরের) সহজ করতে হবে। কয়েক মিনিটের সাথে একই যায়: '0 মিনিট এবং 7 সেকেন্ড' এছাড়াও কেবল 4 টি শব্দের সংখ্যার হিসাবে গণনা করা হয়।
  • আপনার প্রোগ্রামটি যে কোনও বিন্যাসে আউটপুট দিতে পারে: এর অ্যারে [minutes, seconds], বা এমনকি <minutes> minutes and <seconds> seconds(সাধারণ পাঠ্য লিখিত)।
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।
  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।

পরীক্ষার মামলা

সমস্ত ইনপুট হিসাবে (minutes, seconds)

(4, 47) = (4, 38) (Four MiNutes And ThirTy Eight SeConds - 9 syllables/seconds)
(1, 1) = (0, 56) (FifTy-Six SeConds - 5 syllables/seconds)
(59, 57) = (59, 46) (FifTy Nine Minutes And Forty Six SeConds - 11 syllables/seconds)
(0, 10) = null/error/0 (no positive answer)

সিলেবল কাউন্ট রেফারেন্স

রেফারেন্সের জন্য, এখানে 59 সংখ্যা পর্যন্ত প্রতিটি সংখ্যায় সিলেবলের সংখ্যা রয়েছে।

0,0 (does not need to be counted)
1,1
2,1
3,1
4,1
5,1
6,1
7,2
8,1
9,1
10,1
11,3
12,1
13,2
14,2
15,2
16,2
17,3
18,2
19,2
20,2
21,3
22,3
23,3
24,3
25,3
26,3
27,4
28,3
29,3
30,2
31,3
32,3
33,3
34,3
35,3
36,3
37,4
38,3
39,3
40,2
41,3
42,3
43,3
44,3
45,3
46,3
47,4
48,3
49,3
50,2
51,3
52,3
53,3
54,3
55,3
56,3
57,4
58,3
59,3

আপনার প্রথম পরীক্ষার ক্ষেত্রে, 4:37 এছাড়াও একটি বৈধ আউটপুট হবে, যেহেতু এটি বলতে 10 টি উচ্চারণযোগ্য লাগবে?
কুইন

1
@ কুইন, স্পেসে বলা হয়েছে যে আমাদের আদিতম সময়ের আউটপুট করা উচিত ।
শেগি

1
@ শেগি হুফফফফফফফফফ, তাই ধন্যবাদ - আমার উত্তরটি বাছাইয়ের পরে আমার মনে হয় আমার পিজ্জা পুড়ে যাবে
কুইন

আমাদের কি অনুমান করার অনুমতি দেওয়া হয়েছে যে ইনপুটটি প্যাড করা যেতে পারে, অর্থাৎ 4 মিনিট এবং 43 সেকেন্ড "04:43" হিসাবে ইনপুট করা যেতে পারে?
বেদবার্ট 1

1
@ বেদভার্ট 1 ঠিক আছে, ভাল
গেজা কেরেসসেনি

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6),  112 106  105 বাইট

@ এমবিডিমেটফআইজানির পরামর্শের ভিত্তিতে একটি সংক্ষিপ্ত সংস্করণ @
দানিলতুতুবালিন দ্বারা সংরক্ষিত আরও 6 বাইট

(minutes)(seconds)[minutes, seconds]0

m=>d=F=s=>m|s?(g=n=>n&&(n%10!=7)-7+(n-11?n<13?2:n<21|n%10<1:0))(m)+g(s)^~d?F(s?s-1:m--&&59,d=-~d):[m,s]:0

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


জাভাস্ক্রিপ্ট (ES6),  126  119 বাইট

(minutes)(seconds)[minutes, seconds]0

m=>d=F=s=>m|s?(g=n=>n&&2+(30774612>>2*n%(n>12?20:26)&3)+(n>12)+(n>19))(m)+g(s)+!!(m*s)^d?F(s?s-1:m--&&59,d=-~d):[m,s]:0

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

মন্তব্য

m =>                  // m = minutes
d =                   // d = delta in seconds between the initial time and the current time,
                      //     initialized to a non-numeric value (zero-ish)
F = s =>              // F is a recursive function taking s = seconds
  m | s ? (           // if either m or s is not 0:
    g = n =>          //   g is a helper function taking an integer n in [0..59]
      n &&            //     return 0 if n = 0
      2 + (           //     otherwise, start with 2 for either 'mi-nutes' or 'se-conds'
        30774612 >>   //     add the base number of syllables (0 to 3) corresponding to n
        2 * n %       //     using a bitmask of 13 entries x 2-bit:
                      //       12 11 10  9  8  7  6  5  4  3  2  1  0
                      //       01 11 01 01 01 10 01 01 01 01 01 01 00
        (n > 12 ? 20  //     using n MOD 10 if n is greater than 12
                : 26) //     or just n otherwise
        & 3           //     isolate the two least significant bits
      ) +             //   
      (n > 12) +      //     add 1 syllable for '-teen' or '-ty' if n is greater than 12
      (n > 19)        //     add 1 more syllable for 'x-ty' if n is greater than 19
  )(m) +              //   invoke g for the minutes
  g(s) +              //   invoke g for the seconds
  !!(m * s)           //   add 1 syllable for 'and' if both m and s are non-zero
  ^ d ?               //   if the result is not equal to the delta:
    F(                //     otherwise, do a recursive call:
      s ? s - 1       //       decrement s if it's not 0,
        : m-- && 59,  //       or decrement m and restart with s = 59
      d = -~d         //       increment the delta
    )                 //     end of recursive call
  :                   //   else:
    [m, s]            //     success: return [m, s]
:                     // else:
  0                   //   failure: return 0

আপনি দয়া করে একটি ব্যাখ্যা যোগ করতে পারেন?
গেজা কেরেসসেনি

পুনঃটুইট :-)
Arnauld

ধন্যবাদ। এটি বেশিরভাগই 30774612>>2*n%(n>12?20:26)&3আমি সম্পর্কে বিভ্রান্ত হয়ে পড়েছিলাম।
গেজা কেরেসসেনি

1
g=x=>x&&(x%10==7)+(x==11?6:x<13?4:x<21|x%10<1?5:6)কাজ করতে পারে (যেহেতু ইন্টারনেট ডাউন হয়ে গেছে এবং আমার ফোনটি ব্যবহার করছে
নিরীক্ষিত

1
পুনঃটুইট g()বিপরীত ফলাফলটি ফিরে পেয়ে এবং XOR'ing করে আমি সেখান থেকে আরেকটি বাইট সংরক্ষণ করেছি ~d
Arnauld

2

পাইথন 3 , 287 285 বাইট

m=int(input())
s=int(input())
y=lambda w:3+(w[-1]=='7')-(w[-1]=='0')-(w[0]in'01')*(1+(w[0]=='0'))+(w=='11')-(w=='12')
z=lambda m,s:(2+y(f'{m:02d}'))*(m!=0)+(2+y(f'{s:02d}'))*(s!=0)+(m!=0!=s)
q=lambda t: (m-(t+60-s-1)//60,(s-t)%60)
print([q(t) for t in range(s+60*m) if z(*q(t))==t][0])

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

এটি খুব চালাক সমাধান নয় - এটি বেশিরভাগ স্ট্রিয়াঘটফওয়ার্ড। লাগে 'M: s' এর মিটার এবং পৃথক ইনপুট হিসাবে গুলি (প্যাডেড হতে হবে না), এবং আউটপুট (মি, গুলি)। কোনও বৈধ আউটপুট না থাকলে ত্রুটি ছুড়ে দেয়।

প্রোগ্রামটি 0 এবং 1 তে সুস্পষ্টভাবে বুলেটিন .ালাইয়ের উপর প্রচুর নির্ভর করে। প্রথম লাইনটি ইনপুট নেয়। দ্বিতীয় রেখায় একটি ল্যাম্বডা ফাংশন y সংজ্ঞায়িত করা হয় যা সংখ্যায় সিলেবল দেয় - এটি 3 টি অক্ষরের একটি বেসকে ধরে নেয়, তারপরে এটি 7 এ শেষ হলে 1 যোগ করে, 0 টিতে শেষ হলে 1 বিয়োগ করে, এবং 10 এর দশকে থাকলে 1 টি বিয়োগ করে 2 যদি এটি একক অঙ্কে থাকে। বারো এবং এগারোটি ম্যানুয়ালি শেষে সামঞ্জস্য করা হয়। তৃতীয় লাইন পুরো এক্সপ্রেশনটিতে সিলেবলের জন্য একটি ল্যাম্বডা। অবশেষে, চতুর্থ লাইন টি সেকেন্ড পরে সময় দেয়। পঞ্চম লাইনটি আউটপুট - এটি সমস্ত সময় একটি অ্যারে তৈরি করে যা সমস্যাটি পূরণ করে এবং প্রথমটি আউটপুট করে।

সম্পাদনা 1: মন্তব্যে ম্যাথু অ্যান্ডারসনকে ধন্যবাদ, ইনপুটগুলি আলাদাভাবে নিয়ে 2 বাইট মুণ্ডন করা হয়েছিল।


1
আপনি যদি দুটি পৃথক লাইনে ইনপুট নেন:, m=int(input()) s=int(input())আপনি 2 বাইট সংরক্ষণ করতে পারেন।
ম্যাথু অ্যান্ডারসন


1

জেলি , 46 বাইট

ḅḶbɗ60Ṛµ“÷ṢḣxE⁻Ṇ⁹ƬƝwɼỤṡl’ḃ4+2;0⁸ịS+ṬS$’)=JTị⁸Ḣ

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

একজন কীটাণুজাতীয় লিংক যুক্তি হিসাবে হিসাবে সময় নিচ্ছে [minutes, seconds]এবং উপযুক্ত সময় হিসাবে বলা ফিরে [minutes, seconds]বা [seconds]একটি কম মিনিট।


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