Listes auto-limitatives
Considérons une liste non vide L contenant des entiers non négatifs. Un run en L est une sous-liste contiguë d'éléments égaux, qui ne peut pas être allongée. Par exemple, les séries de [0,0,1,1,3,3,3,2,1,1] sont [0,0], [1,1], [3,3,3], [2 ], [1,1] . La liste L est auto-limitative si pour chaque entier N ≥ 1 , le nombre d'occurrences de N est inférieur ou égal au nombre de passages de N-1 . La liste ci-dessus n'est pas limitative, car il y a 4 occurrences de 1 , mais une seule série de 0 s.
Voici un exemple de liste auto-limitative: [0,0,3,4,1,0,2,1,1,0,2,1,0,0,0,1,0] . Il a
- 5 séries de 0 et 5 occurrences de 1 ,
- 4 séries de 1 et 2 occurrences de 2 ,
- 2 séries de 2 et 1 occurrence de 3 ,
- 1 série de 3 et 1 occurrence de 4 ,
- 1 série de 4 et aucune occurrence de 5 ,
- aucune occurrence d'autres entiers.
La tâche
Votre tâche consiste à décider si une liste se limite d'elle-même. Plus explicitement, votre entrée doit être une liste non vide d'entiers non négatifs. Si la liste se limite d'elle-même, votre sortie doit être véridique; sinon, ce sera faux. L'entrée et la sortie peuvent être dans n'importe quel format raisonnable.
Le nombre d'octets le plus bas dans chaque langage de programmation est le gagnant. Les règles de code-golf standard s'appliquent.
Cas de test
Instances véridiques:
[0]
[1,0]
[0,1,1,0,2]
[3,1,1,0,0,2,0,0]
[5,0,4,1,3,0,2,2,0,1,1,1,0]
[0,0,1,1,0,0,1,1,0,0,2,2,0,0]
[6,0,0,0,2,2,1,0,5,0,3,4,0,1,1,1]
[5,0,1,0,0,0,0,4,0,3,1,1,1,2,2,0,0,0,0,0]
[4,5,1,3,2,0,5,2,0,3,0,1,0,1,0,0,0,1,0,0,1,0,3,4,4,0,2,6,0,2,6]
[0,4,1,3,10,6,0,1,3,7,9,5,5,0,7,4,2,2,5,0,1,3,8,8,11,0,0,6,2,1,1,2,0,4]
Instances de fausseté:
[2]
[1,1,0]
[0,0,1,1,1,0,0,2]
[0,1,0,1,1,2,2,3,0,0,4,6]
[1,1,2,1,2,0,2,0,3,0,0,2,2,1,2,3,2,0,1,1,1,0,0,3,3,0]
[3,4,1,0,0,0,5,5,0,2,2,0,0,0,0,0,2,0,1,1,0,4,3,5,4,3]
[1,0,0,0,2,5,3,1,1,0,3,3,1,3,5,4,0,4,0,0,2,0,2,1,1,5,0,0,2,4,4,0,2,0,1,4,4,2,3,3,5,3,4,0,2,0,5]
[4,3,1,0,0,4,6,6,1,0,1,2,1,3,0,1,0,2,0,3,4,0,2,1,1,3,0,2,2,2,0,5,5,0,5,2,5,5,0,4,3,2,3,1,1,3,5,1,4,1,6,2,6,2,4,0,4,0,4,5,3,3,0,0,6,1,0,0,0,6,2,1,0,1,2,6,2,4]
[5,1,1,1,0,2,0,6,1,0,2,1,2,2,5,3,1,0,0,0,3,2,3,0,1,1,0,1,0,1,1,2,0,6,4,1,2,1,1,6,4,1,2,2,4,0,1,2,2,1,3,0,1,2,0,0,0,2,0,2,2,0,1,0,0,1,3,0,0,0,6,2,0,1,0,1,2,1,1,1,0,4,0,0,5,2,0,0,0,4,1,2,2,2,2,0,5,3,2,4,5,0,5]
[2]
aussi, mais de tels cas devraient être faux, oui.Réponses:
Perl 6 , 29 octets
Essayez-le en ligne!
Très beau défi pour Perl 6. Utilise l'opérateur de sous-ensemble sur les sacs (ensembles à pondération entière). Explication:
la source
JavaScript (ES6),
9289 octetsEssayez-le en ligne!
Comment?
Le tableau c [] est utilisé pour stocker à la fois le nombre d'exécutions et le nombre d'occurrences entières. Les exécutions sont stockées à des indices non négatifs et les occurrences entières sont stockées à des indices de complément à 1 ( c [-1] = nombre de 0 , c [-2] = nombre de 1 , etc.).
Les indices négatifs sont en fait enregistrés en tant que propriétés de l'objet tableau sous-jacent et .some () ne les réitère pas.
la source
Perl 5
-p
,494844 octetsEssayez-le en ligne!
la source
Gelée , 10 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Gelée , 19 octets
Essayez-le en ligne!
la source
Gelée , 17 octets
Essayez-le en ligne!
la source
Python 3 , 94 octets
Essayez-le en ligne!
la source
sum(1for ... if x==j!=y)
=>sum(x==j!=y for ...)
.Japt , 21 octets
Testez-le en ligne!
la source
Stax ,
139 octetsDennis a trouvé un bien meilleur algorithme . Je l'ai porté sans vergogne sur Stax.
Exécutez-le et déboguez-le en ligne
Déballé, non golfé et commenté, voici à quoi il ressemble.
Exécutez celui-ci
Ancienne réponse:
Exécuter et déboguer
Il itère sur l'entrée et vérifie les conditions:
> 0
?occurrences(element) >= runs(element - 1)
?Si l'une ou l'autre de ces conditions est vraie pour un élément, alors cet élément est conforme. Si tous les éléments sont conformes, le résultat est
1
.Voici la représentation commentée non emballée, non golfée du même programme.
Exécutez celui-ci
la source
Haskell, 80 octets
Essayez-le en ligne!
la source