JavaScript / Cubix, 36 byte
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)
Provalo!
La funzione JavaScript può essere testata utilizzando lo snippet di seguito, il programma Cubix può essere testato qui .
Come funziona?
JavaScript
La prima riga è un commento di riga a JavaScript, poiché inizia con due barre, quindi JavaScript vede solo la riga inferiore ( a=>eval(a.join`-`)
), che accetta un array come input, lo unisce tra loro con i segni meno, quindi lo esegue come codice, risultando in la sottrazione di tutti gli elementi dell'array.
let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)
console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))
Cubix
Cubix vede il seguente cubo (notare che Cubix ignora tutti gli spazi bianchi):
/ / .
! v +
u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
. . .
. . .
. . .
L'inizio
L'IP inizia sulla terza riga, puntando verso est. Colpisce il 'I'
comando, che prende un numero dall'input e lo spinge nello stack. Quindi, viene reindirizzato '^'
nel ciclo di somma.
Sum-loop
Ho rimosso tutti i caratteri che non fanno parte del ciclo di somma e li ho sostituiti con no-ops ( '.'
). L'IP arriva inizialmente sulla seconda riga, puntando verso est.
. . .
! v +
u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Innanzitutto, il '!'
comando controlla l'elemento superiore. Se questo è 0
(cioè abbiamo raggiunto la fine dell'ingresso), 'v'
viene eseguita l'istruzione successiva ( ), che riflette l'IP fuori dal ciclo. Se non abbiamo ancora raggiunto la fine dell'input, sommiamo i primi due elementi insieme ( '+'
il secondo elemento è la somma fino a quel punto, l'elemento in alto il nuovo input). Quindi, l'IP si sposta su un'altra faccia del cubo, nel 'u'
carattere, il che fa sì che l'IP faccia un'inversione di marcia ed esegua un 'I'
comando (leggi un altro numero intero di input), mentre punta verso nord. L'IP torna alla faccia superiore, salta ( '$'
) l'istruzione delete ( ';'
) e fa un'altra inversione, tornando al punto in cui siamo partiti.
La fine
Se l'IP viene riflesso fuori dal ciclo, vengono eseguiti i seguenti caratteri:
. . .
. v .
. ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Queste istruzioni eliminano l'elemento superiore (che è zero) e quindi producono l'elemento superiore (la somma) come numero intero. Quindi '@'
viene raggiunto il comando, quindi il programma termina.