Ma ville natale, Rhyl , a un système de circulation à sens unique qui semble avoir été conçu pour éloigner les gens de leur destination aussi longtemps que possible. Votre tâche, si vous choisissez de l'essayer, est de produire un programme pour donner l'itinéraire le plus court à travers un tel système de circulation.
Contribution
L'entrée sera activée STDIN
et sera une liste de points de début et de fin suivie d'une ligne vierge suivie d'une liste de requêtes, comme suit:
A B
B A
B C
C D
D C
A D
C A
B A
Chaque route ne peut être parcourue que dans la ou les directions données, donc, dans l'exemple ci-dessus, la route A - B est une rue à double sens tandis que B - C est une rue à sens unique de B à C. Voyager de C à B est interdit.
Les points de départ et d'arrivée seront tous représentés par une seule lettre majuscule.
Production
La sortie doit être l'itinéraire le plus court (mesuré par le nombre de points visités) du point de départ donné au point final donné pour chaque requête reçue. Si aucune route de ce type n'existe, affichez une ligne vierge. S'il existe plusieurs itinéraires les plus courts, sortez le premier lors du tri de tous les itinéraires les plus courts lexicographiquement.
Pour l'exemple ci-dessus, la sortie serait:
A B C D
B A
Scripts de test
Comme précédemment, je fournis des tests pour cette tâche sur la base de scripts écrits par Joey et Ventero : -
et également des tests et des résultats attendus pour quiconque ne peut pas utiliser les scripts ci-dessus
Usage: ./test [your program and its arguments]
Récompenses
Toutes les réponses qui ont évidemment eu une tentative de golf qui répondent aux spécifications et réussissent tous les tests obtiendront mon vote positif. La réponse la plus courte au plus tard le 26/01/2012 sera acceptée.
la source
output the first when sorting all shortest routes lexicographically
- Donc, siA B D
etA C D
sont les deux solutions valides, sortez-vous à laA B D
place?Réponses:
Haskell,
223207 caractèresla source
Python (2.x),
382369358338323318 caractèresTous les conseils et commentaires sont les bienvenus!
Devrait passer les tests sous cette forme. Entrée de flux via stdin, par exemple
python shortestroute.py < test.txt
.la source
A B I J M
au lieu deA B G J M
.C:
450,437,404, 390 caractèresla source
puts("\n")
imprime deux nouvelles lignes.puts()
ajoute automatiquement un terminateur de fin de ligne aux chaînes qu'il imprime. Pour éviter ce comportement, utilisezfputs(str, stdout)
ou simplementprintf(str)
.