Quine Würfel rollen

19

Erstellen Sie ein Programm, das sich selbst ausgibt.

Wenn der Quellcode jedoch n-mal wiederholt wird (was bedeutet, dass eine Kopie des Quellcodes n-mal bis zum Ende verkettet wird) , sollte eine 1 / n-Wahrscheinlichkeit für die Ausgabe des ursprünglichen Quellcodes vorliegen, eine 1 / n-Wahrscheinlichkeit für die Ausgabe der Quellcode wird zweimal wiederholt, eine 1 / n-Wahrscheinlichkeit für die Ausgabe des Quellcodes wird dreimal wiederholt, ... und eine 1 / n-Wahrscheinlichkeit für die n-fache Ausgabe des Quellcodes.

Wenn es sich beispielsweise um ein Programm handelt foobar, sollte es immer genau ausgegeben werden foobar. Wenn Sie jedoch laufen foobarfoobarfoobarfoobar, dann sollte es eine ¼ Chance jeweils ausgibt foobar, foobarfoobar, foobarfoobarfoobarund foobarfoobarfoobarfoobar.

  • Die Verteilung jeder möglichen Ausgabe sollte gleich sein
  • Zusätzlich zu den angewendeten Standard-E / A-Methoden und den verbotenen Standardlücken gelten die Standard-Quine-Regeln (kann nicht auf die eigene Quelle usw. zugreifen).
  • Dies ist Codegolf, also gewinnt die kürzeste Antwort in Bytes
JMigst
quelle
Ist Pseudozufall gut genug?
Wastl
1
@wastl Ja, das ist in Ordnung
JMigst
2
Ihre Definition ist etwas falsch. Wenn Sie es 1 Mal (dh foobarfoobar) wiederholen, wird es nur gedrucktfoobar
Veskah
1
@Veskah foobarfoobarwird foobarzweimal wiederholt, nicht einmal.
Nit
@Nit Sie beginnen mit der Quelle. Wenn Sie es erneut verwenden, haben Sie es nur einmal wiederholt, aber zwei Instanzen.
Veskah

Antworten:

9

Gelee , 24 22 Bytes

“Ṿ;ẋŻɼLX¤¤µ”Ṿ;ẋŻɼLX¤¤µ

Probieren Sie es online!

Probieren Sie es x4!

“Ṿ;ẋŻɼLX¤¤µ”Ṿ;ẋŻɼLX¤¤µ
“Ṿ;ẋŻɼLX¤¤µ”              String literal: Ṿ;ẋŻɼLX¤¤µ
            Ṿ             Uneval. Return “Ṿ;ẋŻɼLX¤¤µ” (with quotes)
             ;            Append the initial string. Yields the source code. 
                ɼ         Apply the preceding link to the register and store the 
                          result in the register.
               Ż          Prepend 0. 
                          Each time Żɼ is used when the source code is repeated
                          the register's length increases by one. 
                          We can't use ‘ because it closes string literals.
                 L        Length. Returns the number of times the source code has
                          been repeated up till now.
                  X       Random element. If ɼ results in n, X returns a random 
                          integer between 1 and n.
                   ¤      Combines ŻɼLX as a nilad. 
              ẋ           Repeat the source code a random number of times between
                          1 and n.
                    ¤     Close everything from the initial string literal as a
                          nilad. 
                     µ    Start a new monadic chain. The register gets updated
                          once for time the code is repeated but only the final
                          repetition will result in output.
dylnan
quelle
5

05AB1E , 32 Bytes

"34çìDJ¼32ôн¾L×Ω"34çìDJ¼32ôн¾L×Ω

Probieren Sie es online!

Erläuterung

"34çìDJ¼32ôн¾L×Ω"                   # push this string
                 34ç                # push a "-character
                    ì               # prepend it to the string
                     DJ             # duplicate and join the copy to the string
                       ¼            # increment the counter
                        32ô         # split the string into pieces of size 32
                           н        # take the first one
                            ¾L×     # repeat it for each in [1 ... counter]
                               Ω    # pick one at random
Emigna
quelle
Könnten Sie eine Erklärung hinzufügen, wenn Sie eine Chance haben?
Shaggy
@ Shaggy: Danke, dass du mich daran erinnert hast :)
Emigna
2

Gol> <> , 21 Bytes

:QoaonC|P\Sx*F2ssS"
0

Probieren Sie es online!

Erläuterung:

:Q     |     If the top of stack is 0, skip to next |
             Top of stack is implicitly 0
        P    Increment top of stack
         \   Redirect pointer down]
0:QoaonC|P\Sx*F2ssS"  Increment for each copy of the source code
0:QoaonC|P\Sx*F2ssS"


         \   Redirect back to the right
          Sx*  Multiply the number of copies of the source code by a random number between 0 and 1
             F      Repeat that many times
              2ss   Push a double quote
                 S" Print the source code minus the quote, newline and 0
 :Q       If top of stack is not 0
   oaonC  Print the quote, a newline and a 0 to complete the source code and continue the loop
        \Sx*   Error on the * for some reason
Scherzen
quelle
1

Alice , 35 Bytes

"d3a*h-&;adddd12h&}Uh*t&w.odt,k@
 !

Probieren Sie es online!

Erläuterung

"

Wie in vielen Quines in 2D-Sprachen beginnt dies mit einem "Umlauf, der die gesamte erste Zeile mit Ausnahme der "selbst verschiebt.

d3a*h-&;

Durch Hinzufügen einer oder mehrerer zusätzlicher Kopien des Quellcodes werden einige implizite Leerzeichen am Ende des Zeichenfolgenliteral eingefügt. Um dies tatsächlich zu einem Quine zu machen, kürzen wir den Stack auf 31 Zeichen.

addd

Schieben Sie eine neue Zeile und dann die Stapelhöhe dreimal. Die als Stapelhöhe übertragenen Werte sind 32 (der Abstand in der zweiten Zeile), 33 (der Abstand in der zweiten Zeile) !und 34 (der Anfangswert ").

d

Schieben Sie die Stapelhöhe erneut, diesmal als Länge des ursprünglichen Quellcodes (35).

1

Initialisieren Sie einen Zähler auf 1. Dies zählt, wie oft der Quellcode wiederholt wird.

2h&}

Dreimal nach rechts abbiegen (dh nach links abbiegen). Jede weitere Wiederholung des Quellcodes trägt hin derselben Spalte zu einer }Erhöhung des Zählers bei. Wenn die IP-Adresse }wieder angezeigt wird , biegen Sie erneut rechts ab, um in derselben Richtung fortzufahren.

Uh

Nehmen Sie eine einheitliche Zufallszahl von 0 bis n-1 und addieren Sie dann 1, um die Anzahl der Ausgaben der Originalquelle zu erhalten.

*t&w

Multiplizieren Sie mit der zuvor übertragenen Stapelhöhe (Codelänge) und wiederholen Sie das Folgende so oft, indem Sie eine Absenderadresse so oft minus eins übertragen.

.o

Geben Sie die Oberseite des Stapels aus, ohne ihn zu zerstören.

dt,

Bewegen Sie den unteren Stapeleintrag nach oben.

k@

Wiederholen und nach Beendigung der Schleife beenden.

Nitrodon
quelle
1

JavaScript (Node.js) , 62 Byte

(f=a=>b=>b?f(a+.5):`(f=${f})(1)`.repeat(1+Math.random()*a))(1)

Probieren Sie es online!

l4m2
quelle
1
Entweder habe ich großes Pech, oder es können nicht mehr als zwei Kopien des ursprünglichen Quellcodes gedruckt werden.
Nitrodon
@ Nitrodon Danke, behoben
l4m2
1

Kohle , 58 Bytes

≔´θ´⎚´×´⊕´‽´L´⊞´O´υ´ω´⁺´⪫´⁺´´´≔´θ´´´´´θθ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θ

Probieren Sie es online! Keine ausführliche Version, da der Deverbosifier derzeit drosselt "´". Hauptsächlich basierend auf dem Charcoal Quine von Golf ist Ihnen ein Quine zum großen Guten! . Erläuterung:

≔´θ´⎚´×´⊕´‽´L´⊞´O´υ´ω´⁺´⪫´⁺´´´≔´θ´´´´´θθ

Weisen Sie die Literalzeichenfolge θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θzu θ.

Löschen Sie alle vorherigen Ausgaben, damit nur die letzte Ausgabe wirksam wird.

×⊕‽L⊞Oυω

Verschieben Sie die leere Zeichenfolge in das vordefinierte Array. Dadurch entspricht die Array-Länge der Anzahl der bisher verarbeiteten Wiederholungen. Nehmen Sie also die Länge und eine Zufallszahl als impliziten Exklusivbereich, addieren Sie 1 und wiederholen Sie die folgende Zeichenfolge so oft wie möglich.

⁺⪫⁺´≔θ´´θ

Vorangestellt wird, die Zeichenkette zu θund setzen literal ´s zwischen jedem Zeichen, dann eine weitere Kopie von Suffixbeziehungen θ.

Neil
quelle