Dadi rotolanti


19

Crea un programma che si genera da solo.

Tuttavia, se il codice sorgente viene ripetuto n volte (il che significa concatenare una copia del codice sorgente alla fine n-1 volte) , allora dovrebbe esserci 1 / n probabilità di produrre il codice sorgente originale, 1 / n probabilità di produrre il codice sorgente ripetuto due volte, una probabilità 1 / n di emettere il codice sorgente ripetuto tre volte, ... e una probabilità 1 / n di emettere il codice sorgente n volte.

Ad esempio, se il tuo programma lo è foobar, dovrebbe sempre essere visualizzato esattamente foobar. Tuttavia, se si esegue foobarfoobarfoobarfoobar, allora non ci dovrebbero essere un ¼ possibilità ciascuna di emettere foobar, foobarfoobar, foobarfoobarfoobare foobarfoobarfoobarfoobar.

  • La distribuzione di ogni possibile output dovrebbe essere uguale
  • Oltre ai metodi di I / O standard applicati e alle scappatoie standard vietate, si applicano le regole quine standard (impossibile accedere alla propria fonte, ecc.)
  • Questo è il codice golf, quindi vince la risposta più breve in byte

Lo pseudorandom è abbastanza buono?
wastl

1
@wastl Sì, va bene
JMigst

2
La tua definizione è leggermente off. Se lo ripeti 1 volta (cioè foobarfoobar), foobar
verrebbe

1
@Veskah foobarfoobarviene foobarripetuto due volte, non una volta.
Nit

@Nit Inizi con la fonte. Se lo usi di nuovo, l'hai ripetuto solo una volta ma hai due istanze.
Veskah,

Risposte:



9

Gelatina , 24 22 byte

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

Provalo online!

Provalo 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.

5

05AB1E , 32 byte

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

Provalo online!

Spiegazione

"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

Potresti aggiungere una spiegazione quando ne hai la possibilità?
Shaggy,

@Shaggy: Grazie per avermelo ricordato :)
Emigna

2

Gol> <> , 21 byte

:QoaonC|P\Sx*F2ssS"
0

Provalo online!

Spiegazione:

: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

1

Alice , 35 byte

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

Provalo online!

Spiegazione

"

Come in molte quines in linguaggi 2D, questo inizia con una "che si avvolge su se stessa e spinge l'intera prima riga tranne la "stessa.

d3a*h-&;

L'aggiunta di una o più copie aggiuntive del codice sorgente posizionerà alcuni spazi impliciti alla fine della stringa letterale. Per renderlo effettivamente un quine, tronciamo lo stack di 31 caratteri.

addd

Spingere una nuova riga, quindi l'altezza della pila tre volte. I valori inseriti come altezza della pila sono 32 (lo spazio nella seconda riga), 33 (il !nella seconda riga) e 34 (l'iniziale ").

d

Spingere di nuovo l'altezza dello stack, questa volta come lunghezza del codice sorgente originale (35).

1

Inizializza un contatore su 1. Questo conterà il numero di volte che il codice sorgente viene ripetuto.

2h&}

Girare a destra tre volte in posizione (ovvero, girare a sinistra). Ogni ripetizione aggiuntiva del codice sorgente contribuirà hnella stessa colonna di questa }, incrementando così il contatore. Quando l'IP ritorna su }, girare di nuovo a destra per continuare nella stessa direzione.

Uh

Prendi un numero casuale uniforme da 0 a n-1, quindi aggiungi 1 per ottenere il numero di volte in cui generare la fonte originale.

*t&w

Moltiplicare per l'altezza dello stack precedentemente spinta (lunghezza del codice), quindi ripetere quanto segue più volte premendo un indirizzo di ritorno che molte volte meno uno.

.o

Emetti la cima della pila senza distruggerla.

dt,

Spostare la voce di pila inferiore in alto.

k@

Ripeti, quindi termina al termine del ciclo.



1

Carbone , 58 byte

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

Provalo online! Nessuna versione dettagliata perché il deverbosificatore attualmente soffoca "´". Principalmente basato sul carbone di legna da golf, un vero paradiso! . Spiegazione:

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

Assegna la stringa letterale θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θa θ.

Cancella qualsiasi output precedente, in modo che solo l'ultimo output abbia effetto.

×⊕‽L⊞Oυω

Inserire la stringa vuota nell'array predefinito. Ciò rende la lunghezza dell'array uguale al numero di ripetizioni elaborate finora, quindi prendine la lunghezza, prendi un numero casuale l'intervallo esclusivo implicito, aggiungi 1 e ripeti la stringa seguente più volte.

⁺⪫⁺´≔θ´´θ

Prepara la stringa letterale a θ, quindi inserisci le lettere letterali ´tra ciascun carattere, quindi aggiungi un'altra copia di θ.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.