> 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 > Input
o > {0}
y devuelven el valor exacto representado en esa línea, es decir, > {0}
devuelve el conjunto{ 0 }. > Input
devuelve 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=2
y >> L⋅R
. Estos dos valores, L
y R
, se usan junto con Each
declaraciones. Each
las 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 L
yR
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 Each
funcionan 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 4
que 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 7
que 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 Each
declaración diádica . Aquí, nuestra función es la línea 9, es decir, >> L⋅R
y 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.