introduction
Imaginez que la ligne de caractères soit en fait deux lignes. Ligne supérieure - points - représente les heures (système sur 24 heures), tandis que bas - virgules - représente les minutes . Un personnage peut représenter une heure, une minute ou les deux , dans la mesure du possible.
Au début, vous devriez probablement convertir les minutes depuis minuit en heures et minutes .
Le résultat est la chaîne indiquant l'heure actuelle au format "point". Le nombre de points (l' apostrophe compte ici comme un point et sera appelé ainsi! ) Est le nombre d'heures depuis minuit et le nombre de virgules est le nombre de minutes. Je vais montrer quelques exemples pour le rendre clair.
- (Remarque) hh: mm -
result
- (Heures seulement) 05:00 -
'''''
- (Seulement minutes) 00:08 -
,,,,,,,,
- (heures <minutes) 03:07 -
;;;,,,,
- (heures> minutes) 08:02 -
;;''''''
- (heures = minutes) 07:07 -
;;;;;;;
- (début de la journée) 00:00 -
( résultat vide )
Notez que le caractère "les deux" peut être utilisé 23 fois maximum - pour 23: xx, où xx est égal à 23 ou plus.
Symboles
Si le caractère doit (voir règle 5) être échappé dans votre langue, vous pouvez le changer en alternative. Si ces alternatives ne suffisent pas, vous pouvez utiliser d'autres symboles, mais restez raisonnable. Je ne veux pas que fuir soit un obstacle.
;
(point - virgule) - marqueur pour les heures et minutes (alt::
)'
(apostrophe) - marqueur des heures (alt:'``°
),
(virgule) - marqueur de minutes (alt:.
)
Règles supplémentaires
- Le code avec le moins d'octets gagne!
- Vous devez utiliser les deux symboles chaque fois que cela est possible. Pour 02:04 le résultat ne peut pas être
'',,,,
, ni;',,,
. Ça doit être;;,,
- Entrée - peut être un paramètre script / application, une entrée utilisateur (comme readline) ou une variable dans le code
3.1. Si la variable code interne est utilisée, sa longueur doit être la plus longue possible. C'est1439
(23:59), donc ça ressemblerait àt=1439
- La partie commune qui est symbolisée par le caractère "les deux" (12 en 12:05, 3 en 03:10) doit être placée au début de la chaîne
- Les symboles peuvent être remplacés par des alternatives uniquement s'ils doivent être insérés dans votre code.
- L'entrée est donnée en minutes après 00:00 . Vous pouvez supposer qu'il s'agit d'un entier non négatif.
Cas de test
Input: 300
Output: '''''
Input: 8
Output: ,,,,,,,,
Input: 187
Output: ;;;,,,,
Input: 482
Output: ;;''''''
Input: 427
Output: ;;;;;;;
Input: 0
Output: (empty)
1439
Est en fait23:59
et pas1339
. (23 x 60 + 59).Réponses:
Pyth, 19 octets
Suite de tests
la source
CJam,
222019 octetsPrend la contribution de STDIN:
Testez-le ici.
Explication
C’était vraiment chanceux de voir à quel point les choses s’allaient bien ici, en particulier l’affectation des heures
'
et des minutes à un ordre,
tel que l’ordre des heures et des minutes de la pile correspond à la représentation sous forme de chaîne du personnage.C'est le seul bloc de 3 octets que j'ai trouvé jusqu'à présent. Il y avait pourtant des tonnes de solutions à 4 caractères:
la source
GNU Sed, 37
Le score inclut +1 pour l'
-E
option sed.Je n’ai pas été particulièrement impressionné par la golfinesse de ma réponse , alors j’ai pensé que j’essaierais avec sed pour le plaisir.
L'entrée est unaire, selon cette méta-réponse .
Essayez-le en ligne
la source
Python 2, 56 octets
Une fonction qui imprime (un caractère plus court que
t=input();
).La méthode est similaire à celle de Loovjo . Le nombre de
,
est différent entre les minutes et les heures, avec un minimum implicite de 0. En effet'
, c'est la négation. For;
, calcule l'min
implicitement en prenant jusqu'à plusieurs;
heures, puis en le tronquant au nombre de minutes.Il enregistre les caractères à sauvegarder
d
, mais pas le nombre d'heures et de minutes ici. L'analogue avec lambda avait deux caractères plus longs (58), donc les affectations variables en valent la peine.Le traitement de l'entrée directement n'a pas non plus enregistré de caractères (58):
Une autre stratégie de découpage, beaucoup plus longue (64):
la source
Rétine , 24
Port trivial de ma réponse sed .
L'entrée est unaire, selon cette méta-réponse .
Essayez-le en ligne.
la source
Pure Bash (aucun utilitaire externe), 103
Merci à @ F.Hauri pour la sauvegarde de 2 octets.
la source
$1
et$2
enp()
écrivantp , $c
à la ligne 3.printf "%s"
, avoirc
vide fonctionnera bien (sans être réutilisé)C, 119 octets
Détaillé
la source
putchar
les littéraux & entiers comme des caractères permet d'économiser un octet. Le fait de tirer les points-virgules à l'intérieur de la macro en économise deux autres :)while
macro #define. -1 octetHaskell,
68 à66 octetsExemple d'utilisation:
La partie intelligente ici est que
replicate
la chaîne vide sera retournée si la longueur donnée est négative ou égale à zéro afin que je puisse l'appliquer aux deux différences et que seule la chaîne positive apparaisse. La première partie est facile, car le nombre de points-virgules n'est que le minimum des deux.zipWith
Applique ensuite la fonction aux éléments correspondants.EDIT: réalisé que j'utilisais le mauvais personnage pendant quelques minutes
EDIT 2: 2 octets sauvés grâce à @Laikoni
la source
concat$
parid=<<
.JavaScript (ES6) 69
la source
Powershell,
9985 octetsparam($n)";"*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+"'"*(($h-$m)*!$b)+","*(($m-$h)*$b)
En utilisant la méthode de Loovjo, voici ma mise en œuvre de powershell.
non-golfé
14 octets sauvés grâce à AdmBorkBork
la source
$m
et$h
déclarations en elle, puis en utilisant la multiplication booléenne. Ainsi --param($n)';'*(($m=$n%60),($h=$n/60))[($b=$m-gt$h)]+'°'*(($h-$m)*!$b)+','*(($m-$h)*$b)
Python 3, 98 octets
Probablement pas la meilleure réponse, mais c'était très amusant!
la source
Python 2, 61 octets
Explication:
la source
PHP, 81 octets
J'ai opté pour la variable, car elle est plus courte que lire
STDIN
ou prendre des arguments en ligne de commande.la source
240
. Essayez$i>=min($h,$m)?$h<$m?",":"'":";"
(+1 octet). Ou utilisezfor($_=1439;$i<max($h=0|$_/60,$m=$_%60);)echo"',;"[$i++<min($h,$m)?2:$h<$m];
(76 octets). Btw: la citation simple rend-r
impossible; vous devez donc utiliser backtick pendant des heures si vous êtes dans une chaîne ou°
autonome (ne nécessite pas de guillemets -> -1 octet).JavaScript (ES6),
7771 octetsla source
Perl 6,
103101989769 octetsSort plusieurs tableaux, mais putain,profitez-en. Comme d'habitude, toutes les opportunités de golf sont appréhendées.Edit: -2 octets: j'ai eu le courage de supprimer quelques transformations.
Edit2: -3 octets en supprimant les tableaux.
Edit3: -1 octet pour imprimer au format correct, en utilisant "lambdas" et en supprimant les parenthèses.
Edit4: (désolé les gars) abusant de cela heures - minutes devraient retourner 0 et l'inverse. Supprimé si déclarations. Supprimez ensuite les crochets, puis réalisez que je n'ai pas du tout besoin du lambda. -28 octets :)
Woah je m'améliore à cela.
la source
C, 141 octets
la source
h>0||m>0
. Ensuite, vous n’avez besoinh--;m--;
que d’une seule fois à chaque itération et le{}
forif/else
deviendrait obsolète.else if(h&&!m)
vous pouvez simplement avoirelse if(h)
if
etelse
.scanf()
.%24
soit nécessaire - l'entrée maximale est de 23h59.Gema, 119 caractères
Échantillon échantillon:
la source
Matlab: 89 octets
Tester:
la source
SmileBASIC, 59 octets
A expliqué:
Cela semble assez terrible, car la partie inférieure de
;
n'est pas identique,
à celle de la police de SmileBASICla source
PHP, 81 octets
quelques solutions supplémentaires:
Courez avec
echo <time> | php -R '<code>'
.Remplacer
1439
par l'entrée, enregistrer dans un fichier, exécuter.la source
Ruby, 50 caractères
Grâce à:
J'ai attendu si longtemps pour l'utiliser
Numeric.divmod
, juste pour me rendre compte que c'est horriblement long.Échantillon échantillon:
la source
(?;*h=t/60)[0,m=t%60]
",',"[0<=>m-=h]*m.abs
05AB1E , 25 octets
Essayez-le en ligne!
60‰vy„'.Nè×}
peut certainement être raccourci, je ne pouvais tout simplement pas comprendre, et je doute que je serai capable de gagner 7 octets pour gagner avec cette approche à moins d’une version vectorielle de×
.Exemple (avec une entrée égale à 63):
D60÷''×s60%'.ׂ.BøJ„'.';:ðK
C'était ma version originale, mais c'est encore PLUS coûteux que divmod.60‰WDµ';ˆ¼}-¬0Qi'.ë''}ZׯìJ
encore une autre méthode que j'ai essayée ...la source
dc , 95 octets
Essayez-le en ligne!
la source
Java 8,
1019986 octetsExplication:
Essayez ici.
la source