Étant donné une liste d'entiers, produire une différence directe à un ordre / profondeur spécifié.
Pour la liste des entiers:
(10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Les différences à terme aux différents ordres / profondeurs sont:
0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14
1 8, -30, 16, 4, -11, -2, 72, -58, 5
2 -38, 46, -12, -15, 9, 74, -130, 63
3 84, -58, -3, 24, 65, -204, 193
4 -142, 55, 27, 41, -269, 397
5 197, -28, 14, -310, 666
6 -225, 42, -324, 976
7 267, -366, 1300
8 -633, 1666
9 2299
Donc, avec l'entrée de
4, (10, 18, -12, 4, 8, -3, -5, 67, 9, 14)
Vous retourneriez la liste
(-142, 55, 27, 41, -269, 397)
Contribution
L'entrée peut être via STDIN ou les paramètres de fonction.
Un entier spécifiant la profondeur à retourner. Ce sera 0 à la longueur de la liste moins 1
Une liste d'entiers pour calculer la différence directe pour
Sortie
La sortie peut être via STDOUT ou retournée par la fonction.
Les différences directes pour la profondeur spécifiée sous forme de liste d'entiers
Règles
Les fonctions intégrées et tierces qui le font directement ne sont pas autorisées.
Des restrictions standard contre les échappatoires s'appliquent.
Victoires de code les plus courtes
-
c'est le seul verbe dans cette fonction.Python,
6159 octetsIci, nous effectuons la soustraction en zippant tout sauf le dernier de la liste avec tout sauf le premier de la liste.
zip(L[1:],L)
équivautzip(L[1:],L[:-1])
, en raison dezip
la nature de la longueur minimale des deux listes:Une alternative tout aussi longue (Python 2 uniquement):
Malheureusement, Python 2 ne coupe pas la fin de la liste, donc je ne peux pas le faire
map(int.__sub__,L,L[1:])
. Chose ennuyeuse, Python 3 le fait , maismap
ne renvoie plus de liste, ce qui finit par être un octet de plus (60 octets):Cependant, si nous permettons à l'entrée d'être la profondeur suivie de la liste comme
f(3, 2, 5, 6, 7, 5, 10, 25)
(c'est-à-dire la profondeur 3 et la liste[2, 5, 6, 7, 5, 10, 25]
), alors cela fait 56 octets :Voici une autre alternative qui dérangerait vraiment tous ceux qui ont vu cela dans le code de production (celui-ci détruit la liste d'origine):
la source
L[1]-L.pop(0)
place.Mathematica
23 5723 octetsLa suggestion de Martin Büttner, exploitant la listabilité de la soustraction.
par exemple
Rest@#-Most@#
effectue la soustraction qui donne des différences.Nest effectue ladite opération le nombre de fois spécifié, en opérant toujours sur la liste la plus récente.
la source
Haskell,
4034 octetsExemple d'utilisation:
4 # [10,18,-12,4,8,-3,-5,67,9,14]
quelles sorties[-142,55,27,41,-269,397]
.Fonctionnement: calculez à plusieurs reprises la différence entre les éléments voisins et stockez les résultats intermédiaires dans une liste. Prenez le
n
e élément de cette liste.Edit: @Zgarb a trouvé 6 octets à enregistrer. Impressionnant!
la source
(zipWith(-)=<<tail)
.JavaScript (ES6),
5249 octetsFonction récursive simple,
map
permettant de scanner le tableau etslice
de supprimer le premier élément à chaque appel récursif.Modifier 3 octets enregistrés, merci @DocMax, suggestion vraiment intelligente
Tester dans la console Firefox / FireBug
la source
p
et enregistrer 3 caractères:H=(n,l)=>n?H(n-1,l.slice(1).map((a,k)=>a-l[k])):l
.CJam, 15 octets
Prend l'entrée comme un tableau de style CJam, puis la profondeur:
et imprime le résultat sous forme de tableau de style CJam.
Testez-le ici.
Explication
la source
Java,
122119 octetsExemple d'utilisation: http://ideone.com/ALgYez
3 octets grâce à Geobits: v)>
la source
int
et vous contenter d'assigneri=e
avec les autres.> <>
5350 octetsUtilisation: pré-remplir la pile (-v dans l'interpréteur python) avec la profondeur en premier, suivie des entiers.
Par exemple:
Résultats
Merci à Sp3000 pour l'aide.
la source
?!
et de déplacer certains composants plutôt que0=?
?Prélude ,
95927978 octetsLe format d'entrée est
où
N
est la profondeur des différences etM
le nombre d'entiers dans l'entrée. L'ajoutM
était nécessaire, car Prelude n'a aucun moyen de distinguer un0
de la fin de l'entrée. La sortie est également une liste d'entiers séparés par des sauts de ligne. J'ai dû supposer la spécification Prelude légèrement ajustée que nous avons conçue pour ce défi , car le Prelude standard lit les entiers comme des valeurs d'octets, ce qui rend impossible la saisie de nombres négatifs. Il s'agit essentiellement de l' interpréteur Python avec unNUMERIC_INPUT
indicateur supplémentaire .Pour référence il n'y a que
483837 caractères non-espace - le reste était simplement nécessaire pour aligner correctement le code.Explication
Dans Prelude, chaque ligne est une "voix" distincte qui fonctionne sur sa propre pile. Le programme est exécuté colonne par colonne, où les voix séparées sont prises pour fonctionner "en parallèle". Toutes les commandes sont des caractères uniques et les parenthèses sont des boucles de type Brainfuck (qui sont entrées et répétées chaque fois que le haut de la pile n'est pas nul). Notez que la position verticale de la parenthèse fermante n'est pas pertinente - la mettre dans une voix différente compte toujours comme correspondant à la parenthèse ouvrante la plus récente, et la pile dont la condition de boucle est vérifiée est toujours la voix où la
(
apparaît. Passons maintenant à ce programme ...Le programme peut être divisé en deux parties. Les deux lignes du bas ne sont utilisées que pour la plupart des boucles du programme (à l'exception de la boucle principale
N
), en passant1
s d'avant en arrière. Les deux premières lignes contiennent la boucle principale et la différenciation réelle. L'annotation suivante a le code transposé, donc je peux annoter les colonnes individuelles:la source
Python,
70686759 octetsVersion non-golfée avant de devenir récursive:
la source
R,
48 39 4644 octetsRécursivité!
x
est le nombre d'itérations à effectuer ety
est un vecteur d'entiers.if(x)
est vrai aussi longtemps quex>0
.Recall
appelle la fonction actuelle mais avec de nouveaux arguments.Diff
renvoie les différences entre des éléments de liste / vecteur consécutifs.Versions précédentes:
la source
Recall()
.Python,
928786 octetsCeci est mon premier golf Python. Toute suggestion sera appréciée :)
56 octets grâce à Sp3000: Dla source
append
end+=f-e,
. En général, pour le golf de code, vous n'aurez jamais besoin de l'utiliser àL.append
cause de cela.c,
6855 octetsCela pourrait prendre un peu de liberté avec la spécification d'entrée. Un tableau int est construit de telle sorte que l'élément 0 est la profondeur et les éléments 1 à (n + 1) sont les éléments de la liste d'entrée 0 à n. L'adresse de l'élément 1 est ensuite transmise à la fonction.
Le tableau doit se terminer par zéro. Le tableau est édité sur place.
Par exemple:
http://ideone.com/m5PDgF
la source
int *l
?Powershell
115111 bytesExécuter en tant que tel:
Sortie:
Déplacer une accolade à un endroit différent permet d'afficher chaque étape de la réponse.
la source
STATA, 126 octets
Attend une entrée sous la forme d'un entier représentant la profondeur, suivi d'une liste d'entiers séparés par des espaces, tous deux fournis via l'invite standard. La sortie est une liste d'entiers séparés par des sauts de ligne.
D'abord, il convertit la liste des entiers (qu'il considère comme 1 longue chaîne) en une liste de variables locales dont les noms sont 1,2,3, ... Ensuite, il calcule les différences directes en définissant la valeur de la yième variable locale comme étant la valeur de la y + 1e variable locale moins la valeur de la yième variable locale (c'est-à-dire 18-10 = 8), qui écrase les valeurs existantes uniquement après utilisation. Il fait cela $ a (valeur de la variable globale a) fois. Il affiche ensuite la valeur de chaque variable locale, 1 à la fois.
la source
T-SQL, trop nombreux :)
Lorsque j'ai vu ce problème pour la première fois, je me suis demandé s'il existait un moyen de le faire dans une requête. Bien que trivial pour la plupart des langues, ce n'est pas tellement le cas pour les requêtes SQL.
L'entrée va dans les variables @ (pour la profondeur) et @L pour la liste entière. @L est un type de table défini par l'utilisateur
Configuration d'entrée
La requête avec quelques commentaires
Résultat
la source
Japt
-h
,175 octets12 octets économisés grâce à @Shaggy
Essayez-le en ligne!
la source
äÏ-X
parän
dans les deux pour économiser 2 octets supplémentaires.SmileBASIC, 76 octets
Enfin une raison d'utiliser
ARYOP
!la source
Clojure, 47 octets
Une récursivité simple sur la fonction anonyme. Vous économisez 1 octet si l'ordre des arguments est inversé, comme cela se
%2
produit maintenant plus fréquemment que%
.la source
Gelée , 2 octets
Essayez-le en ligne!
Explication
Réponse très simple: P
la source
Japt , 7 octets
Quelques alternatives que j'avais mises à la disposition de Luis pour sa solution .
Essayez-le
10 octets
Essayez-le
la source