Pyth , 4 byte
W
~O
Provalo online!
Questo implementa sostanzialmente l'algoritmo:
Q←inputRepeat1.2.3.temp←QQ←unif{0,Q−1}Print(temp)Untiltemp=0
Per tradurre il Pyth nell'algoritmo, possiamo principalmente esaminare solo cosa significa ogni personaggio. Dato che Pyth è scritto in notazione con prefisso (cioè * + 1 2 3
è (1 + 2) * 3
) possiamo iniziare da sinistra e riempire gli argomenti mentre procediamo.
W
inizia un ciclo while tradizionale. La prima istruzione dopo è la condizione del ciclo e la seconda istruzione dopo è il corpo del ciclo. Se la seconda istruzione è vuota diventa no-op . Questo mentre funziona esattamente come Python mentre, quindi valuterà numeri interi diversi da zero come Vero e zero come falso.
La prima affermazione dopo il tempo inizia con il carattere di nuova riga. Ciò corrisponde alla funzione "stampa e ritorna con una nuova riga" di Pyth. Questo richiede un argomento, che viene quindi stampato e restituito anche non modificato. Questo ci consente di stampare i passaggi intermedi eseguendo anche le operazioni necessarie.
L'argomento passato a questa funzione di stampa inizia con il ~
quale è un po 'speciale. Se il carattere immediatamente successivo ~
è una variabile, accetta due argomenti, altrimenti ne accetta uno. Poiché O
non è una variabile ~
consumerà solo un argomento. ~
funziona un po 'come +=
in molte lingue convenzionali, anche se l'operatore più vicino sarebbe l'operatore post-incremento ++
di C
. Potresti sapere che x++
sarà come usare x
come valore corrente, ma in seguito x
lo sarà x+1
. ~
è la stessa idea, ma generalizzata a qualunque sia il risultato del primo argomento. In che modo verrà scelta la variabile da assegnare in seguito.
L'argomento di ~
è O
che è molto semplice. Quando il suo unico argomento è un numero intero O
restituisce un valore compreso tra 0 e uno inferiore a quello intero uniformemente a caso.
Ora potresti aver notato O
che non ha argomenti. Qui l'interprete Pyth compila gentilmente un'ipotesi, che qui è la variabile Q
. Q
ha un significato speciale in Pyth: ogni volta che è presente in un programma, il programma Pyth inizia con l'assegnazione Q
all'ingresso del programma. Dato che questa è la prima variabile che si presenta ~
nell'argomento Q
è anche la variabile a cui ~
assegnare un valore.
Riassumendo il nostro programma "leggibile" potrebbe apparire come:
while print_and_return( assign_variable( Q, unif(0, Q-1) ) ):
pass
E un "run-through" di esempio potrebbe apparire come:
- Q = 5
O
ritorna 3, ~
ritorna 5, \n
ritorna e stampa 5 che è vero
- Q = 3
O
ritorna 0, ~
ritorna 3, \n
ritorna e stampa 3 che è vero
- Q = 0
O
restituisce qualcosa di irrilevante, ~
restituisce 0, \n
restituisce e stampa 0 che è falso
- Q = qualcosa di irrilevante
- Terminare