Le défi
Créez une fonction qui, lorsqu'elle reçoit une entrée d'art ASCII (dirigeant un chemin qui peut éventuellement boucler), génère la longueur de la boucle (s'il y en a une) et la longueur de la "queue" menant dans la boucle dans l'un des formulaires ci-dessous.
Contribution
Votre entrée doit être transmise à une fonction. Voici un exemple d'une entrée simple.
# --> # --> #
^ |
| |
| v
# <-- #
Vous pouvez visualiser les blocs ci-dessus comme ceci
La "queue" est un élément, tandis que la boucle est longue de quatre.
Un plus difficile:
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #
Production
Vous devez sortir via STDOUT ou l'alternative la plus proche de votre langue.
Vos deux entiers de sortie devraient être la longueur de la queue et la longueur de la boucle. Cette sortie peut prendre deux formes.
- une chaîne délimitée par des espaces:
"2 10"
- un tableau d'entiers:
[2, 10]
Règles
Chaque bloc, ou
#
, n'aura qu'un seul chemin loin de lui-même.Chaque flèche est composée de deux segments de ligne et d'une tête.
Le bloc de départ sera toujours dans la colonne la plus à gauche.
L'entrée ne sera jamais qu'une boucle.
Exemple
# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #
Celui-ci a une longueur de queue de 2 et une longueur de boucle de 6. En dessous, la queue et la boucle sont séparées.
Queue
# -->
^
|
|
#
Boucle
# --> # --> #
^ |
| |
| v
# <-- # <-- #
Les sorties correctes sont [2, 6]
et "2 6"
.
Si l'entrée n'est qu'une queue , la longueur de boucle est nulle.
# --> # --> # --> #
|
|
v
<-- # <-- #
Les sorties correctes pour l'entrée ci-dessus sont [6, 0]
et"6 0"
la source
Réponses:
JavaScript (ES6), 221
229Une fonction avec l'entrée en paramètre, sortie sous forme de chaîne via une fenêtre popup (alerte).
Scannez à plusieurs reprises l'entrée:
à chaque étape
Lorsqu'il n'y a plus de queue à supprimer, le nombre d'étapes jusqu'à présent est la taille de la queue et le nombre de '# restants est la taille de la boucle.
Toutes les nouvelles lignes à l'intérieur des backticks sont significatives et comptées
Testez l'exécution de l'extrait ci-dessous avec Firefox (pas Chrome, car il ne prend pas en charge
...
)la source
Rubis,
287278 octetsEssayez-le ici .
Cela crée un hachage (dictionnaire) de nœuds. Pour chaque nœud, le nombre de connexions entrantes et le nœud suivant (éventuellement nul) sont stockés.
Finalement:
La version lisible du code est disponible ici .
la source
Rubis, 276
la source