Pyth , 4 bajty
W
~O
Wypróbuj online!
To w zasadzie implementuje algorytm:
Q←inputRepeat1.2.3.temp←QQ←unif{0,Q−1}Print(temp)Untiltemp=0
Aby przetłumaczyć Pyth na algorytm, możemy w większości po prostu zbadać, co oznacza każdy znak. Ponieważ Pyth jest zapisany w notacji przedrostkowej (tzn. * + 1 2 3
Jest (1 + 2) * 3
), możemy zaczynać od lewej strony i uzupełniać argumenty.
W
rozpoczyna tradycyjną pętlę while. Pierwsza instrukcja po warunku pętli, a druga instrukcja po treści pętli. Jeśli drugie zdanie jest puste, staje się brakiem operacji . To natomiast działa dokładnie tak samo jak Python, więc będzie oceniać niezerowe liczby całkowite jako True, a zero jako false.
Pierwsze zdanie po chwili zaczyna się od znaku nowej linii. Odpowiada to funkcji „print and return with newline” Pytha. To wymaga jednego argumentu, który jest następnie drukowany, a także zwracany bez modyfikacji. To pozwala nam wydrukować kroki pośrednie, jednocześnie wykonując potrzebne operacje.
Argument przekazany do tej funkcji drukowania zaczyna się od, ~
który jest nieco wyjątkowy. Jeśli znak znajdujący się bezpośrednio za nim ~
jest zmienną, przyjmuje dwa argumenty, w przeciwnym razie przyjmuje jeden. Ponieważ O
nie jest zmienną, ~
zajmie tylko jeden argument. ~
działa podobnie jak +=
w wielu konwencjonalnych językach, chociaż najbliższym operatorem byłby operator post-inkrementacyjny ++
z C
. Być może wiesz, że x++
to będzie jak użycie x
jako bieżącej wartości, ale później x
będzie x+1
. ~
to ten sam pomysł, ale uogólniony na wynik pierwszego argumentu. Sposób wyboru zmiennej, do której ma zostać przypisana, zostanie rozwiązany później.
Argument ~
Is O
która jest bardzo prosta. Gdy jedynym argumentem jest liczba całkowita, O
zwraca losowo wartość od 0 do jednego mniejszą od tej liczby całkowitej.
Teraz mogłeś zauważyć, O
że nie ma argumentu. Tutaj interpreter Pyth uprzejmie wypełnia przypuszczenie, która tutaj jest zmienną Q
. Q
ma specjalne znaczenie w Pyth: gdy tylko jest obecny w programie, program Pyth zaczyna się od przypisania Q
do danych wejściowych programu. Ponieważ jest to pierwsza zmienna występująca w ~
argumencie, Q
teraz jest ona również zmienną, ~
która przypisze wartość.
Podsumowując, nasz „czytelny” program może wyglądać następująco:
while print_and_return( assign_variable( Q, unif(0, Q-1) ) ):
pass
Jeden przykładowy „przebieg” może wyglądać następująco:
- Q = 5
O
zwraca 3, ~
zwraca 5, \n
zwraca i drukuje 5, co jest prawdą
- Q = 3
O
zwraca 0, ~
zwraca 3, \n
zwraca i drukuje 3, co jest prawdą
- Q = 0
O
zwraca coś nieistotnego, ~
zwraca 0, \n
zwraca i drukuje 0, co jest fałszem
- Q = coś nieistotnego
- Zakończyć