(Ceci est ma première question de code-golf)
Quand j'étais enfant, mon père et moi avons inventé un jeu où la plaque d'immatriculation que nous voyons sur les voitures peut donner certains points sur la base de règles assez simples:
X montant de la même lettre ou du même chiffre donne X-1 points, exemples:
22 = 1 point
aa = 1 point
5555 = 3 points
Les nombres doivent être côte à côte, donc 3353
ne donne que 1 point, car le 5 rompt la séquence de 3.
Une séquence de nombres X dans l'ordre croissant ou décroissant, au moins 3, donne X points, des exemples:
123 = 3 points
9753 = 4 points
147 = 3 points
Le système de points ne fonctionne que pour les nombres à 1 chiffre, donc 1919
ne donne pas de points, et 14710
ne donne que 3, (147).
Les séquences peuvent être combinées pour faire plus de points, des exemples:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
Vous n'êtes cependant pas autorisé à couper une séquence plus grande en 2 séquences plus petites pour des points supplémentaires: 1234 = 123, 234 (6 points)
n'est pas autorisé.
Votre tâche consiste, selon une séquence, à déterminer le nombre de points accordés par la plaque d'immatriculation.
Au Danemark, les plaques d'immatriculation sont structurées comme ceci: CC II III, où C est un caractère et I est un entier, et donc mes exemples d'entrées refléteront cette structure. Si vous le souhaitez, vous pouvez adapter la séquence à votre propre structure ou, si vous vous sentez vraiment aventureux, laissez le programme analyser la structure de la plaque d'immatriculation et ainsi la faire fonctionner sur n'importe quel type de plaque d'immatriculation à travers le monde. Indiquez explicitement la structure que vous décidez d'utiliser dans votre réponse.
Vous pouvez prendre l'entrée comme bon vous semble, soit une chaîne ou un tableau me semble plus logique.
Entrée de test | sortie:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
En raison de la nature du choix de votre propre structure, ou même de la couverture de toutes les structures, je ne vois pas nécessairement comment un gagnant peut être explicitement déterminé. Je suppose que le gagnant sera les octets les plus courts sur la structure que l'on a décidé. (Et ne prenez pas une entrée comme CICIC, juste pour vous faciliter la tâche)
MODIFIER:
En raison de commentaires demandant, j'ai quelques informations supplémentaires à partager: Une séquence de nombres ascendants ou descendants fait référence à une séquence arithmétique, donc X +/- a * 0, X +/- a * 1, ... X +/- a * n etc. Donc 3-5-7 par exemple est 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. La séquence n'a cependant pas besoin de commencer par 0 ni de se terminer par 0.
PLUS DE MODIFICATION:
Vous pouvez donner l'entrée comme bon vous semble, vous n'avez pas besoin de saisir d'espaces, de tirets ou de toute autre chose qui rend la plaque d'immatriculation plus lisible. Si vous pouvez économiser des octets en n'acceptant que des majuscules ou quelque chose comme ça, vous pouvez le faire également. La seule exigence est que votre programme puisse prendre une chaîne / un tableau / n'importe quoi contenant à la fois des caractères et des nombres, et produire le nombre correct de points selon les règles énoncées.
XX 87 654
. J'ai trouvé quelque chose qui était correct pour tous vos cas de test mais en quelque sorte incorrect pour celui-ci.CCIIIII
, pas d'espaces), ou bien ce problème manque d'un critère de victoire objectif, dont nous avons besoin ici. En l'état, «(Et ne prenez pas de commentaires comme le CICIC, juste pour vous faciliter la tâche)» est très subjectif. Qu'est-ce qu'une structure admissible et non?IA99999
(contient une séquence décroissante de points de code, mais pas de nombres).Réponses:
05AB1E ,
25222018 octetsAccepte une chaîne de caractères et de chiffres alphabétiques en minuscules sans espaces.
Essayez-le en ligne! ou comme suite de tests
la source
Husk ,
201615 octets-1 octet grâce à @Zgarb
Prend la saisie sans espaces et en minuscules.
Essayez-le en ligne!
Explication
la source
K0
peut être¬
ici.IA99999
.Python 3 ,
19385 octets-3 octets grâce à Lynn
Prend entrée comme une chaîne d'octets avec des lettres minuscules que:
b'aa11111'
.Essayez-le en ligne!
la source
C=0!=d==c-l
est encore plus court.Java 8, 195 octets
Peut certainement être joué un peu plus en utilisant une autre technique pour vérifier les séquences.
Explication:
Essayez ici.
la source
Pyth ,
5150 octets (stupéfiant)Vérifiez tous les cas de test ou essayez-le ici.
la source
R ,
153,145, 143 octetsFonction anonyme qui prend un vecteur de caractères et retourne un entier.
Entrée attendue
z(c("A", "A", "1", "1", "1", "1", "1"))
Essayez-le en ligne!
Version non golfée
la source
C (gcc) , 91 octets
Essayez-le en ligne!
Idée volée à la réponse de Felipe Nardi Batista en Python .
la source
Pyth ,
4842 octetsPort direct de ma réponse python. Prend l'entrée comme une chaîne d'octets avec des lettres minuscules comme: b'aa11111 '.
C'est mon premier codage en Pyth, donc tous les conseils sont les bienvenus: D
Essayez-le ici
la source
JavaScript,
216192186202201 octetsNon minifié
Modifier l'historique:
0000 XXX
format. (-24 octets)la source
0000
donne 7 points, est-ce exact? (ça se lit comme une séquence arithmétique et une séquence de nombres répétée en même temps)