Le code le plus court pour générer les heures correctes sur les horloges gagne.
Vous êtes un voyageur temporel aguerri et vous êtes connu pour vous arrêter à de nombreuses planètes au cours de vos journaux. Chaque planète tourne à un rythme différent et pour cette raison, la durée d'une journée est différente de notre journée habituelle de 24 heures. En conséquence, les planètes utilisent des horloges avec différents nombres d'heures. Les heures sur une horloge avec x heures sont disposées de manière similaire à la nôtre (1, 2, 3, ..., x ) avec le nombre tournant dans le sens horaire et x étant en haut.
De plus, chaque planète a un nombre différent de minutes en une heure et un nombre différent de secondes en une minute. Vous recevrez une heure de début et un nombre de secondes écoulées à partir desquelles vous devrez déterminer l'heure de fin.
L'entrée peut être prise directement à partir d'un fichier passé en argument ou en entrée standard. La première ligne d'entrée sera le nombre d'horloges à traiter. Après cela, chaque horloge a trois lignes d'entrée qui contiennent des entiers au format suivant:
x y z
h m s
t
La signification de chaque lettre est ci-dessous.
x = Le nombre d'heures dans une journée (2 <= x <= 99)
y = Le nombre de minutes dans une heure (2 <= y <= 100)
z = Le nombre de secondes dans une minute (2 <= z <= 100)
h = L'heure de l'heure de démarrage (1 <= h <= x)
m = La minute de l'heure de démarrage (0 <= m <y)
s = La seconde de l'heure de démarrage (0 <= s <z)
t = Le nombre de secondes qui se sont écoulées
La sortie doit être l'heure de fin de chaque horloge après que t secondes se sont écoulées depuis l'heure de début. Votre sortie doit être formatée en temps d'horloge standard (HH: MM: SS). Les chiffres doivent être remplis, si nécessaire, pour garantir que tous les chiffres sont à deux chiffres.
Cas de test
Contribution
2
5 20 10
1 10 5
2633
6 25 5
6 0 3
290
Production
04:13:08
02:08:03
Contribution
1
14 17 11
12 16 10
1530
Production
07:03:00
Contribution
2
8 40 25
3 1 15
10620
14 15 20
1 14 0
-580
Production
05:26:10
14:00:00
Réponses:
GolfScript - 50 caractères
Les valeurs (H / M / S) sont collectées en les déplaçant vers l'avant de la pile (
])\
). L'heure de sous-dépassement à 0 est gérée avecor
. Le remplissage zéro est géré avec100+`(;
, bien que je suppose que0`\+-2>
c'est la même longueur.la source
Python, 142 caractères
la source
for i in ' '*input()
vous pouvez réellement utiliser à lai
place de' '
inR()+' '+R()
, en enregistrant deux caractères.exec"x,y,z,h,m,s=map(int,(R()+' '+R()).split());t=input()+h*y*z+m*z+s;print'%02d:%02d:%02d'%((t/y/z-1)%x+1,t/z%y,t%z);"*input()
t/y/z%x or x
est un caractère plus court.GolfScript
6260 caractèresEdit: J'ai réussi à obtenir le tableau anciennement stocké dans un pour résider sur la pile, il faut un peu de commutation supplémentaire de cette façon, donc aucune amélioration majeure.
Version 62:
Je suis sûr que cela peut être fait beaucoup mieux, je ne pouvais pas penser à mieux.
1: Faites un tableau de toutes les entrées, sélectionnez le premier élément, regroupez le reste en blocs de 7.
a / 13: Consommez le premier nombre de l'entrée pour exécuter la boucle autant de fois.
2: Stockez un tableau vide dans a.
3: Choisissez un bloc de 7 et développez-le à 7 numéros individuels.
b / 8: Exécutez une boucle 3 fois, une fois pour chacune des secondes, minutes et heures.
4: Additionnez les deux derniers nombres ensemble, pour la première itération qui est les secondes et le temps à décaler, pour les suivants ce sont les minutes et les heures avec le débordement du cycle précédent. Faites une deuxième copie du résultat.
5: Divisez la copie par sa limite pour produire le débordement et reculer le résultat d'un espace.
6: Calculez le modulo de la division précédente pour produire une partie du résultat.
7: Ajoutez cette partie au tableau a.
9: Retirez le dépassement d'heure et les limites des deuxième et minute de la pile.
10: Prenez la partie horaire d'un, si elle est nulle, remplacez-la par la limite horaire, remettez-la dans le tableau.
11: Pour chaque élément de a, placez «0» devant, convertissant ainsi en chaîne, et jetez tout sauf les 2 derniers caractères.
12: Réduisez le tableau en une seule chaîne délimitée par «:», placez une nouvelle ligne et déplacez le tableau contenant les travaux restants à l'avant de la pile, préparant ainsi la prochaine itération.
la source
J
(172/35)13799107Passe maintenant tous les cas de test donnés.
172 est le tout; 35 est le nombre de caractères que je donnerais si j'étais vraiment arrogant et refusais de faire l'IO comme indiqué. (Je l'ai quand même légèrement modifié; horloges est une fonction qui prend un nom de fichier destiné à être utilisé de manière interactive dans J.)J'espère bien que c'est beaucoup plus facile en J que je ne le pense.
Edit: Compris comment améliorer l'analyse syntaxique des entrées dans J, éliminé charsub, basculé vers l'invocation et la sortie de la ligne de commande.
Édition 2: modification de l'entrée de la fonction centrale dans la matrice 3x3, suppression de nombreuses parenthèses embêtantes, suppression des noms
Modifier 3: 0-heures traitées.
Explication:
Mon J n'est toujours pas génial, et IO est une douleur comme toujours. Donc, des morceaux de cela sont loufoques.
1 0 0+{.#:{.&{:+{.#.1 0 0-~1&{
prend une matrice de trois par trois (composé des lignes d'entrée, les deux derniers éléments sont des ordures)1 0 0
)".;._2(1!:1)3
obtient une matrice de 3 colonnes de l'entrée avec 0 dans les positions non remplies.,&}.$~,&3 3&{.&{.
coupe la première ligne de l'entrée et façonne les lignes restantes en Nx3x3."2
modifie le verbe central pour prendre les cas 3x3.10 10&#:
donne 2 chiffres décimaux pour chaque nombre donnant une matrice Nx3x2. (Obtenir des 0 pour le rembourrage était une douleur .),"2":"0
convertit les chiffres en ASCII (Nx3x2x1) et défile la dernière colonne, donnant à nouveau Nx3x2 en ASCII.LF,~"1([,':',])/"2
insère: entre chaque élément et les ajoute (Nx7) et ajoute un saut de ligne par pour (Nx8).4(1!:2)~
imprime chaque ligne.la source
Haskell, 159 caractères
divMod
ne vaut pas la peine!foldr
approche élégante (qui fonctionne pour les systèmes de temps avec un certain nombre de composants!)f
tail
la source
Rubis, 128 caractères
Copies sans vergogne du python:
la source
Haskell - 219 caractères nécessaires
la source
PHP (241 caractères)
Prend l'entrée d'un fichier passé en argument.
Et non golfé:
Et juste pour noter, sans sceaux (le signe dollar), cela donne 205 caractères.
la source
Java,
486371 caractèresVersion non golfée: http://pastebin.com/6LiTdGyi
Cela donne la même sortie que dans les exemples fournis.
Mais je ne suis pas d'accord sur ce comportement: une horloge n'a pas autant de chiffres qu'il y a d'heures dans une journée: elle en a la moitié.
Cela signifie que si vous ajoutez 3600 secondes à 12:50:12, il devrait imprimer 01:50:12, pas 13:50:12 (dans notre système standard 24/60/60).
J'ai géré cela dans mon code, mais je l'ai commenté dans ma solution pour qu'il corresponde aux exemples. Bien sûr, si vous considérez cela, les temps d'entrée peuvent être considérés comme ambigus, sauf si vous ajoutez un marqueur AM / PM.
Mais dans tous les cas, le puzzle présente une incohérence: si 00 heures doivent être remplacées par x, alors heures> (x / 2) doivent être remplacées par heures - (x / 2).
Edit: Version golfée:
la source
package
déclarations; 2. ne pas utiliserfinal
; 3. utiliser des noms de variable à un caractère et des noms de classe; 4. utilisez généralement les moyens les plus intelligents pour rendre le code le plus court possible.int[]c={i(s),i(s),i(s),i(s),i(s),i(s),i(s)}
, vous voudrez peut-être utiliserint a=i(s),b=i(s),c=i(s),d=i(s),e=i(s),f=i(s),g=i(s)
. Oui, vous ajoutez 11 caractères ici, mais vous enregistrez trois caractères chaque fois que vous utilisezc[x]
, ce qui signifie qu'après 4 de ces instances, il est rentabilisé. J'ai compté 13 de ces instances, ce qui signifie que vous enregistrez 28 caractères au total!Bash - 189 caractères:
la source
printf
et ses arguments et entre ces arguments ...PHP,
229228 caractèresLe fichier doit être passé dans le script comme argument
Non golfé:
Journal des modifications:
229 -> 228: Pas besoin de régler le temps restant lors de la division des heures
la source
Bash, 139 caractères
la source
Scala 184 caractères:
En contradiction avec les règles, je prétends que
La sortie ne doit pas être
mais
et c'est ce que mon code produit. Veuillez me montrer une horloge qui affiche 24:00:00 sur terre au lieu de 00:00:00 - peut-être 24:59:59. Ou attendez-vous la séquence:
au lieu de
la source
Python 2 , 137 octets
Essayez-le en ligne!
Un peu plus court que le autre réponse Python , mais prend un chemin différent pour y arriver.
Explication non golfée:
la source
Haskell (
815624 caractères non golfés, lignes blanches exclues)Le mien imprime 00:00:00 au lieu de 12:00:00 ou similaire pour les heures de type "minuit".Edit: changé cela.Aurait pu résumer quelques choses de plus, mais w / e. Il ignore complètement la première ligne du fichier d'entrée et vous crie généralement pour les fichiers mal formatés.
la source