JavaScript / Cubix, 36 octets
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)
Essayez!
La fonction JavaScript peut être testée à l'aide de l'extrait ci-dessous, le programme Cubix peut être testé ici .
Comment cela marche-t-il?
Javascript
La première ligne est un commentaire de ligne vers JavaScript, car elle commence par deux barres obliques, donc JavaScript ne voit que la ligne du bas ( a=>eval(a.join`-`)
), qui prend un tableau en entrée, le joint avec des signes moins entre les deux, puis l'exécute en tant que code, ce qui entraîne la soustraction de tous les éléments du tableau.
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 voit le cube suivant (notez que Cubix ignore tous les espaces blancs):
/ / .
! v +
u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
. . .
. . .
. . .
Le début
L'IP commence sur la troisième ligne, pointant vers l'est. Il frappe la 'I'
commande, qui prend un nombre de l'entrée et le pousse vers la pile. Ensuite, il est redirigé par '^'
dans la boucle de somme.
Boucle de somme
J'ai supprimé tous les caractères ne faisant pas partie de la boucle de somme et les ai remplacés par no-ops ( '.'
). L'IP arrive initialement sur la deuxième ligne, pointant vers l'est.
. . .
! v +
u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Tout d'abord, la '!'
commande vérifie l'élément supérieur. Si c'est le cas 0
(c'est-à-dire que nous avons atteint la fin de l'entrée), l'instruction suivante ( 'v'
) est exécutée, reflétant l'IP hors de la boucle. Si nous n'avons pas encore atteint la fin de l'entrée, nous ajoutons les deux premiers éléments ensemble ( '+'
, le deuxième élément est la somme jusqu'à ce point, l'élément supérieur la nouvelle entrée). Ensuite, l'IP passe à une autre face du cube, dans le 'u'
caractère, ce qui fait que l'IP fait demi-tour et exécute une 'I'
commande (lire un autre entier d'entrée), tout en pointant vers le nord. L'IP revient à la face supérieure, ignore ( '$'
) l'instruction de suppression (';'
) et fait un autre demi-tour, retour au point où nous avons commencé.
La fin
Si l'IP se reflète hors de la boucle, les caractères suivants sont exécutés:
. . .
. v .
. ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
Ces instructions suppriment l'élément supérieur (qui est zéro), puis sortent l'élément supérieur (la somme) sous forme d'entier. Ensuite, la '@'
commande est atteinte, donc le programme se termine.