> 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 > Inputou > {0}et retournent la valeur exacte représentée sur cette ligne, c'est-à-dire > {0}renvoie l'ensemble{ 0 }. > Inputrenvoie 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=2et >> L⋅R. Ces deux valeurs, Let R, sont utilisées conjointement avec des Eachinstructions. EachLes 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 Let Rdans 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 Eachinstructions. 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 4qui 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 7qui 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.