J'aime vraiment les moments qui suivent certains modèles. En particulier, j'aime les moments où tous les chiffres sont identiques, ou tous les chiffres augmentent de manière arithmétique de un de gauche à droite. De plus, je déteste viscéralement quand les gens mettent des lettres à mon époque, donc tout ce non-sens AM / PM est mort pour moi. Ainsi, mes moments préférés sont:
0000 0123 1111 1234 2222 2345
Pour ma tranquillité d'esprit, j'ai besoin que vous m'écriviez un seul programme qui, étant donné l'heure actuelle en entrée, à la fois: (A) si ce n'est pas maintenant l'un de mes moments préférés, me dit à la fois (i) combien de minutes c'est depuis mon dernier temps favori ainsi que (ii) combien de minutes à partir de maintenant mon prochain temps favori se produira; et (B) si elle est maintenant l' un de mes moments préférés, fournit une « valeur de signal » unique.
Contribution
Votre programme doit accepter (par n'importe quelle méthode: argument de fonction,, stdin
argument de ligne de commande, etc.) l'heure actuelle, dans l'un des formats suivants:
Un temps à quatre chiffres sous forme de chaîne
Un entier qui peut être complété par un zéro sur la gauche pour créer un temps à quatre chiffres sous forme de chaîne
Une séquence de quatre (ou moins) entiers, ordonnée de telle sorte que le premier entier de la séquence soit le chiffre le plus à gauche (significatif) dans l'entrée de temps (par exemple,
0951
pourrait être valablement représenté par[0, 9, 5, 1]
ou[9, 5, 1]
)- Représenter
0000
comme une séquence de longueur nulle est acceptable
- Représenter
Dans le cas d'une entrée de chaîne, elle ne doit contenir que des chiffres, pas de deux-points ou d'autres signes de ponctuation. On peut supposer que les entrées sont toujours valides sur 24 heures:, HHMM
où 0 <= HH <= 23
et 0 <= MM <= 59
. Ignorez la possibilité d'une seconde intercalaire.
Production
Votre programme doit fournir (les retours de fonction stdout
, etc. sont très bien) soit (A) ou (B) , selon que la valeur entrée est ou non une heure cible.
Pour un):
Fournissez deux valeurs numériques dans n'importe quel format raisonnable, telles que:
Sortie à une chaîne avec un délimiteur approprié
Sorties séquentielles entières / chaînes, par exemple,
bash
impression de deux lignes pourstdout
:49 34
Valeurs de retour ordonnées de longueur deux, telles qu'une liste Python, un tableau C, etc.:
[49, 34]
Les valeurs peuvent venir dans l'un ou l'autre ordre. Par exemple, les deux éléments suivants seraient des sorties valides pour une entrée de 1200
:
49 34
34 49
Cependant, l'ordre et le séparateur doivent être les mêmes pour toutes les valeurs d'entrée!
Pour (B):
Produisez tout résultat autrement inaccessible. Le même résultat doit cependant être produit pour les six temps cibles. Les boucles infinies sont exclues.
Exemples d'entrées / sorties
YAY!!!
est utilisé ici comme exemple démonstratif et n'est pas normatif.
Input Output
------ --------
0000 YAY!!!
0020 20 63
0105 65 18
0122 82 1
0123 YAY!!!
0124 1 587
0852 449 139
1111 YAY!!!
1113 2 81
1200 49 34
1234 YAY!!!
1357 83 505
1759 325 263
1800 326 262
1801 327 261
2222 YAY!!!
2244 22 61
2345 YAY!!!
2351 6 9
C'est le code-golf , donc le code le plus court en octets l'emporte. Les failles standard ne sont pas autorisées.
Réponses:
Gelée ,
3433323128 octets3 octets grâce à M. Xcoder
.ị
et³
astuces.Essayez-le en ligne!
Certaines parties sont exactement comme dans la réponse de Jonathan Allan , mais je le poste car je pense qu'il est suffisamment différent de lui et écrit indépendamment sur la base de ma réponse Pyth (et plus court: D). Devrait également pouvoir être amélioré.
L'entrée est un entier, la sortie est un tableau des heures précédentes et suivantes ou le tableau vide pour les heures spéciales.
Explication
Utilisation d'un exemple d'entrée
1200
.d³
convertit le temps de base 100, en heures et en minutes:[12,0]
.ḅ60
convertis de la base 60 pour obtenir le total minutes:720
.;15
it paires avec 15:[720, 15]
.83,588
crée le tableau[83, 588]
.ṁ5
rend la longueur 5:[83, 588, 83, 588, 83]
.¤
combine les deux actions ci-dessus. Juste une technicité.j
se joint à la paire avec la matrice:[720, 83, 588, 83, 588, 83, 15]
._\
soustrait chaque valeur de tableau à partir du premier et obtient des résultats intermédiaires:[720, 637, 49, -34, -622, -705, -720]
.ṠÞ
de manière stable trie ceux - ci par signum:[-34, -622, -705, -720, 720, 637, 49]
.A
prend des valeurs absolues:[34, 622, 705, 720, 720, 637, 49]
.µ
démarre une nouvelle chaîne monadique. Encore une fois, une technicité..ị
prend les derniers et les premiers éléments:[49, 34]
.×Ạ
répète qu'une fois s'il n'y a pas de zéros, ou zéro fois autrement:[49, 34]
.la source
,
en;
car il était récupéré comme un littéral de liste).³
au lieu de100
est autorisée ) LaYAY!!!
valeur est[0, 0]
toujours la même.xẠ
comme filtre zéro car je préfère genre de[]
plus[0, 0]
parce qu'il est plus clairement différent.JavaScript (ES6),
8783 octets4 octets enregistrés grâce à @ l4m2
Prend l'entrée sous forme de chaîne. Renvoie soit
0
un tableau à 2 éléments.Cas de test
Afficher l'extrait de code
Comment?
Nous ne nous soucions pas du résultat de la
.every()
boucle. À condition que l'entrée soit valide, elle sera toujours fausse. Ce qui nous intéresse vraiment, c'est lorsque nous quittons cette boucle.Nous sortons dès que nous trouvons un temps favori
i
(exprimé en minutes) qui est supérieur ou égal au temps de référencek
(le temps d'entréet
converti en minutes). Nous revenons ensuite0
sii == k
ou les 2 retards sinon.la source
t%100+(t/25>>2)*60
=>t-(t/100|0)*40
Befunge-93,
8885868074 octetsEssayez-le en ligne!
Affiche le nombre de minutes depuis la dernière heure préférée, suivi du nombre de minutes jusqu'à la prochaine heure préférée (séparés par la séquence de deux caractères: espace, trait d'union). S'il s'agit déjà d'une heure préférée, un seul zéro est renvoyé.
la source
C, 121 octets
Génère une nouvelle ligne si l'heure est une heure préférée.
Essayez-le en ligne!
la source
Nettoyer , 126 octets
Définit la fonction
?
, priseInt
et retour(Int, Int)
.Lorsque l'argument est un moment favori, il plante le programme appelant avec
hd of []
.Essayez-le en ligne!
la source
Pyth,
484542 octetsEssayez-le en ligne. Suite de tests.
Le code prend une chaîne de temps et sort les heures précédentes et suivantes sous forme de tableau, ou
0
si l'heure est spéciale.Fait intéressant, une approche impérative est également de 42 octets:
Explication
cz2
divise input (z
) en morceaux de deux caractères.sM
les évalue comme des entiers.i
…60
Analyse le tableau à deux éléments résultant en base 60.,83 588
représente le tableau[83, 588]
.*3
le triple[83, 588, 83, 588, 83, 588]
.P
supprime le dernier588
.+
…15
Ajoute15
à la fin..u-NY
part du nombre analysé, en soustrait chaque nombre du tableau et renvoie les valeurs intermédiaires. Ce sont les différences de chaque moment spécial.J
attribue ces différences àJ
.*F
calcule le produit des différences. Ce sera 0 si le temps était spécial.&
arrête l'évaluation ici et renvoie 0 si le temps était spécial.._DJ
stable trie les différences par signe.K
enregistre ce tableauK
.e
prend le dernier élément du tableau._hK
prend le premier élément du tableau et le nie.,
renvoie les deux sous forme de tableau.la source
cz2 60
àc2z60
(ils sont équivalents pour les listes à 4 éléments)Gelée ,
33 3234 octets+3+2 octets à corriger pour que toutes les sorties de temps aimé soient égales.doit être un moyen plus court!
Un lien monadique prenant une liste des quatre chiffres et renvoyant une liste contenant deux entiers
- si c'est une heure appréciée, les deux entrées seront des zéros.
Essayez-le en ligne! ou voir la suite de tests .
Comment?
la source
Husk , 36 octets
Essayez-le en ligne!
Merci à Zgarb de m'avoir expliqué comment les ternaires fonctionnent dans le chat. Essayer de jouer au golf
↑0
, mais je ne l'ai pas fait fonctionner autrement pour une raison quelconque (?). Ceci est ma première réponse Husk non triviale, et en laissant de côté ce qui précède, j'en suis assez satisfait. La valeur utilisée au lieu deYAY!!!
est[]
(mais j'espère que cela changera pour le golf).Explication
la source
Kotlin , 293 octets
Embellie
Tester
TIO
TryItOnline
la source