Ich bin müde, aber ich kann nicht einschlafen. Hilf mir, Schafe zu zählen.
Lassen Sie bei einer Eingabe von N (positive ganze Zahl) N Schafe über einen ASCII-Zaun springen, wie in der folgenden Abbildung dargestellt. Es sollte immer nur ein Frame angezeigt werden:
o |-|
──|-|── 0
o|-|
──|-|── 0
o
|-|
──|-|── 0
|-|o
──|-|── 0
|-| o
──|-|── 0
o |-|
──|-|── 1
o|-|
──|-|── 1
o
|-|
──|-|── 1
Die Zählung sollte auf der unteren rechten Seite des "Bodens" erfolgen. Nachgestellte und führende Leerzeichen und Zeilenumbrüche sind zulässig. Wenn Ihre Sprache Schwierigkeiten hat, den Bildschirm für jeden Frame zu löschen, können Sie ausreichend neue Zeilen hinzufügen, um den Bildschirm zu löschen. Bitte geben Sie in Ihrer Antwort an, wie viele Zeilen Sie dafür hinzufügen. Das Programm sollte enden, wenn sich das N-te Schaf im fünften Floortile befindet.
Ich muss morgen früh aufstehen, damit der kürzeste Code in Bytes gewinnt. Bitte reichen Sie eine Funktion oder ein vollständiges Programm ein. Es gelten Standardlücken.
N=3
den letzten Frame ein Schaf am rechten Ende enthalten und der Zähler wird immer noch sagen2
. Ist das korrekt?Antworten:
MATL ,
605653 BytesDie Animation mit dem obigen Code läuft sehr schnell. Die folgende Version enthält eine Pause, um die Animation langsamer und damit übersichtlicher zu gestalten (für die Challenge nicht erforderlich). Dies kostet 4 weitere Bytes:
Probieren Sie es bei MATL Online! Der Dolmetscher ist eine Beta; Aktualisieren Sie die Seite, wenn es nicht funktioniert.
Oder sehen Sie sich eine Aufzeichnung vom Offline-Compiler an:
Erläuterung
quelle
JavaScript (ES6),
120 bis124 ByteDer zuletzt berechnete Frame wird zuerst angezeigt. Dank dessen ist die Sprungzahl
n-1
In
alert
, die Zeichen haben eine andere Breite, so dass es so aussieht, als ob sie kaputt sind.Code-Snippet anzeigen
Vorherige Antwort:
120 Bytes, die Sprungnummer ist falsch, da sie bei 1 statt bei 0 beginnt
quelle
alert
. Ich habe das gleiche Ergebnis wie Chrom mit Rand, und es ist schlimmer mit Firefox.JavaScript (ES6),
144142 BytesLöscht die Ausgabe und wartet 300 ms zwischen den einzelnen Bildern:
Sie können es hier testen (stellen Sie sicher, dass Sie die Konsole öffnen).
quelle
4
bis5
) nicht zuRuby, 83 Bytes
Druckt nach Standard. Ausgabe durch Zeilenumbrüche getrennt. Wenn Sie die Bildschirmhöhe auf 3 reduzieren, wird immer nur ein Bild angezeigt.
quelle
C #, 234 Bytes
quelle
string[] args
und um einige Leerzeichen herumfor (int
.Int32.Parse
könnte seinint.Parse
.Program
auf einfachP
oder so ändernstring
könnte seinvar
. Die Ganzzahl in der for-Schleife kann gleichzeitig mit dem Parsenargs[0]
einer Ganzzahl initialisiert werden .Action<string[]>
und Sie können die Klammern um die äußere for-Schleife entfernen, damit ich glaube, ich bekomme 200 Bytes:using C=System.Console;a=>{for(int n=0;n-1+""!=a[0];++n)foreach(int p in new[]{5,6,3,10,11}){C.Clear();C.Write(" \n |-| \n──|-|── ".Remove(p,1).Insert(p,"o")+n);for(var w=3e7;w>0;--w);}};
PHP + JavaScript, 168 Bytes
In Datei speichern
s.php
, Browser mit aufrufens.php?n=<n>
.Ruft sich mit neuen Parametern für jeden Frame ohne Verzögerung auf.
Ich könnte noch 5 sparen mit
index.php
; aber so weit will ich nicht gehen.quelle
C AB|─|DE ──|─|── $c",EABCD,$s),($c+=!$f)<$n?"
.short_open_tag
deaktiviert. Aktiviere es (Standard) oder fügephp
+ Leerzeichen danach hinzu<?
.Tcl, 168 Bytes
Version mit 10 Zeilen hohem Bildschirm. (Ersetzen Sie das
7
Folgende durch Ihre Bildschirmhöhe in Spalten minus vier.)Das geht sehr schnell, also können Sie in Zeile zwei eine Pause einfügen:
Tcl, 177 Bytes
Es funktioniert, indem der String oben für zwei verschiedene Dinge wiederverwendet wird:
Die Vorlage selbst ist das anzuzeigende Zeichenfolgenbild. Zuerst ordnen wir die aktuelle Positionsziffer des Schafes (innere Schleife) einem 'o' zu (Zeichenfolge ersetzen). Dann ordnen wir die verbleibenden Ziffern Leerzeichen zu. Dann drucken wir die resultierende Zeichenfolge.
(Die Zeichenfolge selbst beginnt nach dem letzten {in der dritten Zeile und endet mit dem am weitesten links stehenden} in der letzten Zeile.)
quelle
QBasic, 110 Bytes
Schleifen über
5*n
Ticks. Löscht bei jedem Häkchen den Bildschirm, druckt den Zauntritt und die Anzahl der Schafe undLOCATE
druckt dann dieo
an der entsprechenden Stelle. Mitx
dem Positionscode zwischen 0 und 4:(x=2)+2
x=2
ja,-1+2
=1
x=2
ist falsch,0+2
=2
1+x-(x>1)+x\3
x
ist0
oder1
,x>1
ist falsch undx\3
ist0
:1+x-0+0
=1
oder2
x
ist2
,x>1
ist wahr undx\3
ist0
:1+x-(-1)+0
=4
x
ist3
oder4
,x>1
ist wahr undx\3
ist1
:1+x-(-1)+1
=6
oder7
Schließlich
SLEEP
für 1 Sekunde und Schleife. Wenn es Ihnen nichts ausmacht, bei jedem Frame die Eingabetaste zu drücken, kann ich zwei Bytes durch Entfernen des Arguments auf rasierenSLEEP
.quelle
PHP,
132131 BytesÄnderungen nach Kommentaren (danke!):
Welches ist ungolfed:
Ursprünglicher Beitrag
Getestet auf Ubuntu (weiß nicht, ob es
system("clear")
unter Windows funktioniert)Ungolfed:
quelle
clear
braucht keine Anführungszeichen.cls
in DOS.$i=0;
, Warnungen werden in der Regel nicht in Code Golf (-5 Bytes) angezeigt. Aus dem gleichen Grund brauchen Sie keine Anführungszeichen umclear
undo
(-4 Bytes). Ersetzen Sie das\n
s durch echte Zeilenumbrüche (-2 Bytes). Da Sie nur Ausdrücke und keine Anweisungen haben, können Sie alles außer dem letzten in Ihrefor
Schleife einfügen und so die Klammern (for(;;system(clear),$c=…)sleep(1);
) (-2 Byte) entfernen . Und schließlich vergessen Sie, die Bedingung$i<$argv[0]
(+ 11 Bytes) hinzuzufügen .node.js + sleep , 169 Bytes
Originelle Lösung
node.js,
146142185 BytesGetestet nur mit Ubuntu Terminal (und jetzt mit n Schafen):
Nun, das ist ein Frame alle 9 ms. Eine ruhigere Version (Rahmen alle 1s):
Und ungolfed:
quelle
05AB1E ,
666059 BytesVerwendet CP-1252- Codierung.
Erklärung
Iteration bezieht sich auf die innere Iteration (0 -> 4) der Schafreise.
Hauptschleifen
Oberste Zeile generieren
Mittlere Reihe generieren
Untere Reihe generieren
quelle
Jelly ,
55 5453 BytesTryItOnline
Druckt durch Zeilenvorschübe getrennte Bilder.
Wie?
quelle
Python 2,
171159144 Bytes,163151136 ZeichenLösung mit einer rekursiven Funktion. Aufruf als f (int)
BEARBEITEN
-12 nach dem erneuten Lesen der Kommentare und dem Erkennen, dass die Zählung nicht erhöht werden muss, wenn das Schaf das Ende des Feldes erreicht
-15 durch direktes Durchlaufen der Indexliste und Verlust einer Variablen
Anmerkungen
Übernimmt die UTF-8-Codierung
Die Verwendung von - anstelle von ─ (wie in der @ Luis MATL-Antwort) würde den Byte-Countdown um 8 verringern, um mit der Zeichenanzahl übereinzustimmen, und die UTF-8-Abhängigkeit verlieren
50 neue Zeilen hinzugefügt - die Ausgabe befindet sich am unteren Rand der Konsole (billiger als das Importieren und Verwenden von os.system ("clear") und funktioniert unter Windows und Linux)
Version mit 1 Sekunde Verzögerung zwischen den Ausgaben (170 Bytes, 162 Zeichen)
quelle
Bash + Standard-Linux-Dienstprogramme (339 Byte)
quelle