Matrices en alternance
Un tableau alternatif est une liste de n'importe quelle longueur dans laquelle deux valeurs (pas nécessairement différentes) alternent. C'est-à-dire que tous les éléments à index pair sont égaux et que tous les éléments à index impairs sont égaux.
Votre tâche est d’écrire un programme ou une fonction qui, lorsqu’on lui donne une liste d’entiers positifs, sort / retourne truthy
s’il est alterné et falsy
sinon.
C'est du code-golf , donc le code le plus court (en octets) gagne!
Cas Edge:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Autres cas de test:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
Exemple
Voici un exemple contre lequel vous pouvez tester votre solution, écrite en Python 3 (non joué au golf):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Réponses:
Gelée , 4 octets
Essayez-le en ligne!
Comment ça marche
la source
2
à d'autres numéros généralise immédiatement le défi!Ɲ
n'existait pas lorsque le défi a été posté.brainfuck, 34 octets
Prend le tableau en tant que valeur d'octet dans une chaîne et génère
\x00
pour false et\x01
pour true.Essayez-le en ligne.
Cela maintient la structure
a b 1 c
sur la bande, où se
c
trouve le caractère actuel,b
le caractère précédent eta
le précédent, tant que le tableau alterne. Si une incompatibilité est trouvée, le pointeur est déplacé vers la gauche de telle sorte quea
,b
et l'1
indicateur devient tous zéro, et cette situation perdurera jusqu'à ce que toutes les entrées soient consommées.la source
R,
2423 octetsLit un vecteur dans STDIN, prend les deux premiers éléments de ce vecteur et vérifie l’égalité. Si les longueurs de
a[1:2]
et ne correspondent pas, R effectuera une bouclea[1:2]
pour correspondre à la longueur de a. Cela vous avertira de le faire, mais cela fonctionnera.Étonnamment, cela fonctionne même pour les entrées vides, sans trop savoir pourquoi, mais je vais rouler avec.
Enregistré 1 octet grâce à @MickyT
la source
all((a=scan())==a[1:2])
MATL ,
7 à6 octetsPour les tableaux en alternance, cela produit une matrice non vide de vrais, ce qui est la vérité. Pour les matrices non-alternées, la matrice contient au moins un zéro et est donc faussée (voir ici ).
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Prenons
[1 2 1 2]
comme exemple l'entrée.la source
JavaScript (ES6), 27 octets
Cas de test
Afficher l'extrait de code
la source
Rétine , 25 octets
Essayez-le en ligne!
Au lieu de faire correspondre une entrée avec des valeurs alternatives (ce qui entraîne des effets de bord gênants dans une regex), je fais correspondre des entrées qui ne sont pas valides, puis j'annule le résultat.
L'avantage de faire correspondre une entrée non valide réside dans le fait qu'il s'agit d'une propriété pouvant être vérifiée localement et qu'il n'est pas nécessaire de traiter spécialement les entrées vides ou courtes: toute entrée est non valide si elle contient deux valeurs distinctes séparées par une position.
Ainsi, la première étape compte le nombre de correspondances
\b(\d+),\d+,(?!\1\b)
dont correspond une capture et capture une valeur, puis correspond à la valeur suivante et affirme ensuite que la troisième valeur de la séquence est différente. Cela donne zéro pour les entrées valides et positif pour les valeurs non valides.La deuxième étape compte simplement le nombre de matches de ce
^0
qui est1
si la première étape est revenu0
et1
autrement.la source
Mathematica, 29 octets
Un port de l'algorithme MATL de Luis Mendo. Fonction sans nom prenant une liste de nombres (ou même d’objets plus généraux) et renvoyant
True
ouFalse
. Teste si les sommes des éléments consécutifs sont toutes égales. MalheureusementMost
,Rest
la liste est vide et doit donc être testée séparément.Mathematica, 33 octets
Fonction sans nom prenant une liste de nombres (ou même d’objets plus généraux) et renvoyant
True
ouFalse
. La fonctionDifferences[#,1,2]
prend les différences, non pas de paires consécutives d'entiers, mais de paires d'entiers distants de deux. Ensuite, nous vérifions simplement si la liste résultante ne contient que des zéros.En bonus, pour un octet de plus (changez le
2
en#2
), nous obtenons une fonction qui entre une liste d’entiers et un autre entier positif#2
, et vérifie si la liste d’entrée est le résultat de l’entrelacement de#2
séquences constantes. Par exemple,évalue à
True
.la source
Haskell,
27 à26 octetsCela donne une fonction anonyme qui résout le problème. L'idée est de supprimer les deux premiers nombres de la liste, de compresser la liste d'origine en utilisant l'égalité et de vérifier que le résultat ne contient que
True
s. Essayez-le en ligne!Merci à nimi pour 1 octet!
la source
and.(zipWith(==)=<<drop 2)
enregistre un octet.La rétine ,
393228 octetsEssayez-le en ligne!
Sauvegardé 7 octets grâce à Martin ! A sauvé 3 autres grâce à Kobi ! Et à Kritixi pour une idée pour un autre 1.
Nous sélectionnons éventuellement un nombre qui occupe la totalité de l'entrée, une paire de nombres ou une paire de nombres suivis par la même paire un nombre quelconque de fois et n'incluant éventuellement pas le deuxième nombre à la toute fin. Pourrait économiser 2 octets si l'entrée était unaire.
la source
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
alternative de 29 octets. Cela ne correspond pas,1,,1
.Pyth, 9 octets
Explication
la source
Q
s au code. Je les ai ajoutés dans l'explication pour clarifier ce qui se passait, mais ils ne sont pas vraiment dans le code.Brachylog , 15 octets
Essayez-le en ligne!
Explication
la source
APL, 7 octets
Explication:
2⍴⊢
: remodeler le tableau d'entrée par 2⍴⍴
: remodeler le résultat en fonction de la taille d'origine de l'entrée, en répétant les éléments⊢≡
: voir si le résultat est égal à l'entrée d'origineCas de test:
la source
Java 8, 63 octets
Ceci est une expression lambda pour un
Predicate< int[ ] >
Explication: initialisez le résultat à 0. Pour chaque élément, séparez OU le résultat avec la différence entre l'élément en cours et l'élément 2 est indiqué plus tôt. retourne
true
si le résultat est égal à 0. Sinon, retournefalse
la source
Perl 6 ,
49 4342 octetsL'essayer
L'essayer
L'essayer
Étendu:
la source
$_[1]
peut être un octet plus court que.[1]
. Le corps du lambda interne peut être un octet plus court que{.[0]!=a||.[1]!=b}
..[1]
. Aussi!=
ne semble pas fonctionner si ce n'est pas suivi d'un espace. Je pense que quelque chose comme$_!=3
est en cours d'analyse comme si elle était écrite comme!( $_ = 3 )
Python 2 , 35 octets
Essayez-le en ligne!
la source
J, 8 octets
Explication
Cas de test
la source
{.
Take with$
Shape.Haskell ,
3332 octetsEssayez-le en ligne! ou Vérifiez les cas de test. -1 octet grâce à Zgarb.
la source
[]
, mais pour une raison quelconque, ghc ne peut pas en déduire le type correct[]
. Cela fonctionne s'il est testé avec l'autre cas de test, voir Vérifier les cas de test.f(a:x@(_:b:_))=a==b&&f x
bash,
565438 octetsEnregistrez ceci en tant que script et transmettez la liste des nombres en tant qu'arguments (pour une liste à n éléments, vous passerez n arguments). La sortie est le code de sortie: 0 (pour vrai) si la liste est en alternance et 1 (pour faux) sinon.
(Le retour de la sortie dans le code de sortie est autorisé dans les méthodes d'E / S standard PPCG.)
Cela fonctionne de manière récursive:
la source
Python 2.7, 38 octets
Cas de test:
la source
Pyke, 6 octets, sans compétition
Essayez-le ici!
Autoriser le nœud de remodelage à prendre une liste ainsi qu'une chaîne
la source
Shenzen IO (Assembler),
8376 octets, non en concurrenceShenzen io est un jeu de puzzle dans lequel vous pouvez coder votre code dans un langage spécial pour assembleur.
Malheureusement, vous ne pouvez utiliser que des entiers compris entre -999 et 999 en tant qu'entrées ou sorties et il est impossible de savoir si un tableau est terminé. J'ai donc supposé que le tableau était écrit sur une ROM qui s'enroule après la lecture de la dernière cellule. Cela signifie que seuls les tableaux peuvent être utilisés, ce qui explique leur non-concurrence.
Code:
Explication:
Désolé si tout ceci est déroutant, ceci est ma première réponse code-golf.
EDIT: suppression de 7 octets en remplaçant les boucles par du code run-once
la source
Ruby, 23 octets
la source
Ruby,
131119 octetsLambda
a
attend un tableaux
et renvoie true s'il existe 0 ou 1 valeur unique pour les éléments indexés impairs et 0 ou 1 valeur unique pour les éléments indexés pairs du tableau.Notable Byte-Safers
def
!arr[1]
contre.arr.length < 2
&
contre&&
Cas de test
la source
Dart, 46 octets
Courir avec:
la source
C #, 54 octets
Filtrez le tableau pour afficher les valeurs qui ne correspondent pas à la première valeur pour evens et à la deuxième valeur pour les probabilités. S'il n'y a pas de résultat, retourne vrai.
la source
Japt,
7 à6 octetsEssayez-le ou lancez tous les cas de test
la source
C #, 66 octets
Fonction anonyme qui reçoit un tableau entier et renvoie 1 si le tableau est alternatif et 0 sinon.
Programme complet avec fonction non golfée et cas de test:
la source
Octave, 51 octets
L'entrée est un tableau de cellules d'entiers positifs.
Essayez-le en ligne!
la source
Clojure, 70 octets
Vérifie que le nombre distinct de chaque deuxième élément est égal à 1 et traite les collections vides en tant que cas particulier. Aussi essayé de nombreuses approches basées sur
reduce
etgroup-by
mais pas beaucoup de chance là-bas.la source
Une autre option avec R: 36 octets.
Et je pense avoir trouvé une version beaucoup plus courte: 15 octets
la source