আমার বোকা ওল্ড অ্যালার্ম ক্লক সিমুলেট করুন


25

আমার কাছে দুটি বোতামযুক্ত একটি বোকা পুরানো অ্যালার্ম ঘড়ি: hourএবং minutehourবোতাম একটি সেট বিপদাশঙ্কা ঘন্টার ক্রমবর্ধমানে এবং minuteবাড়তি একটি সেট বিপদাশঙ্কা মিনিট সময়। তবে কিছু স্মার্ট ডিজাইনার বুঝতে পেরেছিলেন যে একই সাথে উভয় বোতাম টিপানোর একটি অর্থ হওয়া উচিত, এবং সিদ্ধান্ত নিয়েছে যে এক সাথে চাপ দিয়ে hourএবং minuteঅ্যালার্মটি 12:00 am/ এ সেট হয়ে যাবে 0:00। আপনার কাজ এই আচরণ অনুকরণ করা হয়।

কার্য

একটি শুরুর সময় এবং বোতামের ক্রমগুলির একটি ক্রম দেওয়া শেষ সময়টি নির্ধারণ করুন।

শুরুর সময় থেকে শুরু করে প্রতিটি সংঘটন জন্য ঘন্টা বাড়ায় (1,0), প্রতিটি সংঘটন জন্য মিনিট বাড়ায় (0,1), এবং সময় সেট 0:00প্রতিটি সংঘটন জন্য (1,1)। রাজ্যগুলিকে (0,0)উপেক্ষা করা উচিত কারণ তারা উভয়ই বোতাম টিপে চাপছে না।

মিনিট এবং ঘন্টা যোগ করার সময়, যদি মিনিট / ঘন্টা সর্বাধিকের ওপরে যায়, এটি সেট করুন 0, অর্থাত্ একটি মিনিটের মান বাড়িয়ে দেওয়া 59উচিত মিনিটের মানকে সেট করা উচিত 0এবং একটি ঘন্টা মান বাড়ানো 23উচিত যা ঘন্টার মানকে সেট করতে হবে 0। তাদের সীমাবদ্ধতার উপরে মিনিট / ঘন্টা মান বাড়ানো অন্য মানকে প্রভাবিত করে না, উদাহরণস্বরূপ, 10:59ফলনের মিনিট বাড়ানো 10:00, তা নয় 11:00

উদাহরণ

ইনপুট সময় 13:58এবং পদক্ষেপ দেওয়া [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)],

  1. (0,1)। এটি minuteচেপে যাওয়ার সাথে মিলে যায় । সময় এখন 13:59
  2. (0,1)। এটি minuteচেপে যাওয়ার সাথে মিলে যায় । সময় এখন 13:00
  3. (0,1)। এটি minuteচেপে যাওয়ার সাথে মিলে যায় । সময় এখন 13:01
  4. (0,0)। এটি উভয় বোতাম চেপে থাকার সাথে মিলে যায়। সময়, প্রভাবহীন, এখন সময়13:01
  5. (1,1)। এটি চাপ দেওয়া উভয় বোতামের সাথে মিলে যায়। সময় এখন 0:00
  6. (1,0)এটি hourচেপে যাওয়ার সাথে মিলে যায় । সময় এখন 1:00

যেহেতু আমরা শেষ করছি 1:00, এটি আউটপুট।

ইনপুট / আউটপুট

ইনপুটটিতে একটি সময় এবং বোতামের অবস্থার ক্রম থাকবে। আউটপুট একক সময়।

ইনপুট সময় এবং আউটপুট সময় হতে পারে

  • একটি 2-tuple (hour, minute)বা (minute, hour)মধ্যে 24যেমন ঘণ্টা সময় (13, 30)( hourথেকে রেঞ্জ 0থেকে 23এবং minuteথেকে রেঞ্জ 0থেকে 59)
  • পূর্ববর্তী হিসেবে নয় বরং একই 12ঘণ্টা সময় এবং একটি বুলিয়ান am/ pm(সুইচ hourথেকে রেঞ্জ 0থেকে 11বা 12এবং 1করতে 11সঙ্গে minuteথেকে 0থেকে 59)।
  • 0:00810 (0 থেকে 1439 পর্যন্ত, সমেত) হিসাবে বেশ কয়েক মিনিট
  • অন্য কোনও ফর্ম্যাট যা একই তথ্যকে এনকোড করে

বোতামের স্থিতির ক্রম হ'ল বুলিয়ান 2-টিপলগুলির তালিকার একটি প্রতিনিধিত্ব, উদাহরণস্বরূপ:

  • tuples একটি তালিকা: [(0,1),(1,0),(0,0),(1,1)]
  • একটি স্পেস-সীমাবদ্ধ স্ট্রিং: "01 10 00 11"
  • একটি স্ট্রিং: "01100011"
  • কোয়ার্টনারি: [1,2,0,3]
  • একটি পূর্ণসংখ্যায় রূপান্তরিত: 99
  • অন্য কোনও ফর্ম্যাট যা একই তথ্যকে এনকোড করে

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

time,steps -> output
06:49,[(0, 1)] -> 06:50
12:23,[(1, 0)] -> 13:23
02:23,[(0, 1), (1, 0)] -> 03:24
21:40,[(0, 1), (0, 1), (0, 1), (0, 1)] -> 21:44
13:10,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 1)] -> 00:02
21:33,[(1, 0), (0, 1), (1, 0), (0, 1)] -> 23:35
14:21,[(0, 1), (0, 1), (0, 1)] -> 14:24
02:39,[(0, 0), (0, 1)] -> 02:40
16:07,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 19:16
17:55,[(0, 1), (1, 0), (0, 1)] -> 18:57
15:55,[(1, 0), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0)] -> 23:00
22:11,[(0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 00:19
03:58,[(1, 0), (0, 0), (0, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1)] -> 07:03
13:02,[(0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0)] -> 16:06
04:37,[(1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (1, 0)] -> 08:47
00:01,[(0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 03:08
02:58,[(1, 0), (1, 0), (0, 1)] -> 04:59
01:43,[(0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1)] -> 04:52
07:54,[(1, 0), (0, 1), (1, 0), (1, 0), (1, 1)] -> 00:00
09:33,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 10:38
09:01,[(0, 1), (0, 1)] -> 09:03
19:04,[(0, 1), (1, 0), (0, 1), (1, 0)] -> 21:06
11:17,[(0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1)] -> 00:02
19:32,[(0, 1), (1, 0), (0, 1), (1, 0), (1, 0), (1, 0)] -> 23:34
17:31,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 0), (1, 1), (0, 1)] -> 00:01
06:46,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)] -> 18:16



এক তালিকা হিসাবে দুটি সেট ডেটার একটি ইনপুট ফর্ম্যাট গ্রহণযোগ্য? উদাহরণস্বরূপ [[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]?
জোনাথন অ্যালান

@ জোনাথান অ্যালান হ্যাঁ
fireflame241

সাধারণ ডিজিটাল সময়ে 1200am এর অর্থ কী?
ফেরিবিগ

উত্তর:


8

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

@ জোনাথন অ্যালান যদি তা হয় তবে ওপি আমার উত্তর সম্পর্কে মন্তব্য করবে তবে আমি আপনার মন্তব্যে আপনি যে সঠিক ফর্ম্যাটটি ব্যবহার করেছেন তা ব্যবহার করছি ... এটি কখনও কখনও এমন হয় যে ওপি অলস বা চ্যালেঞ্জটি আপডেট করতে ভুলে গেছেন
এরিক দ্য আউটগোল্ফ


6

জেলি ,  21  (17?) 19 বাইট

17 বাইট? - যদি ইনপুট ফর্ম্যাট: [[initHour, initMinute], [a1, b1], [a2, b2], ...]গ্রহণযোগ্য হয় তবে আমাদের কাছে একক লিঙ্ক থাকবে এবং W;দ্বিতীয় লাইনের শুরু থেকে সরে যেতে পারে ।

দ্রষ্টব্য: এটি এখন আরিগ আউটগল্ফার জেলি উত্তরটির দিকে রূপান্তরিত হচ্ছে , তাই আমি আরও গল্ফ করাতে বিরক্ত করব না (আমি এটি দেখিনি) ...

N⁹⁹Ạ¤?+⁸
W;ç/%24,60

[hour, minute]বামদিকে পূর্ণসংখ্যার (24-ঘন্টা) হিসাবে প্রাথমিক সময়ের একটি তালিকা [[hourPressed, minPressed], ...]এবং ডানদিকে বোতামের একটি তালিকা রয়েছে এমন একটি ডায়াডিক লিঙ্ক,
যা আবার [hour, minute](24 ঘন্টা) শেষে ফলাফলের ফলাফলের তালিকা দেয় ।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুট দেখুন

কিভাবে?

N⁹⁹Ạ¤?+⁸ - Link 1, nextState: list, currentState [cH, cM]; list, presses [pH, pM]
     ?   - if:
    ¤    - ...condition: nilad followed by link(s) as a nilad:
  ⁹      -   chain's right argument, presses
   Ạ     -   all truthy? (1 for [1,1] 0 otherwise)
N        - ...then: negate (the left argument, currentState, i.e. [-cH, -cM])
 ⁹       - ...else: chain's right argument, presses
       ⁸ - chain's left argument, currentState
      +  - add
           i.e.: if presses was [1,1] then [cH+-cH,cM+-cM]=[0,0]
                 otherwise [cH+pH,cM+cM]

W;ç/%24,60
     24,60 - literal list of integers [24,60]
    %      - modulo by (vectorises)

-1 বাইট⁹Ạ¤ সঙ্গে প্রতিস্থাপন Ạ}। অনুমোদিত ফর্ম্যাটটি ব্যবহারের জন্য অন্য -2পরিশেষে, অন্য -১ কারণ এখানে শৃঙ্খলার আগে µডায়াড নামে ডাকা হয় ..
এরিক দ্য আউটগলফার

6

পাইথন 2 , 84 75 বাইট

lambda c,a:reduce(lambda(h,m),(d,e):(d&e)and(0,0)or((h+d)%24,(m+e)%60),a,c)

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

ফাংশন যা একটি টিপল হিসাবে সময় নেয় (ঘন্টা, মিনিট); আউটপুট একইভাবে।


এর all(b)পরিবর্তে -3 বাইট ব্যবহার করে b[0]&b[1]:lambda c,a:reduce(lambda t,b:all(b)and((t[0]+b[0])%24,(t[1]+b[1])%60)or(0,0),a,c)
এরিক দি আউটগলফার


lambda(h,m),(d,e):পাইথনের সাথে কি এই প্যাটার্নটি মিলছে !?
কোয়েলক্লেফ

5

রেটিনা , 75 বাইট

.*,1:1
:
\d+
$*
O`\D1*
,

1>`:

+`1{24}:|:1{60}
:
(?<=^|:)1*
$.&
\b\d\b
0$&

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

.*,1:1
:

সর্বশেষ ডাবল বোতাম টিপুন এবং সমস্ত কিছু মুছুন, খালি সময়ের সাথে প্রতিস্থাপন করুন (তবে এটিই শেষ বোতাম টিপুন) case

\d+
$*

অ্যানারিতে রূপান্তর করুন।

O`\D1*

মিনিটগুলি শেষ পর্যন্ত বাছাই করুন।

,

একসাথে ঘন্টা যোগ করুন।

1>`:

মিনিট একসাথে যোগ করুন, তবে ঘন্টা আলাদা রাখুন।

+`1{24}:|:1{60}
:

যথাযথ হিসাবে 24 বা 60 ঘন্টা এবং মিনিট মডুলো হ্রাস করুন।

(?<=^|:)1*
$.&

দশমিক রূপান্তর।

\b\d\b
0$&

দুটি অঙ্কে ফর্ম্যাট করুন।


4

পাইথন 3, 135 117 115 বাইট

-20 বাইট জনাথন ফ্রেচের জন্য ধন্যবাদ

def a(m,f):
 for b,c in f:
  if b&c:m=[0,0]
  elif b:m[0]=-~m[0]*(m[0]<23)
  elif c:m[1]=-~m[1]*(m[1]<59)
 return m

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

ফর্মের তালিকা হিসাবে সময় নেয় [hour, minute]


আপনি এর (m[0]+1)সাথে -~m[0]এবং if m[0]<23 else 0সাথে প্রতিস্থাপন করতে সক্ষম হতে পারেন *(m[0]<23)
জোনাথন ফ্রেচ

এছাড়াও, যেমন bএবং cসবসময় বুলিয়ান মান, আপনি প্রতিস্থাপন করতে পারেন b+c>1সঙ্গে b&c
জোনাথন ফ্রেচ

76 বাইট (সংক্ষিপ্ত লিঙ্ক,
টিআইওর


4

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

t=>a=>a.map(x=>x>2?t=[0,0]:t[x-1]++)&&[t[0]%60,t[1]%24]

অ্যারে আকারে প্রারম্ভিক সময় এবং [min, hour]কোয়ার্টনারি অ্যারে হিসাবে পদক্ষেপগুলির সাথে সিনট্যাক্স কারিঙে ইনপুট নেয় । আউটপুট সময় ইনপুট সময়ের মতো একই ফর্ম্যাটে।

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



3

পার্ল 5 , 70 বাইট

-nপতাকাটির জন্য কোড +1 এর 69 বাইট

s/.*d/0:0/;/(.*):(\d+)/;printf"%02d:%02d",($1+y/c//)%24,($2+y/b//)%60

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

ছক পূরণ করা

hh:mm,abcdabcdabcdaddccbbaa

কোথায়:

hh=start hour
mm=start minute
 a = (0, 0) = no buttons pressed
 b = (0, 1) = minute button pressed
 c = (1, 0) = hour button pressed
 d = (1, 1) = both buttons pressed

প্রেসগুলির মধ্যে ফাঁকা স্থান বা অন্যান্য বিভাজক নগণ্য।

ব্যাখ্যা

s/.*d/0:0/;    # If both buttons were ever pressed, previous presses
               # don't matter.  Get rid of them and set start time to midnight.
/(.*):(\d+)/;  # Extract start hour and minute
printf"%02d:%02d",            # Output numbers with leading 0
($1+y/c//)%24,                # Take starting hour, add number of presses, remainder 24
($2+y/b//)%60                 # Take starting minute, add number of presses, remainder 24

3

সুইফ্ট , 106 96 বাইট

-10, এক্সকোডারকে ধন্যবাদ

func x(m:(Int,Int),n:[(Int,Int)]){let i=n.reduce(m){($0.0+$1.0,$0.1+$1.1)};print(i.0%24,i.1%60)}

আদর্শের উপর চেষ্টা করুন!

ফাংশন প্রাথমিক মান এবং tuples এর অ্যারে এবং চূড়ান্ত সময় নেবে।


96 বাইট , পরিবর্তে stdout- এ মুদ্রণের দ্বারা: func x(m:(Int,Int),n:[(Int,Int)]){let i=n.reduce(m){($0.0+$1.0,$0.1+$1.1)};print(i.0%24,i.1%60)}। এটি থেকে মুক্তিও পাওয়া যায় typealias
মিঃ এক্সকোডার

1
যাইহোক, পিপিসিজিতে আপনাকে স্বাগতম! আশ্চর্যজনক প্রথম উত্তর।
মিঃ এক্সকোডার

আপনাকে অনেক ধন্যবাদ, আসলে আমি প্রথমে প্রিন্ট () ব্যবহার করেছিলাম ... তবে বিভিন্ন বাস্তবায়নের মধ্যে স্যুইচ করার পরে আমি ভুলে গিয়েছিলাম। আপনার সাহায্যের জন্য আবার ধন্যবাদ।
নরেশ

1

টেরাপিন লোগো, 304 বাইট

অপ্টিমাইজড নয়; প্রচুর স্থান

MAKE "M :B MAKE "H :A LABEL "L IF EMPTY? :I OP LIST :H :M MAKE "C FIRST :I IF AND ((ITEM 2 :C)=1) ((ITEM 1 :C) = 0) MAKE "M :M+1 IF :M=60 MAKE "M 0 IF AND ((ITEM 1 :C) = 1) ((ITEM 2 :C)=1 MAKE "M 0 MAKE "H 0 IF AND ((ITEM 1 :C)-1) ((ITEM 2 :C) = 0) MAKE "H :H + 1 IF :H = 23 MAKE "H 0 MAKE "I BF :I GO "L

এটির প্রথম ইনপুট এবং শুরুর ঘন্টা + মিনিট (পৃথক ইনপুট) হিসাবে যথাক্রমে দ্বিতীয় এবং তৃতীয় হিসাবে একটি তালিকা নেয়।

টেরাপিন লোগো থেকে আমি + অনুলিপি করতে পারি না এটির পরীক্ষামূলক সংস্করণ হিসাবে এটি :(


1

আর , 61 বাইট

function(I,B){for(b in B)I=I+"if"(sum(b)>1,-I,b)
I%%c(24,60)}

লাগে Iদৈর্ঘ্য-2 বাহক হিসেবে c(H,M)এবং B, বাটন জন্য দৈর্ঘ্য-2 ভেক্টর একটি তালিকা হিসাবে c(H,M)। এর মধ্য দিয়ে পরিমাপ করা হচ্ছে B, যোগফল নির্ধারণ Iকরে । তারপরে এটি শেষে মোডস করে। আপনি যদি সেগুলি পরীক্ষা করতে চান তবে ডান আর ফর্ম্যাটে বোতাম টিপতে অনুবাদ করার জন্য শিরোনামে একটি ফাংশন রয়েছে; এটি একটি স্ট্রিং হিসাবে অ্যারে লাগে ।c(0,0)2[(H,M),...]

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


1

সি # (.নেট কোর) , 93 বাইট

(n,l)=>{for(int i=0,x;i<n.Length;){x=n[i++];if(x>1)l[0]=l[1]=0;else{l[x]=++l[x]%(24+36*x);}}}

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

0 == (1,0), 1 == (0,1), 2 == (1,1) সহ ট্রিনিয়ারে ইনপুট নেয় এবং সূচী 0 সহ ঘন্টা এবং 1 মিনিট হওয়ার সাথে একটি অ্যারেতে সময় নেয়। স্থানে সময় অ্যারে পরিবর্তন করে।



0

গণিত, 54 বাইট

Switch[#2,a={0,0},#,a+1,a,_,Mod[+##,{24,60}]]&~Fold~#&

বেনামে ফাংশন। ইনপুট হিসাবে 2-টিপলগুলির একটি তালিকা নেয় এবং আউটপুট হিসাবে একটি 2-টিপল দেয়।


0

স্কালা , 116 বাইট

সুতরাং আমি কেবল আমার ফানক ( hএবং m) এর দুটি প্রথম পরামিতি হিসাবে শুরুর সময় নিই এবং আমি ইনপুট ক্রমটিকে অ্যারে [টিপল 2] হিসাবে গ্রহণ করি।

var x=h
var y=m
for(u<-a)u match{case (0,1)=>y=(y+1)%60
case (1,0)=>x=(x+1)%24
case (1,1)=>{x=0;y=0}
case _=>}
(x,y)

আমি ভাবছি ... আমার কি বাইট গণনায় ফানক ঘোষণার ( def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={সমাপ্তি }) গণনা করা উচিত?

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

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