JavaScript / Cubix, 36 bytes
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)
Tente!
A função JavaScript pode ser testada usando o trecho de código abaixo, o programa Cubix pode ser testado aqui .
Como é que isso funciona?
Javascript
A primeira linha é um comentário de linha para JavaScript, uma vez que começa com duas barras, portanto, o JavaScript vê apenas a linha inferior ( a=>eval(a.join`-`)
), que recebe uma matriz como entrada, junta-a com sinais de menos entre elas e executa como código, resultando em a subtração de todos os elementos na matriz.
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
O Cubix vê o seguinte cubo (observe que o Cubix ignora todos os espaços em branco):
/ / .
! v +
u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
. . .
. . .
. . .
O início
O IP começa na terceira linha, apontando para o leste. Ele atinge o 'I'
comando, que pega um número da entrada e o empurra para a pilha. Em seguida, ele é redirecionado '^'
para o loop de soma.
Loop de soma
Eu removi todos os caracteres que não fazem parte do loop de soma e os substitui por no-ops ( '.'
). O IP chega inicialmente na segunda linha, apontando para o leste.
. . .
! v +
u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Primeiro, o '!'
comando verifica o elemento superior. Se isso é 0
(ou seja, chegamos ao final da entrada), a próxima instrução ( 'v'
) é executada, refletindo o IP fora do loop. Se ainda não chegamos ao final da entrada, adicionamos os dois itens principais ( '+'
o segundo item é a soma até esse ponto, o item principal é a nova entrada). Em seguida, o IP passa para outra face do cubo, no 'u'
caractere, o que faz com que o IP faça uma inversão de marcha e execute um 'I'
comando (leia outro número inteiro de entrada), enquanto aponta para o norte. O IP volta para a face superior, pula ( '$'
) a instrução de exclusão ( ';'
) e faz outra inversão de marcha, de volta ao ponto em que começamos.
O fim
Se o IP for refletido fora do loop, os seguintes caracteres serão executados:
. . .
. v .
. ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Essas instruções excluem o elemento superior (que é zero) e, em seguida, emitem o elemento superior (a soma) como um número inteiro. Em seguida, o '@'
comando é atingido, para que o programa termine.