> 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
Essayez-le en ligne!
Renvoie un ensemble de toutes les solutions possibles et l'ensemble vide (c'est-à-dire ∅) lorsqu'aucune solution n'existe.
Comment ça fonctionne
Sans surprise, il fonctionne presque de manière identique à la plupart des autres réponses: il génère une liste de nombres et vérifie chacun pour module inverse avec l'argument.
Si vous connaissez le fonctionnement de la structure du programme Whispers, n'hésitez pas à passer à la ligne horizontale. Sinon: essentiellement, Whispers fonctionne sur un système de référence ligne par ligne, en commençant par la ligne finale. Chaque ligne est classée comme l'une des deux options. Soit c'est une ligne nilade , soit c'est une ligne opérateur .
Les lignes Nilad commencent par >
, comme > Input
ou > {0}
et retournent la valeur exacte représentée sur cette ligne, c'est-à-dire > {0}
renvoie l'ensemble{ 0 }. > Input
renvoie la ligne suivante de STDIN, évaluée si possible.
Les lignes d'opérateur commencent par >>
, comme >> 1²
ou >> (3]
et indiquent l'exécution d'un opérateur sur une ou plusieurs valeurs. Ici, les nombres utilisés ne font pas référence à ces nombres explicites, ils font plutôt référence à la valeur sur cette ligne. Par exemple, ²
la commande carré (n → n2), >> 1²
ne renvoie donc pas la valeur12, au lieu de cela, il renvoie le carré de la ligne 1 , qui, dans ce cas, est la première entrée.
Habituellement, les lignes d'opérateur fonctionnent uniquement en utilisant des nombres comme références, mais vous avez peut-être remarqué les lignes >> L=2
et >> L⋅R
. Ces deux valeurs, L
et R
, sont utilisées conjointement avec des Each
instructions. Each
Les instructions fonctionnent en prenant deux ou trois arguments, à nouveau comme références numériques. Le premier argument (par exemple 5
) est une référence à une ligne d'opérateur utilisée une fonction, et le reste des arguments sont des tableaux. Nous itérons ensuite la fonction sur le tableau, où le L
et R
dans la fonction représentent le ou les éléments actuels dans les tableaux en cours d'itération. Par exemple:
Laisser A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] et F( x , y) = x + y. En supposant que nous exécutons le code suivant:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Nous obtenons ensuite une démonstration du fonctionnement des Each
instructions. Tout d'abord, lorsque vous travaillez avec deux tableaux, nous les compressons pour formerC= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] puis cartographier F( x ,y) sur chaque paire, formant notre matrice finale D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Essayez-le en ligne!
Comment ce code fonctionne
En travaillant de manière contre-intuitive au fonctionnement de Whispers, nous partons des deux premières lignes:
> Input
> Input
Cela recueille nos deux entrées, disons X et yet les stocke dans les lignes 1 et 2 respectivement. Nous stockons ensuiteX2sur la ligne 3 et créer une gammeA : = [ 1 . . . X2]sur la ligne 4 . Ensuite, nous sautons à la section
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
La première chose exécutée ici est la ligne 7 , >> Each 5 4
qui itère ligne 5 sur la ligne 4 . Cela donne le tableauB : = [ i%X|i ∈ A ], où une%best défini comme le module deune et b.
Nous exécutons ensuite la ligne 8 , >> Each 6 7
qui itère ligne 6 surB, donnant un tableau C: = [ ( i%x ) = y|i ∈ A ].
Pour les entrées x = 5 , y= 2, on a 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.