Pyth , 4 байта
W
~O
Попробуйте онлайн!
Это в основном реализует алгоритм:
Q←inputRepeat1.2.3.temp←QQ←unif{0,Q−1}Print(temp)Untiltemp=0
Чтобы перевести Pyth в алгоритм, мы можем просто изучить, что означает каждый символ. Поскольку Pyth написан в префиксной нотации (то есть * + 1 2 3есть (1 + 2) * 3), мы можем начать слева и заполнять аргументы по мере продвижения.
Wначинается традиционный цикл while. Первый оператор после него является условием цикла, а второй оператор после него является телом цикла. Если второе утверждение пустое, оно становится неактивным . Это while работает точно так же, как Python while, поэтому оно будет оценивать ненулевые целые числа как True, а ноль - как false.
Первое утверждение через некоторое время начинается с символа новой строки. Это соответствует функции Пита «печатать и возвращать с новой строкой». Это принимает один аргумент, который затем печатается, а также возвращается без изменений. Это позволяет нам печатать промежуточные шаги, а также выполнять необходимые операции.
Аргумент, передаваемый этой функции печати, начинается с ~чего-то особенного. Если символ сразу после ~является переменной, он принимает два аргумента, в противном случае он принимает один. Поскольку Oпеременная не ~будет использовать только один аргумент. ~функции +=во многом похожи на многие обычные языки, хотя самым близким оператором будет оператор постинкремента ++из C. Вы можете знать, что x++это будет похоже на использование xв качестве текущего значения, но после этого xбудет x+1. ~это та же идея, но обобщенная на любой результат первого аргумента. Как он выбирает какую переменную назначить, будет рассмотрено позже.
Аргумент ~IS , Oкоторый очень прост. Когда его единственный аргумент является целым числом, Oвозвращает значение от 0 до единицы меньше, чем это целое число, равномерно случайным образом.
Теперь вы могли заметить, Oчто нет аргумента. Здесь интерпретатор Pyth любезно вводит предположение, которое здесь является переменной Q. Qимеет особое значение в Pyth: всякий раз, когда он присутствует в программе, программа Pyth начинается с назначения Qвхода программы. Так как это первая переменная, встречающаяся в ~аргументе ', Qтеперь она также является переменной, которой ~будет присвоено значение.
В итоге наша «читаемая» программа может выглядеть так:
while print_and_return( assign_variable( Q, unif(0, Q-1) ) ):
pass
И один пример «прогона» может выглядеть так:
- Q = 5
Oвозвращает 3, ~возвращает 5, \nвозвращает и печатает 5, что верно
- Q = 3
Oвозвращает 0, ~возвращает 3, \nвозвращает и печатает 3, что верно
- Q = 0
Oвозвращает что-то неуместное, ~возвращает 0, \nвозвращает и печатает 0, что является ложным
- Q = что-то не относящееся к делу
- прекратить