Machen Sie einen verlorenen RNG

17

Lost ist eine 2-D-Programmiersprache, bei der Startposition und Richtung der IP völlig zufällig sind.

Dies macht es sehr schwierig, deterministische Lost-Programme zu erstellen. Allerdings schreiben wir heute kein deterministisches Programm, wir schreiben eine RNG.

Schreiben Sie ein Lost-Programm, das keine Eingabe annimmt und eine einzelne Ziffer (0,1,2,3,4,5,6,7,8 oder 9) ausgibt, wobei alle Ziffern die gleiche Wahrscheinlichkeit haben, ausgegeben zu werden. Da der Startort und die Startrichtung von Lost die einzige Quelle für Zufälligkeiten sind, besteht die einzige Möglichkeit darin, dass jeder Ort in Ihrer Quelle eine andere Zahl von 0 bis 9 ausgibt, wobei für jede Ziffer dieselbe Zahl ausgegeben wird.

Sie können die Wahrscheinlichkeit jeder Ziffer berechnen, indem Sie das -QFlag verwenden und es in dieses Python-Skript einfügen

import sys
a=sys.stdin.read().split()[:-1]
for x in range(10):print x,':',a.count(`x`)
print[x for x in a if x not in list("1234567890")]

Probieren Sie es online!

Dies ist daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.


Ein Überblick über Lost

Lost ist eine umhüllende implizite IO-2D-Sprache, die sich stark an Klein orientiert. Hier ist eine kurze Übersicht, was verlorene Befehle bewirken

  • \, /, |Spiegel der ip

  • <, ^, >, vWeist auf die ip in einer Richtung

  • [Reflektiert die IP, wenn sie sich nach Osten bewegt. wird, ]wenn sich die ip horizontal bewegt

  • ]Reflektiert die IP, wenn sie sich nach Westen bewegt. wird, [wenn sich die ip horizontal bewegt

  • ! Überspringt den nächsten Vorgang

  • ? Springt von der Oberseite des Stapels und springt, wenn nicht gleich Null

  • : Kopiert die Oberseite des Stapels

  • $ Vertauscht die beiden obersten Gegenstände des Stapels

  • ( Springt vom Stapel und stößt zum Zielfernrohr

  • ) Springt aus dem Bereich und drückt auf den Stapel

  • 0- 9drückt n nach oben auf den Stapel

  • "Startet und beendet ein String-Literal. Während einer Zeichenfolge werden keine Literalbefehle ausgeführt, sondern deren Zeichenwerte in den Stapel geschrieben.

  • + Fügt die oberen beiden Zahlen hinzu

  • * Multipliziert die oberen beiden Zahlen

  • - Multipliziert die Spitze mit -1

  • % Schaltet die Sicherheit aus

  • # Schaltet die Sicherheit ein

  • @ Beendet die Ausführung, wenn die Sicherheit ausgeschaltet ist (beginnt an)

Weizen-Assistent
quelle
Was passiert, wenn Sie versuchen, zwei Werte aus dem Stapel auszutauschen, es aber nur einen Wert gibt, oder wenn Sie versuchen, von einem leeren Stapel zu springen?
Paprika
@ppperry Der Stapel wird mit impliziten Nullen aufgefüllt.
Weizen-Assistent
1
Zu wenig Informationen zur Sprache. Wickelt es sich? Was bedeutet "Sicherheit"? Klammerbeschreibung ist irreführend? Wie wird der Geltungsbereich verwendet?
Dead Possum
@DeadPossum Ich habe versucht, es kurz zu halten. Es wickelt sich. Sicherheit wird in der Frage bereits erläutert. Ich weiß nicht, was du mit den Klammern meinst. []fungieren als Türen, <>weisen in Richtungen und ()speichern und abrufen aus dem Bereich. Der Bereich wird zum Speichern von Werten verwendet.
Weizen-Zauberer
@WheatWizard Sicherheit ist also nur eine Bedingung für @oder hat sie andere Verwendungszwecke? Über Klammern, verstehe ich nicht , diesen Teil: becomes ] if the ip is moving horizontally. Sich nach Osten zu bewegen ist auch horizontal, nicht wahr?
Dead Possum

Antworten:

12

81 101 Bytes

Dies könnte weiter golfen werden ...

>%(0@>%(1@>%(2@>%(3@>%(4@>%(5@>%(6@>%(7@>%(8@>%(9@
^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<

Probieren Sie es online!

Pfeffer
quelle
1
Interessanter Ansatz! Daran hatte ich nicht gedacht
Weizen-Zauberer
1
101 Bytes , die den Doppeldruck beheben. Fügen Sie einfach einen Stapel-Pop hinzu, bevor die Sicherheit deaktiviert wird. Wenn Sie also zu Beginn die Zahl treffen, kann sie ihn platzen lassen, erneut drücken und dann sterben. Ich weiß nicht, ob dies technisch gesehen immer noch ein einheitlicher Zufall ist ...
Arnold Palmer
1
Ich kam buchstäblich zur gleichen Zeit auf die gleiche Idee ...
Paprika
1
Ihre Ausgabe ist nicht einheitlich. 0hat eine 7/101-Chance, gedruckt zu werden (einer der <oder ^unter seinem Block sowie das Symbol >und %), 1- 8hat eine 10/101-Chance und 9eine 11/101-Chance. Dann sieht es so aus, als ob es eine Chance geben könnte, dass es für immer weitergeht.
Arnold Palmer
1
Es muss umgebrochen werden, sonst würde dies enden, wenn es in der obersten Zeile beginnt.
Paprika
9

Verloren , 54 Bytes

>%(0@>%(1@
@>%(2@>%(3
5@>%(4@>%(
(7@>%(6@>%
%(9@>%(8@>

Probieren Sie es online!

Einfach aus der Antwort von pppery kopieren und ein paar zufällige Sachen machen. Ich weiß nichts über verlorene Sprache. Und ich weiß auch nicht, was mit den obigen Codes passiert. Ist das Arbeit? (Ich weiß es nicht)

tsh
quelle
Ihr Code produziert die Hälfte der Ausgabe von ppperry, ich denke, es liegt daran, wie -Qfunktioniert? Die Ausgabe scheint ohnehin normal verteilt zu sein. Es wäre schön gewesen, eine vollständige Spezifikation der in der Frage verknüpften Sprache zu haben.
Aaron
@ Aaron Ich hätte erklären sollen, wie das -Qfunktioniert. Da die Sprache zufällig ist, wird die Überprüfung durchgeführt, indem alle Möglichkeiten ausgeführt werden. -Qführt dies aus und druckt alle Ergebnisse aus. Je kürzer das Programm ist, desto weniger Möglichkeiten gibt es und desto weniger Ausgaben kommen von -Q.
Weizen-Zauberer