(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).