J'ai un vieux réveil stupide avec deux boutons: houret minute. Le hourbouton incrémente l'heure d'une alarme définie et minuteincrémente l'heure des minutes d'une alarme définie. Cependant, certains designers intelligents réalisé que sur les deux boutons en même temps doit avoir un sens, et a décidé que l' appui houret minuteserait en même temps peuvent déclencher l'alarme être réglée sur 12:00 am
/ 0:00
. Votre tâche consiste à simuler ce comportement.
Tâche
Étant donné une heure de début et une séquence d'états de bouton, déterminez l'heure de fin.
À partir de l'heure de début, incrémentez l'heure pour chaque occurrence de (1,0)
, incrémentez la minute pour chaque occurrence de (0,1)
et réglez l'heure sur 0:00
pour chaque occurrence de (1,1)
. Les états (0,0)
doivent être ignorés car ils ne correspondent à aucun bouton pressé.
Lors de l'ajout aux minutes et aux heures, si la minute / heure dépasse le maximum, réglez-la sur 0
, c'est- à -dire que l'incrémentation d'une valeur de minute de 59
devrait définir la valeur de minute à 0
et l'incrémentation d'une valeur d'heure de 23
devrait définir la valeur de l'heure à 0
. L'incrémentation des valeurs minute / heure au-dessus de leurs limites n'affecte pas l'autre valeur, par exemple l'incrémentation de la minute des 10:59
rendements 10:00
, non 11:00
.
Exemple
Compte tenu du temps 13:58
et des étapes de saisie [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]
,
(0,1)
. Cela correspond à minuteune pression. Le moment est venu13:59
.(0,1)
. Cela correspond à minuteune pression. Le moment est venu13:00
.(0,1)
. Cela correspond à minuteune pression. Le moment est venu13:01
.(0,0)
. Cela correspond à aucun bouton pressé. Le temps, inchangé, est maintenant13:01
(1,1)
. Cela correspond à la pression des deux boutons. Le moment est venu0:00
.(1,0)
Cela correspond à hourune pression. Le moment est venu1:00
.
Puisque nous terminons avec 1:00
, c'est la sortie.
E / S
L'entrée consistera en un temps et une séquence d'états de bouton. La sortie est une seule fois.
Le temps d'entrée et le temps de sortie peuvent être
- un temps de 2 tuple
(hour, minute)
ou(minute, hour)
en24
heures tel que(13, 30)
(hour
varie de0
à23
etminute
varie de0
à59
) - identique à l'
12
heure précédente mais en heure et un booléenam
/pm
switch (hour
varie de0
à11
ou12
et1
à11
avecminute
de0
à59
). - un certain nombre de minutes depuis
0:00
comme le 810 (de 0 à 1439 inclus) - tout autre format codant les mêmes informations
La séquence des états des boutons est une représentation d'une liste de 2-tuples booléens, par exemple:
- une liste de tuples:
[(0,1),(1,0),(0,0),(1,1)]
- une chaîne délimitée par des espaces:
"01 10 00 11"
- un string:
"01100011"
- au Quaternaire:
[1,2,0,3]
- converti en entier:
99
- tout autre format codant les mêmes informations
Cas de test
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
[h, m]
format avec étapes quaternaires .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Réponses:
Gelée , 13 octets
Essayez-le en ligne!
la source
C,
8987 octetsMerci à @Jonathan Frech d'avoir économisé deux octets!
Essayez-le en ligne!
la source
Gelée ,
21(17?) 19 octets17 octets? - Si le format d'entrée:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
est acceptable, nous aurions un lien monadique et nous pourrions le supprimerW;
au début de la deuxième ligne.Remarque: Cela converge maintenant vers la réponse d'Erik the Outgolfers Jelly , donc je ne prendrai plus la peine de jouer au golf (je ne l'avais pas vu) ...
Un lien dyadique prenant une liste de l'heure initiale sous forme d'entiers
[hour, minute]
(24 heures) à gauche et une liste d'états de bouton[[hourPressed, minPressed], ...]
à droitequi renvoie une liste de l'heure de résultat final sous forme d'entiers, encore une fois
[hour, minute]
(24 heures).Essayez-le en ligne! ou voir la suite de tests
Comment?
la source
⁹Ạ¤
parẠ}
. Un autre -2 pour l'utilisation d'un format autorisé. Enfin, un autre -1 car la chaîne avant l'µ
ici est appelée dyade ..Python 2 ,
8475 octetsEssayez-le en ligne!
Fonction qui prend du temps en tant que tuple (heure, minute); sorties de la même manière.
la source
all(b)
au lieu deb[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):
ce motif correspond-il en Python!?Rétine , 75 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Supprimez tout jusqu'à et y compris la dernière double pression sur un bouton, en le remplaçant par un temps vide (dans le cas où c'est la dernière pression sur un bouton).
Convertissez en unaire.
Triez les minutes jusqu'à la fin.
Ajoutez les heures ensemble.
Ajoutez les minutes ensemble, mais en gardant les heures séparées.
Réduisez les heures et les minutes modulo 24 ou 60 selon le cas.
Convertissez en décimal.
Format à deux chiffres.
la source
Python 3,
135117 117115 octets-20 octets grâce à Jonathan Frech
Essayez-le en ligne!
Prend le temps sous forme de liste dans le formulaire
[hour, minute]
.la source
(m[0]+1)
par-~m[0]
etif m[0]<23 else 0
par*(m[0]<23)
.b
etc
sont toujours des valeurs booléennes, vous pouvez les remplacerb+c>1
parb&c
.Haskell , 58 octets
Essayez-le en ligne! Exemple d' utilisation:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.la source
JavaScript (ES6), 55 octets
Prend les entrées dans la syntaxe de curry, avec l'heure de début sous forme de tableau
[min, hour]
et les étapes sous forme de tableau quaternaire. Le temps de sortie est au même format que le temps d'entrée.Cas de test
Afficher l'extrait de code
la source
Perl 6 , 40 octets
Essayez-le en ligne!
Prend une liste contenant l'heure de début suivie des pressions sur les touches. Renvoie l'heure de fin. Les heures et les boutons sont des
(hour, minute)
paires. 24 heures.la source
Perl 5 , 70 octets
69 octets de code + 1 pour le
-n
drapeauEssayez-le en ligne!
Format d'entrée
hh:mm,abcdabcdabcdaddccbbaa
où:
Les espaces ou autres séparateurs entre les presses sont insignifiants.
Explication
la source
Swift ,
10696 octets-10, grâce à Xcoder
Essayez-le sur ideone!
La fonction prendra la valeur initiale et le tableau de tuples et renvoie l'heure finale.
la source
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)}
. Cela se débarrasse égalementtypealias
.Logo Terrapin, 304 octets
Pas optimisé; beaucoup d'espaces.
Prend une liste comme première entrée et l'heure + minute de départ (entrées séparées) comme deuxième et troisième, respectivement.
Je ne peux pas copier + coller à partir du logo Terrapin car c'est une version d'essai, c'est donc :(
la source
R , 61 octets
Prend
I
comme vecteur longueur 2c(H,M)
etB
que la liste des vecteurs de longueur-2 pour les boutons,c(H,M)
. Fait passer dansB
, la miseI
àc(0,0)
si la somme est2
. Ensuite, il modifie à la fin. Il y a aussi une fonction dans l'en-tête pour traduire les pressions de bouton dans le bon format R si vous souhaitez les tester toutes; il prend le tableau[(H,M),...]
comme une chaîne.Essayez-le en ligne!
la source
C # (.NET Core) , 93 octets
Essayez-le en ligne!
Prend l'entrée comme en trinaire, avec 0 == (1,0), 1 == (0,1), 2 == (1,1) et l'heure dans un tableau avec l'index 0 étant les heures et 1 étant les minutes. Modifie le tableau temporel en place.
la source
Pyth, 22 octets
Essayez-le ici.
la source
Mathematica, 54 octets
Fonction anonyme. Prend une liste de 2 tuples en entrée et retourne un 2-tuple en sortie.
la source
Scala , 116 octets
Je prends donc juste l'heure de début comme deux premiers paramètres de mon func (
h
etm
), et je prends la séquence d'entrée comme un tableau [Tuple2].Je me demande ... devrais-je compter la déclaration func (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
plus la fin}
) en nombre d'octets?Essayez-le en ligne!
la source