Aujourd'hui, votre tâche consiste à écrire un programme ou une fonction qui prend un tableau d'entiers et compte le nombre de fois que la valeur change, en la lisant de gauche à droite. C'est plus facile à montrer avec un exemple:[1 1 1 2 2 5 5 5 5 17 3] => [1 1 1 **2** 2 **5** 5 5 5 **17** **3**] => 4
Cas de test:
Input | Output
[] | 0
[0] | 0
[0 1] | 1
[0 0] | 0
[1 2 3 17] | 3
[1 1 1 2 2 3] | 2
[-3 3 3 -3 0] | 3
C'est du code-golf , le moins d'octets gagne!
False
est-il imprimé à la place?2+False
et ça fait des erreurs, ce n'est pas bien, mais si je comprends2
, c'est bien.0
acceptable?Réponses:
MATL , 2 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Python 3 , 38 octets
Essayez-le en ligne!
la source
maximum recursion depth exceeded
.y>()
sera évalué à False , donc le code suivantand
ne sera pas exécuté.Haskell , 33 octets
Essayez-le en ligne!
Bonus: version arithmétique un peu curieuse sans point (44 octets)
Essayez-le en ligne!
Compte tenu de l'entrée
[1,1,4,3,3,3]
, nous avons d' abord prendre la différence des entrées adjacentes ([0,3,-1,0,0]
), laabs
valeur olute:[0,3,1,0,0]
. En prenant zéro à la puissance de chaque élément la première fois donne[1,0,0,1,1]
, et une seconde fois inverse la liste:[0,1,1,0,0]
((1-)
fonctionnerait également ici au lieu de(0^)
). Enfin, nous prenonssum
la liste pour obtenir2
.la source
Python 2 , 42 octets
Essayez-le en ligne!
la source
Brain-Flak , 50 octets
Essayez-le en ligne!
N'affiche rien pour 0, ce qui, dans brain-flak, est équivalent. Si ce n'est pas acceptable, ajoutez ceci pour les
+4
octets:({})
Explication:
la source
-0+1 = 1
Brain-Flak , 50 octets
Essayez-le en ligne!
la source
Haskell , 35 octets
-8 octets grâce à H.PWiz.
Out-golfed par une version récursive . Haskell est à peu près le meilleur en récursivité et je l'ai raté. > _ <
Essayez-le en ligne!
Ce serait génial si quelqu'un savait comment utiliser cette astuce .
Solution alternative, 36 octets
Essayez-le en ligne!
la source
uncurry
la fonctionf
pour la faire fonctionner. C'estsum.map fromEnum.(zipWith(/=)=<<tail)
probablement le plus proche que vous obtenez, mais cela ne fonctionnera pas[]
et est de 37 octets ..Java (OpenJDK 8) , 65 octets
Pas aussi court que je le souhaiterais, mais c'est juste Java pour vous.
Testez en passant le tableau sous forme de liste séparée par des virgules.
Essayez-le en ligne!
la source
a->{int s=0,p=a[0];for(int n:a)s+=p==(p=n)?0:1;return s;}
(57 octets).a->{int s=0;for(int i:a)s+=a[0]!=(a[0]=i)?1:0;return s;}
Husk , 3 octets
Essayez-le en ligne!
Explication
la source
Ohm v2 , 3 octets
Essayez-le en ligne!
Explication
la source
sign
intégrée!Wolfram Language (Mathematica) , 23
242629octetsEssayez-le en ligne!
Split[]
.une petite explication:
Split
divisera un tableau en une liste de listes (des mêmes éléments), c'est-à-dire se transformant{1, 2, 2, 3, 1, 1}
en{{1}, {2, 2}, {3}, {1, 1}}
. Donc,Length@Split@#
c'est la quantité de segments consécutifs.Max[*****-1, 0]
est utilisé pour gérer les{}
entrées.la source
Max[Length@Split@#-1,0]&
Length@Split@#~Max~1-1&
Rétine ,
242116 octetsMerci à @MartinEnder pour -3 octets et avoir remarqué un bug
-1 octet grâce à @tsh
-4 octets grâce à @Leo
Essayez-le en ligne!
la source
Python symboliques ,
120117 octetsGolfé 3 octets en supprimant un transtypage explicite en entier (en utilisant unaire
+
) pour la variable de compteur - cela signifie que s'il n'y a aucun changement dans le tableau, la sortie sera à laFalse
place de0
, mais cela est autorisé par la méta .Essayez-le en ligne!
la source
Gelée , 3 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
K (oK) , 8 octets
Solution:
Essayez-le en ligne!
Exemples:
Explication:
Interprété de droite à gauche:
la source
05AB1E , 3 octets
Essayez-le en ligne!
la source
Husk , 4 octets
Essayez-le en ligne!
la source
R , 24 octets
Essayez-le en ligne!
Identique à la réponse MATL, juste utilisée
sum(!!diff))
car il n'y a pasnnz
.la source
rle
serait plus courte, mais non,length(rle()$v)
utilise trop de caractères et est désactivée par un.sum(rle()$v|1)
place delength
toute façon. :)Cubix , 24 octets
Essayez-le en ligne
Notez que Cubix utilise 0 pour indiquer qu'il n'y a plus d'entrées, donc 0 ne peut pas être dans la liste.
Explication
Déplié:
Nous commençons par le
0
, poussant le compteur (initialisé avec0
) et la première entrée (I
) sur la pile.On entre alors dans la boucle. À chaque itération de la boucle, nous obtenons l'entrée suivante avec
I
. Si c'est 0, nous n'avons plus d'entrées, nous faisons donc tourner le compteur vers le haut (p
), l'O
utput et l'exit (@
).Sinon, nous prenons la différence des deux premiers éléments. S'il est différent de zéro, nous faisons pivoter le compteur vers le haut, l'incrémentons et le faisons pivoter vers le bas avec
p)q
. Nous faisons ensuite apparaître la différence avec;
avant de passer à l'itération suivante.Tous les personnages non mentionnés ici ne sont que des flux de contrôle. Il y en a beaucoup dans les programmes Cubix.
la source
0
pour un(
, mais cela échoue sur l'entrée vide.Brain-Flak , 50 octets
Essayez-le en ligne!
Étant donné que tout le monde publie ses solutions de 50 octets, voici la mienne (j'en ai une de 48 octets, mais c'était une simple modification de DjMcMayhem, donc j'ai senti que cela valait la peine d'être publié)
Explication
Cette réponse utilise largement l'annulation de valeur.
Sans golf, il ressemble
Ici, nous calculons les delta jusqu'à ce qu'il reste un élément à la pile, chaque fois que nous accumulons une valeur de la boucle interne si le delta n'est pas nul.
C'est une façon assez simple de le faire.
Pour faire ce golf, nous commençons à annuler la valeur. Le premier et celui qui devrait être évident pour tout golfeur endurci de flak de cerveau est la hauteur de la pile. C'est un fait bien connu que
est le même que
Lorsque les valeurs sont modifiées par un, il en va de même. Cela nous donne
Vous remarquerez peut-être que cela ne nous a même pas sauvé des octets, mais ne vous inquiétez pas, cela deviendra plus utile au fur et à mesure.
Nous pouvons effectuer une autre réduction, si vous voyez une déclaration
vous pouvez réellement le réduire à
Cela fonctionne parce que si nous entrons dans la boucle
[(...)]
et que{}
nous annulerons, et si nous ne le faisons pas, la valeur de[(...)]
déjà était zéro en premier lieu et n'a pas besoin d'être annulée. Puisque nous avons une occurrence de ce modèle dans notre code, nous pouvons le réduire.Cela nous a permis d'économiser 2 octets, mais cela a également mis deux négatifs l'un à côté de l'autre. Ceux-ci peuvent être combinés pour nous sauver encore 2.
Et c'est notre code.
la source
Perl 6 , 18 octets
Essaye-le
Étendu:
la source
Gaia , 2 octets
Essayez-le en ligne!
Cela abuse d'un bogue (ou d'une fonctionnalité?) De Gaia, que l'encodage de la longueur de l'exécution ne prend pas en compte la dernière exécution des éléments. Notez que j'ai revérifié, cela fonctionne pour tous les cas de test.
ė
- Codage de longueur de course (avec la faille décrite ci-dessus).l
- Longueur.la source
JavaScript (ES6), 35 octets
la source
f=([a,...b])=>1/a?!!(a-b[0])+f(b):0
Pyth, 5 octets
Suite de tests.
Explication:
la source
APL (Dyalog) , 8 octets
Essayez-le en ligne!
Comment?
⊃,⊢
- la liste, avec la première valeur répétée pour le cas d'un élément unique2≠/
- liste des changements, pas égal pour tous les 2 éléments+/
- sommela source
Perl 5 , 37 + 2 (
-ap
) = 39 octetsEssayez-le en ligne!
la source
J, 10 octets
Les infixes de longueur 2 ... sont-ils inégaux?
2 ~:/\ ]
Additionnez la liste résultante de
0
s et1
s:+/
Essayez-le en ligne!
la source
[:+/0=-/\
devrait fonctionner pour je pense que 9 octets.Rubis , 31 octets
Essayez-le en ligne!
la source
.drop(1)
vous pouvez le faire[1..-1]
drop
renvoie malheureusement un énumérateur, pas un tableau, donc cela ne fonctionne pas.size
d'un tableau de toute façon?C (gcc 5.4.0), 61 octets
Essayez-le en ligne!
f
est une fonction prenant la longueur du tableau et un pointeur sur le premier élément du tableau, et renvoyant le nombre de changements dans le tableau;Cette soumission utilise un comportement non défini (
*p++!=*p
, p est utilisé deux fois dans une expression dans laquelle il est modifié), qui fonctionne sur ma machine (gcc 5.4.0) et sur TIO, mais peut ne pas fonctionner sur d'autres implémentations ou versions.Explication:
la source
05AB1E , 3 octets
Essayez-le en ligne!
Une alternative à la réponse d'Erik.
la source