> Input
> Input
>> 1²
>> (3]
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
>> L⋅R
>> Each 9 4 8
> {0}
>> {10}
>> 12∖11
>> Output 13
Попробуйте онлайн!
Возвращает набор всех возможных решений и пустой набор (т.е. ∅) когда решения не существует.
Как это устроено
Неудивительно, что он работает почти так же, как и большинство других ответов: он генерирует список чисел и проверяет каждое из них на наличие обратного модуля с аргументом.
Если вы знакомы с тем, как работает структура программы Whispers, смело переходите к горизонтальной линии. Если нет: по сути, Whispers работает над построчной системой отсчета, начиная с последней строки. Каждая строка классифицируется как один из двух вариантов. Либо это линия nilad , либо это строка оператора .
Строки Nilad начинаются с >
, например, > Input
и > {0}
и возвращают точное значение, представленное в этой строке, т.е. > {0}
возвращает набор{ 0 }, > Input
возвращает следующую строку STDIN, оценивается, если это возможно.
Строки оператора начинаются с >>
, например, >> 1²
и >> (3]
и означают запуск оператора для одного или нескольких значений. Здесь используемые числа не ссылаются на эти явные числа, вместо этого они ссылаются на значение в этой строке. Например, ²
есть квадратная команда (n → n2), поэтому >> 1²
не возвращает значение12вместо этого он возвращает квадрат линии 1 , которая в данном случае является первым входом.
Обычно операторские строки работают только с использованием чисел в качестве ссылок, но вы, возможно, заметили строки >> L=2
и >> L⋅R
. Эти два значения, L
и R
, используются в сочетании с Each
утверждениями. Each
операторы работают, принимая два или три аргумента, опять же как числовые ссылки. Первый аргумент (например, 5
) является ссылкой на строку оператора, в которой используется функция, а остальные аргументы являются массивами. Затем мы перебираем функцию по массиву, где L
и R
в функции представляют текущий элемент (ы) в массивах, которые перебираются. В качестве примера:
Позволять A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] и е( х , у) = х + у, Предполагая, что мы запускаем следующий код:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Затем мы получаем демонстрацию того, как Each
работают заявления. Во-первых, при работе с двумя массивами, мы застегиваем ихС= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] затем карта е( х ,у) по каждой паре, формируя наш окончательный массив Д = [ ф( 1 , 4 ) , ф( 2 , 3 ) , ф( 3 , 2 ) , ф( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Попробуйте онлайн!
Как работает этот код
Работая нелогично с тем, как работает Whispers, мы начнем с первых двух строк:
> Input
> Input
Это собирает наши два входа, скажем, Икс и Yи сохраняет их в строках 1 и 2 соответственно. Затем мы хранимИкс2в строке 3 и создать диапазонA : = [ 1 . , , Икс2]по строке 4 . Далее переходим к разделу
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
Первое , что выполняется здесь строка 7 , >> Each 5 4
, который перебирает линии 5 по линии 4 . Это дает массивB : = [ я%Икс|i ∈ A ], где a%бопределяется как модуль изa и б,
Затем мы выполняем линию 8 , >> Each 6 7
, которая итерирует линия 6 за кадромВ, получая массив С: = [ ( я%х ) = у|i ∈ A ],
Для входов х = 5 , у= 2, we have = [ 1 , 2 , 3 , . , , , 23 , 24 , 25 ], В = [ 0 , 1 , 2 , 1 , 0 , 5 , 5 , . , , , 5 , 5 ] и С= [ 0 , 0 , 1 , 0 , 0 , . , , , 0 , 0 ]
Затем мы спрыгиваем
>> L⋅R
>> Each 9 4 8
which is our example of a dyadic Each
statement. Here, our function is line 9 i.e >> L⋅R
and our two arrays are A and C. We multiply each element in A with it's corresponding element in C, which yields an array, E, where each element works from the following relationship:
Ei={0AiCi=0Ci=1
We then end up with an array consisting of 0s and the inverse moduli of x and y. In order to remove the 0s, мы конвертируем этот массив в набор (>> {10}
), then take the set difference between this set and { 0}, уступая, затем выводя, наш конечный результат.