> 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
Provalo online!
∅) quando non esiste una soluzione.
Come funziona
Non sorprende che funzioni quasi in modo identico con la maggior parte delle altre risposte: genera un elenco di numeri e controlla ognuno per modulo inverso con l'argomento.
Se hai familiarità con il funzionamento della struttura del programma di Whispers, passa alla linea orizzontale. In caso contrario: sostanzialmente, Whispers lavora su un sistema di riferimento riga per riga, a partire dall'ultima riga. Ogni riga è classificata come una delle due opzioni. O è una linea nilad o è una linea operatore .
Le linee di Nilad iniziano con >, ad esempio> Input o> {0} e restituiscono il valore esatto rappresentato su quella linea, ovvero > {0}restituisce l'insieme{ 0 }. > Inputrestituisce la riga successiva di STDIN, valutata se possibile.
Le righe dell'operatore iniziano con >>, come >> 1²o >> (3]e indicano l'esecuzione di un operatore su uno o più valori. Qui, i numeri usati non fanno riferimento a quei numeri espliciti, invece fanno riferimento al valore su quella riga. Ad esempio, ²è il comando quadrato (n → n2), quindi >> 1²non restituisce il valore12, invece restituisce il quadrato della riga 1 , che, in questo caso, è il primo input.
Di solito, le linee dell'operatore funzionano solo usando i numeri come riferimenti, ma potresti aver notato le linee >> L=2e >> L⋅R. Questi due valori Le R, sono usati insieme alle Eachistruzioni. Eachle dichiarazioni funzionano prendendo due o tre argomenti, sempre come riferimenti numerici. Il primo argomento (ad es. 5) È un riferimento a una riga dell'operatore che utilizza una funzione e il resto degli argomenti sono array. Quindi eseguiamo l'iterazione della funzione sull'array, in cui l' elemento Le Rnella funzione rappresentano gli elementi correnti negli array su cui si esegue l'iterazione. Come esempio:
Permettere A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] e f( x , y) = x + y. Supponendo che stiamo eseguendo il seguente codice:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Abbiamo quindi una dimostrazione di come Eachfunzionano le dichiarazioni. Innanzitutto, quando si lavora con due array, li comprimiamo per formareC= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] quindi mappa f( x , y) su ogni coppia, formando il nostro array finale D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Provalo online!
Come funziona questo codice
Lavorando in modo contro intuitivo al funzionamento di Whispers, partiamo dalle prime due righe:
> Input
> Input
Questo raccoglie i nostri due input, diciamo X e ye li memorizza rispettivamente nelle righe 1 e 2 . Quindi archiviamoX2sulla riga 3 e creare un intervalloA : = [ 1 . . . X2]sulla linea 4 . Quindi, passiamo alla sezione
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
La prima cosa eseguita qui è la linea 7 , >> Each 5 4che itera la linea 5 sulla linea 4 . Questo produce l'arrayB : = [ i%X|io ∈ A ], dove un'%Bè definito come il modulo diun' e B.
Abbiamo poi eseguiamo linea 8 , >> Each 6 7che itera linea 6 sopraB, producendo un array C: = [ ( i%x ) = y|io ∈ A ].
Per gli input x = 5 , y= 2, noi abbiamo A = [ 1 , 2 , 3 , . . . , 23 , 24 , 25 ], B = [ 0 , 1 , 2 , 1 , 0 , 5 , 5 , . . . , 5 , 5 ] e C= [ 0 , 0 , 1 , 0 , 0 , . . . , 0 , 0 ]
Saliamo quindi a
>> L⋅R
>> Each 9 4 8
che è il nostro esempio di una Eachdichiarazione diadica . Qui, la nostra funzione è la linea 9, cioè i >> L⋅Rnostri due arrayUN e C. Moltiplichiamo ogni elemento inUN con l'elemento corrispondente in C, che produce un array, E, in cui ciascun elemento funziona dalla seguente relazione:
Eio= { 0UNioCio= 0Cio= 1
Finiamo quindi con un array composto da 0se i moduli inversi di X e y. Per rimuovere il0s, convertiamo questo array in un set ( >> {10}), quindi prendiamo la differenza del set tra questo set e{ 0 }, cedendo, quindi producendo, il nostro risultato finale.