> 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
Pruébalo en línea!
Devuelve un conjunto de todas las soluciones posibles y el conjunto vacío (es decir, ∅) cuando no existe una solución.
Cómo funciona
Como era de esperar, funciona casi de manera idéntica a la mayoría de las otras respuestas: genera una lista de números y verifica cada módulo inverso con el argumento.
Si está familiarizado con el funcionamiento de la estructura del programa Whispers, siéntase libre de saltar a la línea horizontal. Si no: esencialmente, Whispers funciona en un sistema de referencia línea por línea, comenzando en la línea final. Cada línea se clasifica como una de dos opciones. O es una línea nilad , o es una línea de operador .
Las líneas Nilad comienzan con >, como > Inputo > {0}y devuelven el valor exacto representado en esa línea, es decir, > {0}devuelve el conjunto{ 0 }. > Inputdevuelve la siguiente línea de STDIN, evaluada si es posible.
Las líneas de operador comienzan con >>, como >> 1²o >> (3]y denotan ejecutar un operador en uno o más valores. Aquí, los números utilizados no hacen referencia a esos números explícitos, sino que hacen referencia al valor en esa línea. Por ejemplo, ²es el comando cuadrado (n → n2), por lo >> 1²que no devuelve el valor12, en su lugar, devuelve el cuadrado de la línea 1 , que, en este caso, es la primera entrada.
Por lo general, las líneas de operador solo funcionan usando números como referencias, aunque puede haber notado las líneas >> L=2y >> L⋅R. Estos dos valores, Ly R, se usan junto con Eachdeclaraciones. Eachlas declaraciones funcionan tomando dos o tres argumentos, nuevamente como referencias numéricas. El primer argumento (p 5. Ej. ) Es una referencia a una línea de operador que utiliza una función, y el resto de los argumentos son matrices. Luego iteramos la función sobre la matriz, donde el LyR en la función representan los elementos actuales en las matrices que se repiten. Como ejemplo:
Dejar A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] y F( x , y) = x + y. Suponiendo que estamos ejecutando el siguiente código:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Luego obtenemos una demostración de cómo Eachfuncionan las declaraciones. Primero, cuando trabajamos con dos matrices, las comprimimos para formarC= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] luego mapa F( x , y) sobre cada par, formando nuestra matriz final D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Pruébalo en línea!
Cómo funciona este código
Trabajando de forma contraria a la forma en que funciona Whispers, partimos de las dos primeras líneas:
> Input
> Input
Esto recopila nuestras dos entradas, digamos X y y, y los almacena en las líneas 1 y 2 respectivamente. Luego almacenamosX2en la línea 3 y crea un rangoA : = [ 1 . . . X2]en la línea 4 . A continuación, saltamos a la sección.
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
Lo primero que se ejecuta aquí es la línea 7 , >> Each 5 4que itera línea 5 al borde 4 . Esto produce la matrizB : = [ i%XEl |i ∈ A ], dónde un%sise define como el módulo deun y si.
A continuación, ejecutamos la línea 8 , >> Each 6 7que itera línea 6 sobresi, produciendo una matriz C: = [ ( i%x ) = yEl |i ∈ A ].
Para las entradas x = 5 , y= 2, tenemos A = [ 1 , 2 , 3 , . . . , 23 , 24 , 25 ], B = [ 0 , 1 , 2 , 1 , 0 , 5 , 5 , . . . , 5 , 5 ] y C= [ 0 , 0 , 1 , 0 , 0 , . . . , 0 , 0 ]
Luego saltamos a
>> L⋅R
>> Each 9 4 8
que es nuestro ejemplo de una Eachdeclaración diádica . Aquí, nuestra función es la línea 9, es decir, >> L⋅Ry nuestras dos matrices sonUN y C. Multiplicamos cada elemento enUN con su elemento correspondiente en C, que produce una matriz, mi, donde cada elemento funciona a partir de la siguiente relación:
miyo= { 0UNyoCyo= 0Cyo= 1
Luego terminamos con una matriz que consiste en 0 0sy los módulos inversos de X y y. Para eliminar el0 0s, convertimos esta matriz en un conjunto ( >> {10}), luego tomamos la diferencia de conjunto entre este conjunto y{ 0 }, produciendo, luego produciendo, nuestro resultado final.