Rolling Quine Dice

19

Utwórz program, który sam wyjdzie.

Jeśli jednak kod źródłowy jest powtarzany n razy (co oznacza konkatenację kopii kodu źródłowego do końca n-1 razy) , wówczas powinno być 1 / n prawdopodobieństwo wyprowadzenia oryginalnego kodu źródłowego, 1 / n prawdopodobieństwo wyprowadzenia kod źródłowy powtórzony dwukrotnie, prawdopodobieństwo 1 / n wyprowadzenia kodu źródłowego powtórzone trzy razy, ... i prawdopodobieństwo 1 / n wyprowadzenia kodu źródłowego n razy.

Na przykład, jeśli twój program jest foobar, to zawsze powinien wypisywać dokładnie foobar. Jeśli jednak uruchomić foobarfoobarfoobarfoobar, to nie powinno być ¼ szansa każdego wyprowadzania foobar, foobarfoobar, foobarfoobarfoobari foobarfoobarfoobarfoobar.

  • Rozkład każdej możliwej produkcji powinien być równy
  • Oprócz stosowania standardowych metod we / wy i zabronionych standardowych luk, obowiązują standardowe zasady quine (nie można uzyskać dostępu do własnego źródła itp.)
  • To jest kod golfowy, więc wygrywa najkrótsza odpowiedź w bajtach
JMigst
źródło
Czy pseudolos jest wystarczający?
wastl
1
@wastl Tak, w porządku
JMigst
2
Twoja definicja jest nieco wyłączona. Jeśli powtórzysz to 1 raz (tj. foobarfoobar), Wydrukuje się tylkofoobar
Waszka
1
@Veskah foobarfoobarjest foobarpowtarzany dwa razy, nie raz.
Nit
@Nit Zaczynasz od źródła. Jeśli użyjesz go ponownie, powtórzyłeś go tylko raz, ale masz dwa wystąpienia.
Veskah

Odpowiedzi:

9

Galaretka , 24 22 bajtów

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

Wypróbuj online!

Wypróbuj 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
źródło
5

05AB1E , 32 bajty

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

Wypróbuj online!

Wyjaśnienie

"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
źródło
Czy możesz dodać wyjaśnienie, gdy masz szansę?
Kudłaty
@Shaggy: Dzięki za przypomnienie :)
Emigna
2

Gol> <> , 21 bajtów

:QoaonC|P\Sx*F2ssS"
0

Wypróbuj online!

Wyjaśnienie:

: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
Jo King
źródło
1

Alice , 35 bajtów

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

Wypróbuj online!

Wyjaśnienie

"

Podobnie jak w wielu quinach w językach 2D, zaczyna się od "tego, które otacza się i przesuwa całą pierwszą linię oprócz "siebie.

d3a*h-&;

Dodanie jednej lub więcej dodatkowych kopii kodu źródłowego spowoduje umieszczenie niektórych niejawnych spacji na końcu literału łańcucha. Aby uczynić z tego quine, przycinamy stos przy 31 znakach.

addd

Naciśnij nową linię, a następnie trzy razy wysokość stosu. Wartości wypychane jako wysokość stosu wynoszą 32 (spacja w drugiej linii), 33 ( !druga linia) i 34 (początkowa ").

d

Naciśnij ponownie wysokość stosu, tym razem jako długość oryginalnego kodu źródłowego (35).

1

Zainicjuj licznik na 1. Zlicza to liczbę powtórzeń kodu źródłowego.

2h&}

Trzy razy skręć w prawo (tj. Skręć w lewo). Każde dodatkowe powtórzenie kodu źródłowego spowoduje wstawienie hw tej samej kolumnie co ta }, zwiększając w ten sposób licznik. Gdy adres IP powróci do }, ponownie skręć w prawo, aby kontynuować w tym samym kierunku.

Uh

Weź jednolitą liczbę losową od 0 do n-1, a następnie dodaj 1, aby uzyskać liczbę wyświetleń oryginalnego źródła.

*t&w

Pomnóż przez poprzednio wypchniętą wysokość stosu (długość kodu), a następnie powtórz tę czynność wiele razy, naciskając wielokrotnie adres zwrotny minus jeden.

.o

Wydaj górną część stosu bez niszczenia go.

dt,

Przenieś dolny stos na górę.

k@

Powtórz, a następnie zakończ po zakończeniu pętli.

Nitrodon
źródło
1

JavaScript (Node.js) , 62 bajty

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

Wypróbuj online!

l4m2
źródło
1
Albo mam pecha, albo nie mogę wydrukować więcej niż dwóch kopii oryginalnego kodu źródłowego.
Nitrodon
@Nitrodon Dzięki, naprawiono
l4m2
1

Węgiel drzewny , 58 bajtów

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

Wypróbuj online! Brak wersji pełnej, ponieważ deverbosifier obecnie dusi się "´". Oparty głównie na węglu drzewnym z Golfa, jest to dobry uczynek! . Wyjaśnienie:

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

Przypisz literał ciąg θ⎚×⊕‽L⊞Oυω⁺⪫⁺´≔θ´´θdo θ.

Wyczyść poprzednie dane wyjściowe, aby zadziałało tylko ostatnie wyjście.

×⊕‽L⊞Oυω

Wciśnij pusty ciąg do predefiniowanej tablicy. To sprawia, że ​​długość tablicy jest równa liczbie przetworzonych do tej pory powtórzeń, więc weź jej długość, weź losową liczbę z domyślnego zakresu wyłączności, dodaj 1 i powtórz następujący ciąg wiele razy.

⁺⪫⁺´≔θ´´θ

Wstaw ciąg literału do θ, następnie wstaw literały ´s pomiędzy znakami, a następnie dodaj kolejną kopię θ.

Neil
źródło