> 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 ] і f( х , у) = х + у. Якщо припустимо, що ми виконуємо такий код:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Потім ми отримуємо демонстрацію того, як Each
працюють заяви. По-перше, працюючи з двома масивами, ми їх блискавки формуємоС= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] потім карта f( х , у) над кожною парою, утворюючи наш остаточний масив D = [f( 1 , 4 ) , ф( 2 , 3 ) , ф( 3 , 2 ) , ф(4,1)]=[5,5,5,5]
Try it online!
How this code works
Working counter-intuitively to how Whispers works, we start from the first two lines:
> Input
> Input
This collects our two inputs, lets say x and y, and stores them in lines 1 and 2 respectively. We then store x2 on line 3 and create a range A:=[1...x2] on line 4. Next, we jump to the section
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
The first thing executed here is line 7, >> Each 5 4
, which iterates line 5 over line 4. This yields the array B:=[i%x|i∈A], where a%b is defined as the modulus of a and b.
We then execute line 8, >> Each 6 7
, which iterates line 6 over B, yielding an array C:=[(i%x)=y|i∈A].
For the inputs x=5,y=2, we have A=[1,2,3,...,23,24,25], B=[0,1,2,1,0,5,5,...,5,5] and C=[0,0,1,0,0,...,0,0]
We then jump down to
>> 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, we convert this array to a set (>> {10}
), then take the set difference between this set and {0}, yielding, then outputting, our final result.