En mathématiques, une façon de déterminer quel est le type d'une relation donnée (linéaire, quadratique, etc.) pour calculer les différences. Pour ce faire, vous prenez une liste de valeurs y pour lesquelles l'écart entre les valeurs x correspondantes est le même, et soustrayez chacune du nombre au-dessus, créant une liste de nombres plus courte que la liste précédente. Si la liste résultante est entièrement composée de nombres identiques, alors la relation a une différence de 1 (elle est linéaire). S'ils ne sont pas identiques, vous répétez le processus sur la nouvelle liste. S'ils sont maintenant identiques, la relation a une différence de 2 (elle est quadratique). S'ils ne sont pas identiques, vous continuez simplement ce processus jusqu'à ce qu'ils le soient. Par exemple, si vous avez la liste des valeurs y [1,6,15,28,45,66] pour l'augmentation incrémentielle des valeurs x:
First Differences:
1
6 1-6 =-5
15 6-15 =-9
28 15-28=-13
45 28-45=-17
66 45-66=-21
Second differences:
-5
-9 -5+9 =4
-13 -9+13 =4
-17 -13+17=4
-21 -17+21=4
As these results are identical, this relation has a difference of 2
Ta tâche:
Écrivez un programme ou une fonction qui, lorsqu'elle reçoit un tableau d'entiers en entrée, renvoie la différence de la relation décrite par le tableau, comme expliqué ci-dessus.
Contribution:
Un tableau d'entiers, qui peut être de n'importe quelle longueur> 1.
Sortie:
Un entier représentant la différence de la relation décrite par l'entrée.
Cas de test:
Input => Output
[1,2,3,4,5,6,7,8,9,10] => 1
[1,4,9,16,25,36] => 2
[1,2,1] => 2 (when there is only one value left, all values are automatically identical, so the largest difference an array can have is equal to the length of the array-1)
"Hello World" => undefined behavior (invalid input)
[1,1,1,1,1,1,1,1,1] => 0 (all elements are already identical)
[1, 3, 9, 26, 66, 150, 313, 610] => 6
Notation:
Il s'agit du code-golf , le score le plus bas en octets dans chaque langue gagne pour cette langue. Le score le plus bas obtient la coche verte.
la source
[1,2,1]
donner 2?[1,2,1] -> [1,-1] -> [-2]
[1,3,9,26,66,150,313,610]
->6
si vous le souhaitezRéponses:
Husk , 6 octets
Merci Leo de me laisser utiliser sa version qui fonctionne pour
[1,1,1,1,1,1]
Essayez-le en ligne!
Explication
la source
[1,1,1,1]
, puis-je utiliser le vôtre?JavaScript (ES6), 47 octets
Cas de test
Afficher l'extrait de code
la source
MATL , 8 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Cela compense les différences consécutives de manière itérative jusqu'à ce que le résultat soit entièrement nul ou vide. La sortie est le nombre requis d'itérations moins 1.
la source
R ,
5044 octetsEssayez-le en ligne!
Prend un
diff
del
, le définit surl
et vérifie si le résultat contient des valeurs non nulles. Dans le cas contraire, l' incrémentF
(initialiséFALSE
implicitement), et revientF*1
à convertirFALSE
à0
dans le cas où tousl
est déjà identique.la source
+F
astuce pour 5 octets . Bonne réponse btw!Mathematica, 49 octets
merci @alephalpa pour -6 octets et @hftf -1 octet
et voici une autre approche de @hftf
Mathematica, 49 octets
la source
(s=#;t=0;While[UnsameQ@@s,s=Differences@s;t++];t)&
UnsameQ[1,2,1]
c'est faux;!SameQ[1,2,1]
est vrai. Je ne pense pas non plus que la boucle manuelle enregistre les caractères: aLength@NestWhileList[Differences,#,!SameQ@@#&]-1&
déjà la même longueur que la vôtre après avoir été remplacéeUnsameQ
par!SameQ
.Gelée , 7 octets
Essayez-le en ligne!
Explication
la source
IÐĿE€ċ0
Japt ,
107 octetsEssayez-le en ligne!
S'appuie sur le fait que le résultat est garanti dans la longueur du tableau d'entrée.
Explication
À la fin, cela mappera le tableau
[1, 3, 9, 26, 66, 150, 313, 610]
à[true, true, true, true, true, true, false, false]
,qui contient
6
true
s.Version précédente de 10 octets
Essayez-le en ligne!
la source
Perl 6 , 37 octets
Essayez-le en ligne!
Explication: La fonction prend l'entrée comme une seule liste. Il construit ensuite une séquence récursive comme celle-ci: le premier élément est la liste d'origine (
$_
), les éléments suivants sont retournés en{@(@$_ Z- .[1..*])}
étant appelés sur l'élément précédent, et cela est itéré jusqu'à ce que la condition*.none
soit vraie, ce qui ne se produit que lorsque la liste est soit vide ou ne contient que des zéros (ou, techniquement, d'autres valeurs de falsey). Nous prenons ensuite la liste et soustrayons 2 de celle-ci, ce qui la force d'abord au contexte numérique (et les listes dans le contexte numérique sont égales au nombre de leurs éléments) et, à la fin, renvoie 2 de moins que le nombre d'éléments dans le liste.Le bloc étrange
{@(@$_ Z- .[1..*])}
prend simplement la liste donnée (.[]
- ce qu'on appelle la tranche Zen - l'indexation avec des crochets vides donne la liste entière), la zippe en utilisant l'opérateur moins (Z-
) avec la même liste sans le premier élément (.[1..*]
) et la force à une liste (@(...)
- nous en avons besoin parce que zip ne renvoie qu'un Seq, qui est fondamentalement une liste à sens unique qui ne peut être itérée qu'une seule fois. C'est quelque chose que nous n'aimons pas.) Et c'est tout.la source
@(.[] Z- .[1..*])
en[.[] Z-.[1..*]]
devrait économiser deux octets.Java 8,
191 + 58 = 249198140 octets.Merci PunPun1000 pour 51 octets.
Merci Nevay pour 58 octets.
Essayez-le en ligne!
Essayez-le en ligne (version 198 octets)
Donc, c'est ma première publication ici dans PPCG (et la première fois que je fais un défi de golf de code). Toute critique constructive est la bienvenue et appréciée. J'ai essayé de suivre les directives de publication, si quelque chose ne va pas, n'hésitez pas à le signaler.
Version embellie:
la source
java.util.stream.IntStream k = java.util.Arrays.stream(a);
public
n'a pas besoin d'être inclus dans le nombre d'octets. 2) Vous ne devriez pas accepter un deuxième paramètre, mais le supprimer peut en fait économiser des octets. 3) vous pouvez y supprimer certains supports inutilesHaskell, 46 octets
cela revient simplement -
zipWith(-)l$last l
est la liste des différencesl
. etg
c'est la fonction qui répond à la question.la source
Kotlin , 77 octets
premier message, a essayé de modifier la dernière réponse sur kotlin 2 fois; D
a pris une partie de test de @jrtapsell
TryItOnline
la source
APL (Dyalog Classic) ,
2217 octetsEssayez-le en ligne!
Merci à @ngn pour -5 octets!
Comment?
{ ... }
, la fonction1=≢∪⍵:0
, si chaque élément est égal dans l'argument, retourne0
1+∇2-/⍵
, sinon, renvoyer 1 +n
des différences (cen-1
qui signifie qu'en y ajoutant un donnen
)la source
{1=≢∪⍵:0⋄1+∇2-/⍵}
Gelée , 7 octets
Essayez-le en ligne!
Explication
-1 octet merci à Jonathan Allan
la source
IÐĿEÐḟL
pour sept (je vois que Miles a également trouvé un sept utilisant la récursivité).05AB1E , 7 octets
Essayez-le en ligne!
Explication
la source
JavaScript (ES6), 58 octets
la source
Python 2 , 65 octets
-7 octets grâce à Jonathan Allan.
Essayez-le en ligne!
la source
c
à1
, décrémentation puis en utilisantprint-c
.f=lambda l,c=1:any(l)and f([j-i for i,j in zip(l,l[1:])],c-1)or-c
max(...,0)
pour passer les[1, 1, 1, 1, ...]
cas de test.Dyalog APL, 19 octets
Explication:
la source
≢-1+∘≢2-/⍣{1=≢∪⍵}⊢
k , 21 octets
Cela fonctionne en k, mais pas en oK, car la boucle while de oK s'exécute avant de vérifier la condition (par opposition à la première vérification de la condition, puis à l'exécution du code). Par conséquent, en ok, l'
1 1 1 1 1
exemple ne fonctionnera pas correctement.Essayez oK en ligne!
Explication:
la source
~&/1_=':
->1<#?
Haskell ,
666160 octetsEssayez-le en ligne!
Enregistré 5 octets grâce à Christian Sievers
1 octet enregistré grâce à fier-haskeller
iterate(z(-))
calcule les listes de différences.or.z(/=)
teste s'il y a des éléments non égaux dans ces listes.length.takeWhile
compte les listes de différences avec des éléments non égaux.la source
or.z(/=)
z=(=<<tail).zipWith
, un octet plus courtJava (OpenJDK 8) ,
9894 octetsEssayez-le en ligne!
la source
Japt , 7 octets
Même approche (mais dérivée indépendamment) que Justin avec une implémentation différente.
Essaye-le
Explication
Entrée implicite du tableau
U
.Cartographiez chaque élément.
Prenez chaque paire séquentielle (
ä
) d'élémentsU
et réduisez-la par différence absolue (a
).Réaffectez ce tableau à
U
.Count (
è
) le nombre de sous-tableaux qui retournent vrai (c'est-à-dire non nul) lorsqu'ils sont réduits par addition.la source
TI-Basic, 19 octets
Par défaut, les variables commencent à zéro. De plus, je n'ai jamais pensé utiliser
IS>(
quelque chose d'utile.la source
C # (.NET Core) ,
7069 + 18 octets-1 octet grâce à Kevin Cruijssen
Doit être 0 lors de l'appel pour fonctionner correctement. Également inclus dans le nombre d'octets:
Essayez-le en ligne!
Explication:
Version itérative 84 + 18 octets:
Essayez-le en ligne!
la source
(y,z)=>y-z
. Mais belle réponse, +1 de ma part.Clojure, 62 octets
Nice
=
peut prendre n'importe quel nombre d'arguments, et un seul argument est identique à "lui-même".(apply = [1 2 3])
est exécuté comme(= 1 2 3)
.la source
Pyth , 15 octets
Vérifiez tous les cas de test.
Comment?
Explication # 1
la source
Wtl{Q=hZ=.+Q)Z
WP{Q=hZ=.+Q)Z
. Merci!Perl 5 , 83 + 1 (-a) = 84 octets
Essayez-le en ligne!
Saisissez une liste de nombres séparés par un espace.
la source
Pyke , 11 octets
Essayez-le ici!
la source
Pyth, 10 octets
Si nous pouvons indexer à partir de 1, nous pouvons enregistrer un octet en supprimant l'interlignage
t
.Essayez-le en ligne
Explication
la source
Kotlin , 83 octets
Embellie
Tester
TryItOnline
la source
lang-kotlin
pas simplementkotlin
dans les indices de surlignage.Swift 4 , 90 octets
Mise en œuvre alternative, basée sur la fermeture:
cas de test:
la source