Zeichnen Sie ein Programm oder eine Funktion, die STDOUT
n
(jeweils für einen Schritt) eine Zeichenfolge mit einem Punkt .
an der Position des Gehers in die Zeiten schreibt . Das Programm muss außerdem alle s
Sekunden eine Zeile schreiben (oder s
Sekunden nach jeder Zeile warten ).
Ein Zufallsrundgang ist eine mathematische Formalisierung eines Pfades, der aus einer Folge von Zufallsschritten ( Wiki ) besteht, sodass jeder neue Schritt der letzte Schritt plus ein neuer Wert ist. Jeder t
Schrittwert ist also nur die Summe aller Zufallswerte vor ir plus dem Anfangswert.
Das Programm sollte 2 Eingaben annehmen und verwendet nur Leerzeichen " "
und Punkte "."
auf der Ausgabe. Der Startwert des Walkers ist 20
so, dass die Ausgabe nach 19 Stellen ein Punkt sein sollte.
. #19 spaces then a dot
Bei jedem neuen Schritt ist der Wert der letzte Wert des Läufers plus einer davon [-2-1,0,1,2]
(jeweils 20% Chance). Nachdem die neue Position gedruckt wurde, sollte das Programm s
Sekunden warten und mit dem nächsten Schritt fortfahren. Wenn der Schritt den Geher außerhalb der Reichweite bringt 1 to 40
, sollte er einfach ignoriert werden und die Geherposition bleibt gleich. Die Anzahl der Leerzeichen ist immer eine Zahl von 0 bis 39.
Beispiel
#input
Mywalk(s = 0.1, n = 30)
#output
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Überlegungen
Sie können die Eingabe als ein beliebiges vernünftiges Format annehmen
Der kürzeste Code gewinnt
Es ist in Ordnung, wenn Ihr Programm nur die Sekunden als Ganzzahlen akzeptiert
n
ist die Anzahl der Schritte?1 to 40
, weil die Anzahl der Leerzeichen immer istposition-1
.Antworten:
Pyth, 39
Wird
s
als erste undn
als zweite Eingabezeile verwendet . Funktioniert auf der Kommandozeile aber nicht mit dem Online-Interpreter. Mein erstes Pyth-Programm überhaupt! Golftipps sind willkommen.quelle
Q
undE
für die beiden Eingänge stattdessen fürhQ
und verwenden könneneQ
, wenn Sie die Eingänge neu einteilen.Matlab, 112
Die Kernidee besteht darin, eine Liste möglicher nächster Positionen zu erstellen und dann eine davon einheitlich zu zeichnen. Wenn wir uns zB an der Position $ l = 1 $ befinden, wären die möglichen Schritte
[-1,0,1,2,3]
natürlich, wenn wir wählen-1
würden, dass dies ungültig wäre und wir an der gleichen Position bleiben müssten. Deshalb ersetzen wir die ungültigen Positionen durch die aktuelle Position[1,0,1,2,3]
und wählen dann zufällig ein Element aus dieser aktualisierten Liste aus.Das OP hat uns gebeten, das Programm zu zeichnen.
Die Transkription:
quelle
Perl,
1361281161061019086Erfordert, dass die Sekunden eine Ganzzahl sind.
Laufen Sie mit
perl <filename> <second delay> <number of steps>
.Möglicherweise gibt es hier mehr Golfpotential, obwohl ich ehrlich gesagt überrascht bin, dass es so weit gekommen ist. (Komm schon, nur noch 6 Bytes, um die Bash-Antwort zu übertreffen ...)
Änderungen
$s
und entfernen$n
und einfach die Tasten$ARGV[0]
und verwenden$ARGV[1]
$"
und nicht speziell definieren musste$u
als$undef
.$x
es verwendet wird und indemmap
du anstelle von verwendestfor
.say
anstelle von gespeichertprint
.quelle
Python 2,
124119 Bytes@janrn und @Steve Eckert: Ich habe nicht genug Ruf, um Ihre Antwort zu kommentieren, aber hier ist im Wesentlichen Ihre Version gekürzt. Die Aufgabe besteht darin, ein Programm oder eine Funktion zu zeichnen , sodass Sie durch die Verwendung von
f(s,x)
einige Bits sparen undmax(0,min(x,39))
eine zusätzlicheif
Klausel vermeiden können . Ich habe es verstanden:quelle
Bash, 81
Bearbeiten: Wenn der Schritt den Geher aus dem Bereich von 1 bis 40 hinausführt, sollte er einfach ignoriert werden und die Geherposition bleibt die gleiche, die korrekt gehandhabt wird.
Eingabe über Befehlszeilenoptionen. Z.B:
quelle
Rubin, 84
quelle
Python 2.7,
198162143133Wenn Sie das Skript mit aufrufen
python script.py
, ist die erste Eingabe die Anzahl der Schritte, die zweite die Zeit zwischen den Schritten (akzeptiert float oder int). Verbesserungsvorschläge?Bearbeitungen
print ' '*p+'.'
Dank @corsiKlause Ho Ho Ho konnten bisher 36 Bytes eingespart werden;
wenn möglichp=max(1,min(p+r.randint(-2,2),40))
(Ich kann Ihre Antwort auch nicht kommentieren, aber danke; möchte sie nicht vollständig kopieren)quelle
' '*p
die Zeichenfolge wiederholen?Processing,
150147Verwendung:
Hinweis:
1000
Kann aus Typgründen nicht in geändert1e3
werden.quelle
Lua, 140 Bytes
Hinweis: Für dieses Programm ist das LuaSocket-Paket erforderlich.
quelle
Perl 6 , 92 Bytes
Verwendung:
quelle
JavaScript (ES6), 125 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
k4, 61 Zeichen
Probelauf:
quelle
Mathematica,
122117 BytesRekursive anonyme Funktion, nimmt die Eingabe in der angegebenen Reihenfolge. Könnte wahrscheinlich weiter golfen werden.
quelle
Python 3, 154 Bytes
Generieren Sie eine Zeichenfolge mit Leerzeichen, die größer als die maximal erforderliche Länge ist, und drucken Sie diese Zeichenfolge NUR bis zum Zeichen im Index 'g' und dann ein '.'. Beenden Sie den Vorgang, indem Sie g um einen zufälligen Wert im Bereich [-2: 2] erhöhen, und wiederholen Sie den Vorgang.
Wenn mir jemand helfen könnte, diesen schrecklichen Eingabeblock runterzuspielen, wäre ich dankbar.
quelle
sys.argv
?while z:
, warum nicht verwendenfor i in range(1,z)
?sys.argv
und den Import hinzufüge , kann ich nicht sehen, wie ich Bytes speichern kann, die das tun. Und selbst mit den zusätzlichen Zeilen, diec
dekrementiertc
und dann dekrementiert werden müssenz
, ist es immer noch billiger, dies auf diese Weise zu tun.C-Funktion, 114
So ziemlich eine direkte Übersetzung meiner bash Antwort .
Vollständiges Testprogramm:
quelle