Deltas inverses d'un tableau
Votre tâche consiste à, étant donné un tableau d'entiers 32 bits signés, le recompiler avec ses deltas inverses. Par exemple, la liste
1 3 4 2 8
détient les deltas:
2 1 -2 6
qui sont ensuite annulés, donnant:
-2 -1 2 -6
et recompilé, donnant:
1 -1 -2 0 -6
comme résultat final.
Entrée sortie
Vous recevrez une liste / tableau / table / tuple / pile / etc. des entiers signés en entrée via toute méthode d'entrée standard.
Vous devez à nouveau générer les données modifiées sous toute forme acceptable, en suivant la méthode d'inversion delta ci-dessus.
Vous recevrez N entrées 0 < N < 10
où chaque numéro se situe dans la plage-1000 < X < 1000
Cas de test
5 6 7 8 -> 5 4 3 2
1 3 4 2 8 -> 1 -1 -2 0 -6
32 18 25 192 199 -> 32 46 39 -128 -135
Remarques
- Vous n'êtes pas limité à la méthode basée sur le delta: si vous pouvez trouver la méthode la plus simple (qui ne devrait pas être trop difficile) , vous êtes libre de l'utiliser.
- Comme indiqué ci-dessus, vous recevrez toujours au moins 1 entrée et pas plus de 9.
- Le premier numéro de la sortie doit toujours être le premier numéro de l'entrée, si ce n'est pas le cas, votre méthode est incorrecte.
- Seule la sortie d'entrée standard est acceptée
- Des échappatoires standard s'appliquent
- C'est le golf de code , donc le nombre d'octets le plus bas gagne!
- S'amuser!
Nous avons un gagnant.
Dennis 's Jelly Answer at a Tiny 3 Bytes a remporté la médaille d'or, car j'ai l'impression qu'elle ne peut pas être battue.
J'ai été légèrement déçu de ne pas avoir pu voir une réponse basée sur les spécifications d'origine, cependant, je pourrais plus tard mettre une prime dessus.
Réponses:
Gelée ,
73 octetsEssayez-le en ligne!
Contexte
Les deltas de (a, b, c, d) sont b - a , c - b et d - c . La réduction cumulative (a, b - a, c - b, d - c) par soustractiong donne a - (b - a) = 2a - b , 2a - b - (c - b) = 2a - c et 2a - c - (d - c) = 2a - d , donc le résultat correct est (2a - a, 2a - b, 2a - c, 2a - d) .
Comment ça fonctionne
la source
Python 2, 30 octets
Testez-le sur Ideone .
Comment ça fonctionne
Les deltas de (a, b, c, d) sont b - a , c - b et d - c . La réduction cumulative (a, b - a, c - b, d - c) par soustractiong donne a - (b - a) = 2a - b , 2a - b - (c - b) = 2a - c et 2a - c - (d - c) = 2a - d , donc le résultat correct est (2a - a, 2a - b, 2a - c, 2a - d) .
la source
Mathematica, 8 octets
Fonction sans nom prenant un nombre indéterminé d'arguments. Cela utilise une méthode "simple": annule la liste entière et ajoute deux fois le premier élément (d'origine).
Appelé par exemple comme
2#-{##}&[1,3,4,2,8]
; renvoie une liste comme{1,-1,-2,0,-6}
.la source
JavaScript (ES6), 21
Thx @Dennis
la source
05AB1E , 4 octets
Essayez-le en ligne! ou comme suite de tests
Explication
la source
Python, 44 octets
Cela utilise la "méthode plus simple".
la source
Pyth, 5 octets
Interprète en ligne!
la source
R,
231817 octetsauto-vectorisation et impression par défaut à la rescousse!
la source
2*x[1]-x
place?Rubis, 23 octets
Pas particulièrement original.
la source
Perl 6 ,
4016 octetsÉtendu:
la source
Brain-Flak , 76 octets
Essayez-le en ligne!
Explication:
la source
Haskell,
2019 octetsMême solution que Dennis, merci pour ton idée
2a - x
.Enregistrement d'un octet grâce à Christian Severs.
la source
f(x:r)=x:map(2*x-)r
x
en avant.Pyke,
54 octetsEssayez-le ici!
la source
PHP, 48 octets
En utilisant la technique de Dennis. Utilisez comme:
Version non Dennis 55 octets:
la source
a&
au lieu de''<
et deux octets avec_
au lieu de' '
.APL, 8 octets
Explication:
Cas de test:
la source
Labyrinthe , 34 octets
Essayez-le en ligne!
Utilise l' approche de @Dennis
(2a - a, 2a - b, 2a - c, 2a - d)
.Les tuiles jaunes sont pour le contrôle du flux. Dans ce langage de programmation 2D, le programme démarre à la tuile la plus en haut à gauche se déplaçant vers l'est pour commencer. Aux intersections, la direction est déterminée par le signe du haut de la pile principale. Les carreaux vierges sont des murs.
vert
Cette section enregistre 2a dans la pile auxiliaire.
?
Obtenez le premier numéro et poussez-le en haut de la pile principale:
Dupliquez le haut de la pile_2
Poussez deux vers le haut de la pile*
Popy
, popx
, pushx*y
}
Déplacez le haut de la pile principale vers le haut de la pile auxiliaire._
Poussez zéro vers le haut de la pileOrange
Cette section soustrait 2a du nombre actuel, annule le résultat, sort le résultat, obtient le caractère suivant (le délimiteur), quitte si EOF, sort une nouvelle ligne, obtient le numéro suivant.
"
Noop. Si vous venez du nord, le sommet de la pile sera nul et le programme continuera au sud. Si vous venez de l'ouest, le sommet de la pile sera un et le programme tournera à droite (en continuant vers le sud);
Jetez le haut de la pile. Étant donné que le zéro ou l'un est uniquement utilisé pour le flux de contrôle, nous devons les éliminer{
Déplacez le haut de la pile auxiliaire (2a) vers le haut de la pile principale:
Dupliquez le haut de la pile principale}
Déplacez le haut de la pile principale vers le haut de la pile auxiliaire-
Popy
, popx
, pushx-y
\`` Negate the top of the stack. This and the previous three operations have the effect of
- (x-2a) = 2a-x »!
Affichez le haut de la pile et affichez-le sous forme de nombre,
Appuyez sur le caractère suivant (qui sera le délimiteur) ou négatif si EOF)
Incrémentez le haut de la pile. Si le dernier caractère est EOF, alors le haut de la pile sera maintenant nul et le programme continuera directement vers le@
et quittez. Si le dernier caractère était un délimiteur, alors le haut de la pile sera positif, ce qui fera que le programme tournera à droite et continuera vers l'est jusqu'à\
\
Sortie d'une nouvelle ligne?
Obtenez le prochain numéro_1
Poussez l'un vers le haut de la pile afin de tourner à droite à la jonctionla source
Labyrinthe , 24 octets
Les formats d'entrée et de sortie sont des listes séparées par des sauts de ligne (bien que le format d'entrée soit en réalité beaucoup plus flexible). Le programme se termine avec une erreur.
Essayez-le en ligne!
J'ai deux autres solutions à ce nombre d'octets, qui fonctionnent essentiellement de la même manière mais utilisent un flux de contrôle quelque peu différent.
Explication
Le pointeur d'instruction (IP) commence à se déplacer vers l'est le long de la première ligne, mais toutes les commandes avant le
?
sont fondamentalement sans opération sur l'état global, car nous n'utilisons aucune commande de profondeur de pile nulle part. Donc, le code commence vraiment à l'?
ouest, car l'IP se retourne lorsqu'il atteint l'impasse.Le code commence donc par le bit de code linéaire suivant:
Cela nous configure simplement avec une copie de
2a
pour utiliser la[2a - a, 2a - b, 2a - c, ...]
formule.Nous entrons maintenant dans la boucle principale du programme, en utilisant une astuce assez standard pour parcourir une seule ligne de code:
Notez que la pile sera vide à chaque fois que nous toucherons,
<
donc nous savons que nous y aurons des zéros. Le fait<
ensuite pivoter toute la ligne vers la gauche, en prenant l'IP avec lui, nous obtenons donc ceci:L'IP doit ensuite se déplacer vers la gauche, où le
>
ramène la ligne à sa place d'origine (pour la préparer pour la prochaine itération). Ensuite, la ligne est simplement exécutée de droite à gauche, donc une seule itération de boucle est la suivante:Le hic lorsque vous travaillez avec une boucle de ce type est que vous ne pouvez pas travailler avec n'importe quelle forme d'exécution conditionnelle, car Labyrinth n'a pas de moyen d'ignorer le code. Par conséquent, nous terminerons le programme avec une division par zéro lorsque nous atteindrons EOF. Voici une ventilation de chaque itération de boucle.
la source
C ++ 14, 36 octets
Comme lambda sans nom modifiant son entrée:
En utilisant la technique de Dennis. Fonctionne pour n'importe quel conteneur comme
int[]
ouvector<int>
.Usage:
la source
CJam, 16 octets
Format d' entrée:
[1 2 3 4]
. Utilise la formule facile.Explication:
Désolé pour aucun lien de test. Je suppose que SE n'aime pas ses liens avec des crochets à l'intérieur.
la source
Arrogant , 9 octets
Donnez des arguments sous forme de valeurs séparées par des virgules sur la ligne cmd:
$ pushy invdeltas.pshy 1,3,4,2,8
. Voici la répartition, avec un exemple de pile:Remarque: cela peut être de 8 octets si la sortie en arrière est autorisée:
@&2*K~-_
la source
Perl, 26 + 3 (
-pla
indicateur) = 29 octetsou
En utilisant:
la source
Dyalog APL , 5 octets
-+2×⊃
c'est un 5 trains, il analyse comme deux 3 trains imbriqués ("fourches"):
-+(2×⊃)
se lit comme: la négation (
-
) de l'ensemble du tableau plus (+
) deux fois (2×
) le premier élément (⊃
)la source
isé, 11 octets
Invocation:
ised --l 'file with input.txt' '2*$1_0-$1
(modifier: corrigé en volant l'algèbre de Dennis)
la source
Wonder , 17 octets
Je ne sais pas pourquoi je n'ai pas posté ça plus tôt. Usage:
Plus lisible:
la source