Die Sanduhr
Diese Sanduhr hat 60 "Sandstunden" und füllt jede Kammer vollständig aus. Die Uhr ist 19 Zeichen breit und 13 Zeichen hoch. Jede Kammer hat 5 Sandreihen und in der Mitte befindet sich eine Reihe, die 1 Sand aufnehmen kann. Die oberste Reihe kann 17 Sande aufnehmen, die nächste 15 und so weiter (siehe unten). Sand fällt mit einer Geschwindigkeit von einem Sand pro Sekunde in die untere Kammer.
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
███████ ███████ ███████ . ███████ ███████ . ███████
█████ █████ █████ . █████ █████ . █████
███ ███ ███ . ███ ███.... ███
██ ██ ██ ██ ██...............██
█ █ █ █ █.................█
███████████████████ ███████████████████ ███████████████████
Die Herausforderung
Zeigen Sie die Sanduhr nach einer bestimmten Zeit an (keine Nummern oder Überschriften erforderlich) (0 ≤ t ≤ 60).
Codierungsregeln
- Die Sanduhr sollte genau so aussehen, wie hier gezeigt. Sie können das
█
Zeichen und / oder das.
Zeichen durch das ersetzen, was Sie für Ihre Sprache benötigen (Unicode-, ASCII-Kompatibilitätsprobleme). - Die Eingabe sollte eine Zahl wie 45 oder 7 sein. Zeigen Sie die Uhr nach diesen vielen Sekunden an.
- Die Ausgabe kann entweder angezeigt oder in einer Datei gespeichert werden. Es sind keine zusätzlichen Texte oder Beschriftungen wie oben gezeigt erforderlich - nur die Sanduhr ist alles, was wir brauchen.
- Wenn der Benutzer t> 60 eingibt, müssen Sie den Fehler nicht behandeln.
Punkte
- Kürzester Code gewinnt.
Antworten:
JavaScript ( ES6 ), 203
208 233 270 256ZeichenBearbeiten Überarbeitet mit einer Schleife anstelle einer Abfolge von Aufrufen.
Bearbeiten Die fehlenden oberen und unteren Zeilen wurden hinzugefügt.
Eine Funktion, die die Ausgabe zurückgibt. Führen Sie das Snippet zum Testen in Firefox aus.
quelle
setTimeout( tick, 1000);
Python 2, 200
xnor hat im Chat eine 197- Byte-Version erstellt .
Ich würde eine Erklärung posten, aber ich habe den Überblick verloren, wie es tatsächlich funktioniert ...
Hier ist auch eine animierte Version mit Flüchen:
quelle
Python 2.7,
362356347Ausgabe bei 38 Sekunden:
quelle
C 544
Folgendes habe ich bisher für eine C-Lösung.
Kompiliert mit folgendem Befehl:
Zugegeben, diese Sprache hat eine Menge Masse - die Aussage war ein kleines Handicap, das direkt aus den Blöcken kam, aber ich suchte wirklich nur nach einer Ausrede, um mit C zu üben.
Ich hoffe, Ihnen gefällt meine Lösung und Sie können mich über Verbesserungsmöglichkeiten informieren.
quelle
for
stattwhere
,?:
stattif else
, globales int Variablen nicht brauchtint
,include
nicht benötigt. (Ich mag deine Mathematik)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);}
(Vorsicht, merkwürdige unsichtbare Zeichen werden zu langen Kommentaren wie diesem hinzugefügt)Matlab, 252 Bytes
Die Idee ist, eine Matrix zu konstruieren, die so aussieht:
Von dort aus ist es einfach, die Einträge mit den abhängigen Zeichenfolgen zu füllen
n
(alle Einträge, die größer alsn
und kleiner als sind, werdenn+60
mit Punkten gefüllt ).Denn
n=38
wir bekommen diese Ausgabe:quelle
Java, 712
Die Eingabe erfolgt über die Befehlszeile. Behandelt sowohl negative Werte für die Zeit als auch größere als erforderlich.
Ausgabe:
Es füllt den Sand von der Mitte nach außen aus. Ich kann wahrscheinlich mehr Golf spielen, wenn ich faul bin, wie es die untere Hälfte füllt und die obere Hälfte leert. Aber im Moment gefällt es mir ganz gut.
quelle
Haskell 512 Bytes
Eingang
m 55
Ausgabe
Eingabe
m 48
Ausgabequelle
++
. Sie können auch einige Bytes sparen, indem Sielength
und vordefinierenreverse
.C #, 382
410es könnte immer noch möglich sein, es um ein paar Bytes zu reduzieren ...
Fiddler - 38 Sek
quelle
int u=60-22
und nicht nurint u=38
??Ruby:
196190186185184 ZeichenCW stimmt nicht genau mit den angegebenen Proben überein, da dieser von links beginnend Sand verbraucht. Meist nur eine Demonstration der
String.[]=
Methode.Probelauf:
Ruby: 215 Zeichen
Dies erzeugt die genau erforderliche Ausgabe:
Probelauf:
quelle