मेरा बेवकूफ पुरानी अलार्म घड़ी का अनुकरण करें


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-टपल (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], ...]?
जोनाथन एलन

@JonathanAllan हाँ।
फायरफ्लेम 241

सामान्य डिजिटल समय में 1200am का क्या अर्थ है?
फेरीबीग

जवाबों:


8

जेली , 13 बाइट्स

_`+Ạ}?/%24,60

इसे ऑनलाइन आज़माएं!


ध्यान दें, मुझे यकीन नहीं है कि हम आगे जा सकते हैं और उस इनपुट प्रारूप का उपयोग कर सकते हैं (इसलिए मैंने पूछा) क्योंकि ओपी कहता है "बटन राज्यों का अनुक्रम एक सूची का प्रतिनिधित्व है"।
जोनाथन एलन

@JonathanAllan यदि ऐसा है तो ओपी मेरे जवाब पर टिप्पणी करेगा लेकिन मैं आपके टिप्पणी में आपके द्वारा उपयोग किए गए सटीक प्रारूप का उपयोग कर रहा हूं ... यह कभी-कभी होता है कि ओपी आलसी है या चुनौती को अद्यतन करना भूल गया है
एरिक आउटगॉल्फ


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अंत में, एक और -1 क्योंकि µयहां से पहले की श्रृंखला को एक
डाईड के

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):क्या यह पैटर्न पाइथन में मेल खा रहा है !?
Quelklef

5

रेटिना , 75 बाइट्स

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

1>`:

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

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण के मामले शामिल हैं। स्पष्टीकरण:

.*,1:1
:

अंतिम डबल बटन प्रेस तक और सब कुछ हटा दें, इसे खाली समय के साथ प्रतिस्थापित करें (मामले में अंतिम बटन प्रेस)।

\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 बाइट्स (कमेंट लिंक, TIO के बड़े होने के कारण कमेंट बॉक्स के लिए)
Halvardamm


4

जावास्क्रिप्ट (ईएस 6), 55 बाइट्स

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

सरणी के रूप में शुरुआती समय के साथ, करी वाक्यविन्यास में इनपुट लेता है [min, hour] और एक चतुर्धातुक सरणी के रूप में चरणों के । आउटपुट समय इनपुट प्रारूप के समान प्रारूप में होता है।

परीक्षण के मामलों


3

पर्ल 6 , 40 बाइट्स

{.reduce({(@^a Z+@^b)X*!@b.min})Z%24,60}

इसे ऑनलाइन आज़माएं!

बटन प्रेस के बाद प्रारंभ समय वाले एक सूची लेता है। अंत समय लौटाता है। टाइम्स और बटन (hour, minute)जोड़े हैं। 24 घंटे का समय।


3

पर्ल ५ , 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)}

इसे आइडोन पर आज़माएं!

फ़ंक्शन प्रारंभिक मूल्य और टुपल्स की सरणी लेगा और अंतिम समय लौटाएगा।


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
वैसे, PPCG में आपका स्वागत है! अद्भुत पहला उत्तर।
मिस्टर एक्सकोडर १६'१ X को

बहुत बहुत धन्यवाद, वास्तव में मैंने पहले प्रिंट () का उपयोग किया था ... लेकिन मैं विभिन्न कार्यान्वयनों के बीच स्विच करने के बाद भूल गया। आपकी सहायता के लिए एक बार फिर से धन्यवाद।
नरेश

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। तब यह अंत में नीचे mods। यदि आप उन सभी का परीक्षण करना चाहते हैं, तो बटन को सही आर प्रारूप में अनुवाद करने के लिए हेडर में एक फ़ंक्शन है; यह [(H,M),...]एक स्ट्रिंग के रूप में सरणी लेता है ।

इसे ऑनलाइन आज़माएं!


1

सी # (.NET कोर) , 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]={प्लस एंडिंग }) की गिनती करनी चाहिए ?

इसे ऑनलाइन आज़माएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.