Parfois, quand je m'ennuie vraiment, j'aime prendre la somme d'un tableau d'entiers non négatifs. Je ne prends que la somme des tableaux de longueurs qui sont des puissances de deux. Malheureusement, je fais souvent des erreurs. Heureusement, je garde la trace de mon travail au fur et à mesure de la manière suivante:
J'ajoute des paires de nombres adjacents jusqu'à ce qu'il n'en reste plus qu'un. Par exemple:
6 + 18 + 9 + 6 + 6 + 3 + 8 + 10
= 24 + 15 + 9 + 18
= 39 + 27
= 66
Votre travail consiste à déterminer si j'ai fait une erreur quelque part. Vous pouvez soit faire passer l'entrée à votre fonction ou lire à partir de l'entrée standard. La sortie peut être imprimée ou retournée.
Entrée: Un tableau / liste / etc. d'entiers non négatifs, et éventuellement aussi la longueur de ce tableau si votre langue l'exige. Ce tableau sera tous les nombres lus de gauche à droite puis de haut en bas. Par exemple, le tableau ci-dessus deviendrait:
[[6, 18, 9, 6, 6, 3, 8, 10], [24, 15, 9, 18], [39, 27], [66]]
ou
[6, 18, 9, 6, 6, 3, 8, 10, 24, 15, 9, 18, 39, 27, 66]
si vous préférez.
Sortie: un seul booléen indiquant si une erreur a été commise ou non. Le booléen peut être représenté en utilisant n'importe quel mappage à condition que toutes les entrées où une erreur est commise retournent / impriment un résultat identique et toutes les entrées qui ne contiennent aucune erreur retournent / impriment un résultat identique. Cela va sans dire, mais ces deux sorties ne peuvent pas être identiques.
Quelques exemples de sommations correctes:
6
5+6
=11
3 + 2 + 4 + 5
= 5 + 9
= 14
[0, 1, 2, 3, 1, 5, 6]
[[1, 2, 4, 8], [3, 12], [15]]
Quelques exemples de sommation incorrecte:
5+4
=8
4 + 4 + 4 + 4
= 9 + 7
= 16
[[1, 2, 3, 4], [7, 3], [10]]
[3, 4, 5, 6, 7, 8, 9]
Gardez à l'esprit que je peux faire des erreurs tout en obtenant la bonne réponse. Si je fais une erreur, cela n'entraînera jamais un nombre supplémentaire ou un nombre manquant dans le tableau final, seulement un mauvais numéro.
Les failles standard sont interdites. La réponse la plus courte dans chaque langue est gagnante. La réponse la plus ancienne l'emportera en cas d'égalité. Je conserve le droit de décider ce qu'est le "même langage", mais je dirai tout de suite qu'un point ne peut pas être gagné à la fois en Python 2 et en Python 3.
[0,1,2,3,1,5,6]
n'est pas valide car "Input: An array / list / etc. Of positive integers".Réponses:
Gelée , 6 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 2 , 51 octets
Essayez-le en ligne! Merci à Rod pour les cas de test.
Prend toute la liste à plat en entrée. Regroupe les éléments en paires adjacentes à l'aide de l' astuce zip / iter , prend la somme des paires et vérifie si le résultat est égal à la seconde moitié de la liste.
Une méthode récursive s'est approchée de 55 octets:
Cela a utilisé que les entiers d'entrée sont positifs, ce qui a depuis changé dans la spécification.
la source
[0,0,1,1,1,1,1]
.Röda , 40 octets
Essayez-le en ligne!
C'est une fonction anonyme qui revient
0
s'il n'y a pas d'erreurs et rien s'il y a des erreurs.Explication:
Voici une version plus courte (35 octets) mais contraire aux règles (je pense):
Essayez-le en ligne!
C'est une fonction anonyme qui lit les valeurs du flux et pousse
TRUE
ouFALSE
pour chaque ligne correcte.Je ne sais pas si cela (plusieurs valeurs de retour) est accepté dans les règles. Voici ma défense: dans Röda, les conditions de
if
et leswhile
blocs ne sont pas des valeurs booléennes, mais des flux. Un flux "véridique" est soit vide, soit ne contient que desTRUE
s, et un flux "falsifié" contient un ou plusieursFALSE
s. De cette façon, cette fonction renvoie une valeur "booléenne". Et peut être utilisé comme condition d'uneif
instruction sans aucune opération de réduction, etc.la source
0
. Je ne sais pas exactement comment Röda gère cela, mais ce n'est pas inconnu.if
conditionnel. Si c'est ainsi que fonctionne Röda, il respecte nos règles, à moins que la spécification de défi ne remplace explicitement les valeurs par défaut.Python 2 ,
6965 octetsEssayez-le en ligne!
Renvoie:
Liste vide en tant que
Falsy
somme totale en tant que
Truthy
la source
Mathematica, 36 octets
Fonction pure prenant une liste imbriquée en entrée et retournant
True
ouFalse
. La fonctionTr/@#~Partition~2&
prend les sommes par paire d'une liste, qui est ensuite appliquée (/@#
) à chaque sous-liste de la liste d'entrée. Les première, deuxième, ... sous-listes de la liste résultante sont censées égaler les deuxième, troisième, ... sous-listes de l'entrée d'origine;Most[...]==Rest@#
teste cette propriété.la source
Python 2 , 80 octets
Essayez-le en ligne!
Pas aussi bon que l'autre réponse python, mais j'avais envie de le poster quand même. Cela montre simplement pourquoi je ne suis pas aussi bon au golf dans les langues régulières .
la source
JavaScript (ES6), 54 octets
Prend un tableau aplati.
la source
05AB1E ,
1512 octetsEssayez-le en ligne!
Explication
la source
Haskell ,
827965 octets-14 octets grâce à nimi!
Fonctionne en comparant la somme de chaque paire d'éléments à l'élément correspondant sur la ligne suivante. Certains octets peuvent probablement être joués au golf
f
, mais je ne sais pas où.la source
p
:p(x:y:z)=x+y:p z
puis utiliser auzipWith(==)
lieu dezip
et combiner la liste desBool
avecand
:f x=and.zipWith(==)(drop(length x`div`2+1)x)$p x
.Python 3 ,
6968 octetsJe sais qu'il y a déjà deux autres réponses en python ... mais celle-ci est en python 3, donc c'est exotique.
Cela fonctionne sur une entrée aplatie.
Sortie :
False
s'il n'y a pas d'erreur,True
s'il y a une erreur.la source
Rubis, 50 octets
En inversant le tableau, tout élément de la première moitié (position n) doit être la somme des éléments en position n * 2 et n * 2 + 1.
la source
Brachylog ,
1613 octetsEssayez-le en ligne!
C'est terriblement long! Il doit y avoir un moyen de ne pas imbriquer les prédicats en ligne ici.
Le prédicat réussit (impression en
true.
tant que programme) si aucune erreur n'a été commise et échoue (impression enfalse.
tant que programme) dans le cas contraire.la source
Python 2 , 64 octets
Essayez-le en ligne!
Une fonction sans nom qui prend une liste de listes (une par ligne de travail pour ainsi dire) et renvoie True si aucune erreur n'a été commise et False sinon.
Cela fonctionne en utilisant l'entrée sans la dernière entrée,
a[:-1]
pour former ce que l'entrée sans la première entrée devrait être et en vérifiant ce qui a été entré,==a[1:]
.Cette formation est obtenue en mappant la fonction d'addition du type entier
int.__add__
, sur les paires de nombres fournies par deux "tranches", une tranche étant tous les autres éléments commençant au 0e indexx[::2]
, l'autre tranche étant tous les autres éléments commençant au 1er index,x[1::2]
.la source
Pip ,
2019 octetsIl s'agit d'une fonction anonyme qui prend un argument, une liste de listes (par exemple
[[1 2 3 4] [3 7] [10]]
). Vérifiez tous les cas de test: essayez-le en ligne!Explication
Dans une fonction Pip, les deux premiers arguments sont affectés à
a
etb
.Par exemple:
la source
PHP,
9695 octets:en utilisant des builtins:
les fonctions récursives renvoient
true
oufalse
.ventilation pour la première fonction:
anciennes solutions (96 octets chacune) utilisant des boucles:
ventilation pour la dernière fonction:
extraits itératifs, 81 octets
supposer tableau prédéfini dans
$a
; se ferme avec erreur s'il est incorrect.la source
C, 54 octets:
Ungolfed:
Testez avec
Comme vous le voyez,
f()
renvoie true pour les entrées non valides et false (= 0) pour les entrées valides.Comme toujours, la récursivité est moins d'octets que l'itération, elle
f()
est donc récursive, même si elle prend deux itérateurs comme arguments. Il fonctionne en comparant à plusieurs reprises la somme de deux entiers às
à un entier ene
, ignorant les limites de niveau et continuant jusqu'à ce que les deux itérateurs se rencontrent. J'ai également utilisé du zen booléen avec le fait que toute valeur entière non nulle est considérée comme vraie en C pour raccourcir davantage le code.la source
R,
9277 octetsFonction anonyme qui prend en entrée une séquence de nombres plats. Retourne
TRUE
ouFALSE
selon le cas. Utilise la même approche conceptuellement que la réponse python de xnor.Solution précédente, en utilisant la
rollapply
fonction duzoo
package et en prenant l'entrée comme une liste, par exemplelist(c(6, 18, 9, 6, 6, 3, 8, 10), c(24, 15, 9, 18), c(39, 27), c(66))
:la source
JavaScript (ES6),
4644 octetsPrend l'entrée comme un tableau aplati. Renvoie
NaN
pour valide ou0
pour invalide.Tester
Afficher l'extrait de code
la source
PHP, 102 octets
entrée als paramètre url dans ce format
?0=[1,2,3]&1=[3,3]&2=[6]
utiliser cette entrée[[int,int],[int]]
Panne
la source
Japt, 10 octets
Prend l'entrée comme un tableau 2D.
L'essayer
la source