Publié à l' origine (et supprimé) par @Tlink , qui était très probablement inspiré de cette question StackOverflow .
Comme c'était dommage, il a été supprimé, car cela semblait être un bon défi en général, j'ai pensé que je le publierais avec un formatage et des règles appropriés. (J'ai essayé de contacter @Tlink et d'obtenir son autorisation de le publier, mais il ne répond plus, c'est pourquoi j'ai décidé de le publier moi-même maintenant.)
Entrée: six chiffres.
Sortie: soit la première ou la dernière heure valide au format 24 heures ( 00:00:00
jusqu'à 23:59:59
). (Vous pouvez choisir vous-même si vous sortez la première ou la dernière fois valide.)
Exemple:
Lorsque les entrées le sont 1,8,3,2,6,4
, les heures suivantes peuvent être créées:
12:36:48 12:38:46 12:46:38 12:48:36
13:26:48 13:28:46 13:46:28 13:48:26
14:26:38 14:28:36 14:36:28 14:38:26
16:23:48 16:24:38 16:28:34 16:28:43
16:32:48 16:34:28 16:38:24 16:38:42
16:42:38 16:43:28 16:48:23 16:48:32
18:23:46 18:24:36 18:26:34 18:26:43
18:32:46 18:34:26 18:36:24 18:36:42
18:42:36 18:43:26 18:46:23 18:46:32
21:36:48 21:38:46 21:46:38 21:48:36
23:16:48 23:48:16
Nous allons donc sortir soit 12:36:48
ou 23:48:16
dans ce cas, étant respectivement le premier / dernier.
Règles du défi:
- Indiquez si vous avez indiqué la première ou la dernière fois valide dans votre réponse.
- Les E / S sont flexibles. L'entrée peut être six entiers séparés; une chaîne contenant les six chiffres; une liste / un tableau d'entiers; un seul numéro (éventuellement octal); etc. La sortie peut être une liste / un tableau de chiffres correctement ordonné; une chaîne au format
HH:mm:ss
/HHmmss
/HH mm ss
; chaque chiffre imprimé avec un délimiteur de nouvelle ligne; etc. Votre appel. - Vous êtes autorisé à prendre les chiffres dans l'ordre que vous souhaitez, afin qu'ils puissent déjà être triés du plus bas au plus élevé ou vice-versa.
- Si aucune heure valide ne peut être créée avec les chiffres donnés (c'est-à-dire
2,5,5,5,5,5
), indiquez-le clairement de la manière que vous souhaitez. Peut retournernull
/false
;"Not possible"
; planter avec une erreur; etc. (Vous ne pouvez pas sortir une heure non valide comme55:55:52
ou une autre heure valide comme00:00:00
.) Veuillez indiquer comment il gère les entrées pour lesquelles aucune heure valide ne peut être créée. - Vous n'êtes pas autorisé à afficher toutes les heures valides possibles. Seuls les premiers / derniers doivent être sortis / retournés.
24
pendant des heures (ie24:00:00
), ou60
pour des minutes / secondes (ie00:60:60
) ne sont pas valides. Les plages sont[00-23]
pour les heures et[00-59]
pour les minutes et les secondes.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
Input: Earliest output: Latest output:
1,2,3,4,6,8 12:36:48 23:48:16
2,5,5,5,5,5 None possible None possible
0,0,0,1,1,1 00:01:11 11:10:00
1,1,2,2,3,3 11:22:33 23:32:11
9,9,9,9,9,9 None possible None possible
2,3,5,5,9,9 23:59:59 23:59:59
1,2,3,4,5,6 12:34:56 23:56:41
0,0,0,0,0,0 00:00:00 00:00:00
1,5,5,8,8,8 18:58:58 18:58:58
1,5,5,5,8,8 15:58:58 18:58:55
1,1,1,8,8,8 18:18:18 18:18:18
23:48:16
une sortie valide pour l'exemple?06:08:60
valable, étant donné qu'il y a eu une seconde intercalaire pendant cette minute?60
minutes et les secondes ne sont pas valides. Ranges sont[00-23]
,[00-59]
et[00-59]
. Clarifiera cela dans le défi.Réponses:
C (gcc) ,
186174 octetsEssayez-le en ligne!
-12 octets grâce à Kevin Cruijssen
Probablement pas optimal, mais cela fonctionne. Curieusement, pour une raison quelconque, avec 7 arguments, l'implémentation de gcc sur TIO nécessite que vous les fournissiez réellement ou qu'il segfaults. Sur ma machine, cela n'est cependant pas nécessaire.
Format: G (X, 0,6) -> Y où X est le nombre à 6 chiffres dont les chiffres doivent être utilisés et Y est le nombre à 6 chiffres qui, pris comme un temps (en insérant: de manière appropriée), est minimal.
la source
{0,1,10,100,1000,10000,100000}
au golf{0,1,10,100,1e3,1e4,1e5}
. En outre, vous pouvez jouerfor(I=0;I<F;++I){E=O%10;M=G(O/10,L*10+E,F-1);T=T>M?M:T;O=(O/10)+E*D[F];}
au golffor(I=0;I++<F;M=G(O/10,L*10+E,F-1),T=T>M?M:T,O=(O/10)+E*D[F])E=O%10;
et retirer les supports autour duif
. Essayez-le en ligne 174 octets . Aussi, j'aime leG(O,L,F,T,I,M,E)
. :)...1e3,1e4,1e5}
n'a pas marché. Merci pour la suggestion.Haskell ,
1149686 octetsMaintenant avec une sortie moins stricte. Prend l'entrée sous la forme d'une chaîne de chiffres et compare les permutations aux limites avec la comparaison de liste. Avec les minutes et les secondes, seul le premier chiffre est vérifié. Se bloque et brûle si aucune permutation n'est une heure valide.
Essayez-le en ligne!
la source
Python 2 ,
13111511210910588 octetsEssayez-le en ligne!
Les E / S sont des listes d'entiers
Lance une erreur si aucun temps n'est possible
Alternative:
Python 2 , 88 octets
Essayez-le en ligne!
Renvoie la dernière heure
Renvoie un tuple vide pour les heures non valides
Enregistré
la source
05AB1E ,
2015 octetsEntrez sous forme de chaîne triée.
La sortie est la plus petite durée sous forme de chaîne.
En cas d'absence de solution, une liste vide est la sortie.
Essayez-le en ligne!
la source
JavaScript (ES6),
938988 octetsAttend un tableau de 6 chiffres, triés du plus bas au plus élevé. Renvoie la chaîne à 6 chiffres de la première fois valide ou
false
s'il n'existe aucune solution.Essayez-le en ligne!
Commenté
Nous essayons récursivement toutes les permutations de l'entrée jusqu'à ce que nous trouvions celle qui réussit un test hybride utilisant à la fois l'arithmétique et une expression régulière.
la source
Japt , 17 octets
Prend l'entrée comme une chaîne de chiffres et sort la première fois valide; boucle indéfiniment s'il n'y a pas de temps valide.
Essayez-le
Explication
la source
Rétine ,
7774696562 octetsEssayez-le en ligne! Affiche l'heure la plus ancienne ou la chaîne vide si aucune heure n'est trouvée. Edit: sauvé
58 octets grâce à @TwiNight. Explication:Générez toutes les permutations. Le
:
fonctionne à travers la chaîne au fur et à mesure que les permutations sont générées, se terminant au début.Triez les heures dans l'ordre.
Sortir la première fois valide.
la source
L0
0G
fait.Rouge ,
157124 octetsMerci à Kevin Cruijssen de m'avoir rappelé de lire les descriptions plus attentivement!
Essayez-le en ligne!
Prend une chaîne triée en entrée. Retourne
none
s'il n'est pas possible de prendre le temps.Explication:
la source
sort
début est-il nécessaire? Dans le défi, je déclare: " Vous êtes autorisé à prendre les chiffres dans l'ordre que vous souhaitez, afin qu'ils puissent déjà être triés du plus bas au plus élevé ou vice-versa. "Python 2 , 78 octets
Essayez-le en ligne!
Arnauld a enregistré un octet. Merci!
Attend une liste comme
['1','2','3','4','6','8']
dans l'ordre trié:Émet un entier comme
123648
pour 12:36:48. J'espère que c'est acceptable.la source
62**3
place de240000
?Gelée , 15 octets
Essayez-le en ligne!
Publié après une demande. L'approche est la même que celle de l'autre réponse, mais cette réponse a été développée indépendamment.
la source
Japt ,
3923 octetsJe suis sûr qu'il existe un moyen plus court de le faire, mais je voulais essayer d'utiliser des objets Date dans Japt.
Prend l'entrée comme un tableau trié de nombres, renvoie la dernière heure valide ou une sortie vide s'il n'en existe pas.
Perdu 10
livres d'octets grâce à Shaggy .Essayez-le ici .
la source
Rubis ,
68 67 62 5655 octetsEssayez-le en ligne!
Entrée: tableau trié de chiffres (sous forme d'entiers).
Sortie: tableau de chiffres ou
nil
si aucune solution trouvéela source
eval "
je pense.a*9+b<22
pour un octet.Gelée , 17 octets
Je suis presque certain que ce n'est pas l'approche la plus courte ... j'y reviendrai plus tard :)
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 63 octets
Essayez-le en ligne!
Prend une liste triée de chiffres en entrée. Renvoie
Missing[NotFound]
les entrées non valides.Explication
Trouvez toutes les permutations de l'entrée. Étant donné que l'entrée est triée, il est garanti que toutes les heures valides sont en ordre croissant.
Trouvez la première liste qui correspond ...
Le premier élément, marqué
a
, est égal à 0, 1, ou 2, et étiqueter le deuxième, troisième et cinquième élémentsb
,c
etd
respectivement ...... tel que
a*b
moins de 10, etd
etc
moins de 6, avecd >= c
.L'astuce est que pour tous les nombres
00
à24
, le produit des deux chiffres est au plus 9, et les possibles nombres invalides25
à29
(puisque nous forçons le premier chiffre à 0, 1 ou 2) ont le produit d'au moins 10.la source
Pyth , 37 octets
Suite de tests
Explication:la source
Perl 5 avec
-palF
, 73 octetsEssayez-le en ligne!
Sort comme
HHmmss
et sort une ligne vierge pour les entrées invalides.Chaque réponse que j'ai faite récemment a utilisé
glob
ing pour des permutations ... Bizarre!la source
Bash + GNU sed,
83,72, 69 octetsseq 0 86399|sed "s/^/date +%T -ud@/e;h;`printf s/%d//\; $@`/\w/d;x;q"
Comment ça marche
Pré-générer toutes les chaînes de temps possibles, pour les horodatages dans la plage 0 à 86399, en utilisant la commande GNU-sed e (xecute) +
date
.%seq 0 86399|sed "s/^/date +%T -ud@/e;h;"
Générez un
sed
script avec 6 commandes de substitution séquentielles, pour chaque chiffre d'entrée.%echo sed `printf s/%d//\; $@`
Ensuite, appliquez des substitutions, supprimez toutes les lignes d'entrée qui ont au moins un chiffre à gauche, imprimez la première ligne correspondante (la chaîne de temps d'origine est extraite de l'espace d'attente avec
x
).Tester
Essayez-le en ligne!
la source
Kotlin ,
396391389 octetsJe ne sais pas comment rendre cela plus petit. Je pense que c'est le double de ce qui est possible. Produit le plus tôt possible. Merci à Kevin pour 7 octets!
Essayez-le en ligne!
la source
var l=0>1
etvar e=1>0
? Aussi, pourquoi sontl=l
-ilse=e
nécessaires? Deux choses qui semblent travailler au golf sontvar e=1>0
àvar e=!l
et supprimer l'espace avant"None"
. De plus, toute sortie falsey est très bien, elle"None"
peut donc aussi être juste0
."0"
peut être juste0
0
sans erreur. Et votre fonction actuelle ne spécifie pas un type de retour pour autant que je sache, donc ne reviendra-t-elle pas implicitement de toute façon? PS: Je ne connais pas du tout Kotlin, j'ai juste essayé sans les guillemets et les résultats étaient les mêmes. ;) Peut-être que quelque chose d'autre ne fonctionne pas à cause de cela, que je ne connais pas.MATL ,
3130 octetsEssayez-le en ligne!
L'entrée est de 6 entiers, la sortie est le minimum d'heures, de minutes et de secondes dans un tableau. Crashes pour les entrées où aucun temps n'est possible.
(-1 octet grâce à @Luis Mendo.)
la source
2&A
par!A
, car la matrice binaire ne sera jamais un vecteur lignePerl 6 , 43 octets
Essayez-le en ligne!
Attend un tableau d'entrée trié. Renvoie
Nil
une entrée non valide.la source
Stax , 15 octets
Exécuter et déboguer
Il faut une chaîne de chiffres triés pour la saisie. Il renvoie la première permutation qui satisfait quelques critères.
la source
Rétine ,
5847 octetsEssayez-le en ligne!
L'entrée est de 6 chiffres dans l'ordre trié. La sortie est de 6 chiffres représentant la première heure valide ou une chaîne vide si aucune heure valide n'existe.
EDIT: j'étais un idiot, -9 octets
Explication
Algorithme
Par souci de concision, définissons un chiffre bas comme 0-5 et un chiffre haut comme 6-9.
Commencez par réorganiser les chiffres de façon à ce que le «bas» ou le «haut» de chaque position soit correct. La disposition correcte, pour chaque nombre de chiffres élevés dans l'entrée:
Étant donné que tout réarrangement échouerait, la vérification finale de l'entrée a 4+ chiffres élevés, nous pouvons ignorer complètement ce cas.
Ensuite, triez les bas et les hauts individuellement. Combiner avec le réarrangement, cela donne la valeur la plus basse qui satisfait les contraintes des minutes et des secondes. Cela donne donc la première heure valide, s'il en existe une.
Enfin, vérifiez si nous avons du temps valide. Sinon, jetez la chaîne.
Programme
Correspond
LHH
et échange les deux premiers chiffres de ce (devientHLH
), et répétez cela jusqu'à ce qu'il n'enLHH
existe plus . Cela donne la bonne disposition.En fait, j'ai menti. Aucun tri n'est nécessaire car 1) l'échange ne se produit qu'entre des chiffres adjacents et uniquement entre un bas et un haut; et 2) l'entrée est triée. Ainsi, les bas et les hauts individuellement sont déjà triés.
Ne conserve la chaîne que si elle est valide
la source