Un tracé de tige et de feuille affiche un groupe de valeurs numériques en groupes, qui sont déterminées par tous sauf le dernier chiffre. Par exemple, supposons que nous ayons cet ensemble de données:
0, 2, 12, 13, 13, 15, 16, 20, 29, 43, 49, 101
Nous pourrions produire ce tracé de tige et de feuille:
0|02
1|23356
2|09
3|
4|39
5|
6|
7|
8|
9|
10|1
La tige de la première ligne est 0, donc ses "feuilles" - les chiffres après le |
- représentent les valeurs comprises entre 0 inclus et 10 exclus. Les feuilles sur chaque tige sont triées. Des tiges sans feuilles (comme 3) apparaissent toujours dans l'intrigue. La valeur de 101 se situe entre 100 inclus et 110 exclus, donc sa tige est 10 (100 divisé par 10).
Votre défi consiste à vérifier si un morceau de texte est un tracé de tige et de feuille valide. Un tracé valide satisfait ces règles:
- A exactement une ligne pour chaque tige (c.-à-d. Groupe de 10 larges) dans la plage des données (y compris les tiges au milieu de la plage sans feuilles)
- N'a pas de tiges en dehors de la plage
- Toutes les feuilles sont triées par ordre croissant vers la droite
- Toutes les tiges sont triées en ordre croissant
- N'a que des caractères numériques (en plus du séparateur
|
)
Vous n'êtes pas obligé de traiter des nombres qui ont des parties fractionnaires. Vous pouvez approuver ou rejeter des zéros non significatifs supplémentaires dans les tiges, mais une tige vide n'est pas autorisée. Il y aura au moins une valeur. Vous ne pouvez accepter que des espaces supplémentaires après les feuilles de chaque ligne. Vous pouvez supposer une nouvelle ligne de début et / ou de fin. Tous les caractères seront imprimables en ASCII.
Votre fonction ou programme doit retourner ou afficher (à l'écran ou la sortie standard) une valeur véridique pour un tracé valide, ou une valeur falsifiée pour un tracé invalide. Vous pouvez prendre l'entrée de l'entrée standard, d'un fichier, comme une grande chaîne, comme un tableau de chaînes - ce qui est le plus pratique.
Voici quelques cas de test qui sont des tracés valides (séparés par des lignes vides):
2|00003457
3|35
4|799
5|3
99|3
100|0556
101|
102|
103|8
0|0
Voici quelques cas de test qui sont des tracés invalides, avec des commentaires à droite:
|0 Blank stem
5|347 Missing a stem (6) in the range
7|9
4| Has a stem (4) outside the range
5|26
6|7
11|432 Leaves aren't sorted correctly
12|9989
5|357 Stems aren't sorted correctly
4|002
6|1
4|5 Duplicate stem
4|6
4|6
5|1
51114 No stem and leaf separator
609
1|2|03 Multiple separators
2|779|
4|8abcdefg9 Invalid characters
5|1,2,3
75 | 4 6 Invalid characters (spaces)
76 | 2 8 8 9
C'est le golf de code, donc le code le plus court gagne! Les failles standard ne sont pas autorisées.
1|2|3
dedans.4|;5|26;6|7
qui a la première tige en dehors de la plage, mais à la fin, c'est-à-dire12|3;13|4559;14|
.Réponses:
Perl, 47 octets
Comprend +2 pour
-0p
Donnez votre avis sur STDIN
stem.pl
:la source
$"
est très sympa!Pip ,
6058 + 1 = 59 octetsPremier coup au problème, pourrait probablement utiliser plus de golf. Utilise l'
-r
indicateur pour lire les lignes d'entrée de stdin. La sortie est1
vraie, la sortie fausse est0
ou une chaîne vide.Explication et suite de tests en attente, mais en attendant: Essayez-le en ligne!
la source
JavaScript, 189 octets
Solution alternative de même longueur:
Définit une fonction anonyme qui prend l'entrée comme une chaîne multiligne.
Je suis sûr qu'il y a plus au golf, alors faites-moi savoir si vous voyez des améliorations possibles.
Explication:
La fonction vérifie un certain nombre de mauvaises choses, et si certaines d'entre elles sont vraies, elle retourne false (en utilisant des OU logiques et un NON)
Dans la solution alternative, la vérification de plusieurs
|
s dans une ligne se fait à la place dans le premier regex.la source
test
au lieu deexec
(vous voulez presque toujours utilisertest
si vous n'avez besoin que d'un résultat booléen`), vous pouvez probablement utiliser bitwise ou au lieu de logique ou.y.some((c,i,a)=>...
pary.some(c=>...
sincei
eta
ne les utilisez pas. Et il semble quez!=z.sort((a,b)=>a-b)
cela ne fonctionne pas, il pourrait être remplacé par''+z!=z.sort()
Lot, 409 octets
Prend une entrée sur STDIN, mais se ferme dès qu'il voit une erreur.
la source