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 3Jest (1 + 2) * 3), możemy zaczynać od lewej strony i uzupełniać argumenty.
Wrozpoczyna 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ż Onie 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 xjako bieżącej wartości, ale później xbę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 Októra jest bardzo prosta. Gdy jedynym argumentem jest liczba całkowita, Ozwraca 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. Qma specjalne znaczenie w Pyth: gdy tylko jest obecny w programie, program Pyth zaczyna się od przypisania Qdo danych wejściowych programu. Ponieważ jest to pierwsza zmienna występująca w ~argumencie, Qteraz 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
Ozwraca 3, ~zwraca 5, \nzwraca i drukuje 5, co jest prawdą
- Q = 3
Ozwraca 0, ~zwraca 3, \nzwraca i drukuje 3, co jest prawdą
- Q = 0
Ozwraca coś nieistotnego, ~zwraca 0, \nzwraca i drukuje 0, co jest fałszem
- Q = coś nieistotnego
- Zakończyć