Le sablier
Ce sablier a 60 "sables de temps", et il remplit complètement chaque chambre. L'horloge a 19 caractères de largeur et 13 caractères de hauteur. Chaque chambre a 5 rangées de sable et une rangée au centre pouvant contenir 1 sable. La rangée supérieure peut contenir 17 sables, la suivante 15 et ainsi de suite (voir ci-dessous). Les sables tombent dans la chambre inférieure à raison d'un sable par seconde.
START 3 SECONDS LATER 38 SECONDS LATER
███████████████████ ███████████████████ ███████████████████
█.................█ 17 █.............. █ 14 █ █ 0
██...............██ 15 ██...............██ 15 ██ ██ 0
███.............███ 13 ███.............███ 13 ███....... ███ 7
█████.........█████ 09 █████.........█████ 09 █████.........█████ 09
███████.....███████ 05 ███████.....███████ 05 ███████.....███████ 05
█████████.█████████ 01 █████████.█████████ 01 █████████.█████████ 01
███████ ███████ ███████ . ███████ ███████ . ███████
█████ █████ █████ . █████ █████ . █████
███ ███ ███ . ███ ███.... ███
██ ██ ██ ██ ██...............██
█ █ █ █ █.................█
███████████████████ ███████████████████ ███████████████████
Le défi
Affichez le sablier (aucun chiffre ni titre n'est requis) après un certain temps (0 ≤ t ≤ 60).
Règles de codage
- Le sablier doit être exactement comme indiqué ici. Vous pouvez remplacer le
█
caractère et / ou le.
caractère par tout ce que vous voulez, selon votre langue (problèmes de compatibilité Unicode, ASCII). - L'entrée doit être un nombre tel que 45 ou 7. Affichez l'horloge après ces nombreuses secondes.
- La sortie peut être affichée ou sauvegardée dans un fichier. Comme indiqué ci-dessus, aucun texte ni étiquette supplémentaire n'est requis - il ne nous manque que le sablier.
- Si l'utilisateur entre t> 60, vous n'avez pas à gérer l'erreur.
Points
- Le code le plus court gagne.
Réponses:
JavaScript ( ES6 ), 203
208 233 270 256caractèresModifier Révisé en utilisant une boucle au lieu d'une séquence d'appels.
Modifier Ajout des rangées supérieure et inférieure manquantes.
Une fonction renvoyant la sortie. Exécutez l'extrait de code dans Firefox pour tester.
la source
setTimeout( tick, 1000);
Python 2, 200
xnor a créé une version de 197 octets dans le chat .
Je voudrais poster une explication, mais j'ai perdu la trace de la façon dont cela fonctionne réellement ...
Aussi, voici une version animée avec malédictions:
la source
Python 2.7,
362356347Sortie à 38 secondes:
la source
C 544
Voici ce que j'ai jusqu'à présent pour une solution en C.
Compilé avec la commande suivante:
Certes, ce langage a beaucoup de volume - inclure la déclaration était un peu handicapant, mais je cherchais vraiment une excuse pour m'exercer à utiliser C.
J'espère que vous aimez ma solution et laissez-moi savoir si vous voyez des façons de s'améliorer.
la source
for
au lieu dewhere
,?:
au lieu deif else
, les variables globales int n'ont pas besoinint
,include
pas besoin. (J'aime tes maths)r,i,y,x,b,d,n[]={0,43,28,15,6,1,0,1,5,13,25,39,0};char H[14][20];main(s,a)char**a;{for(s=atoi(a[1]);y<13;){b=x=i=0;d=abs(y-6);d+=3<d?3:d;d=9-d?9-d:10;r=s>55?59-s:s>38?4:s>24?3:s>12?2:s>4?1:r;for(;b<19;)H[y][b++]=35;for(;x<19-2*d;x++)H[y][x+d]=(x>s-n[y]?" .":". ")[y>6];for(;i<r;)H[7+i++][9]=46;H[y++][b]=10;}puts(H);}
(attention, d'étranges caractères invisibles sont ajoutés à de longs commentaires comme celui-ci)Matlab, 252 octets
L'idée est de construire une matrice qui ressemble à ceci:
À partir de là, il est facile de remplir les entrées avec les chaînes dépendantes
n
(en remplissant toutes les entrées qui sont plus grandesn
et plus petitesn+60
qu'avec des points)Pour
n=38
nous obtenons cette sortie:la source
Java, 712
La saisie est effectuée à partir de la ligne de commande. Traite les deux valeurs négatives pour le temps ainsi que plus grande que nécessaire.
sortie:
Il remplit le sable du centre en expansion. Je peux probablement jouer davantage si je suis paresseux avec la façon dont il remplit la moitié inférieure et vide la moitié supérieure. Mais pour l'instant je l'aime bien.
la source
Haskell 512 octets
Contribution
m 55
Sortie
Entrée
m 48
sortiela source
++
. Vous pouvez aussi sauvegarder des octets en prédéfinissantlength
etreverse
.C #, 382
410il pourrait encore être possible de le réduire de quelques octets ...
Fiddler - 38sec
la source
int u=60-22
et pas seulementint u=38
??Ruby:
196190186185184 caractèresCW car non conforme aux échantillons postés car cela consomme du sable en partant de la gauche. Surtout juste une démonstration de
String.[]=
méthode.Échantillon échantillon:
Ruby: 215 caractères
Ceci génère la sortie requise exacte:
Échantillon échantillon:
la source