Si vous ne savez pas ce qu'est la Tour de Hanoi , je vais l'expliquer brièvement: il y a trois tiges et quelques disques dont chacun a une taille différente. Au début, tous les disques se trouvent sur la première tour, dans l'ordre trié: le plus gros est en bas, le plus petit en haut. Le but est d'amener tous les disques sur la troisième tige. Cela semble facile? Voici le hic: vous ne pouvez pas placer un disque sur un disque plus petit que l'autre disque; vous ne pouvez tenir qu'un disque dans votre main à la fois pour les déplacer vers une autre tige et vous ne pouvez placer le disque que sur des tiges, pas sur la table, espèce de salaud sournois.
exemple de solution ascii:
A B C
| | |
_|_ | |
__|__ | |
A B C
| | |
| | |
__|__ _|_ |
A B C
| | |
| | |
| _|_ __|__
A B C
| | |
| | _|_
| | __|__
Défi
Il y a trois tiges appelées A, B et C. (Vous pouvez aussi les appeler 1,2 et 3 respectivement si cela vous aide) Au début, tous les n disques sont sur la tige A (1).
Votre défi est de vérifier une solution pour la tour de hanoi. Vous devrez vous assurer que:
- Au final, tous les n disques se trouvent sur la tige C (3).
- Pour un disque donné à un état donné, il n'y a pas de disque plus petit en dessous.
- Pas d'erreurs évidentes comme essayer de retirer des disques d'une tige vide ou déplacer des disques vers des tiges inexistantes.
(la solution ne doit pas être optimale.)
Contribution
Votre programme recevra deux entrées:
- Le nombre de disques n (un entier)
Les mouvements qui sont effectués, qui seront constitués d'un ensemble de tuples de: (tour pour prendre le disque actuellement le plus haut), (tour pour prendre ce disque) où chaque tuple fait référence à un mouvement. Vous pouvez choisir comment ils sont représentés. Par exemple quelque chose comme les façons suivantes de représenter la solution pour n = 2 que j'ai dessinée ci-dessus en ascii. (Je vais utiliser le premier dans les cas de test, car il est doux pour les yeux):
"A-> B; A-> C; B-> C"
[("A", "B"), ("A", "C"), ("B", "C")]
[(1,2), (1,3), (2,3)]
"ABACBC"
[1,2,1,3,2,3]
Sortie
C'est vrai, si les conditions qui peuvent être trouvées sous "défi" tiennent.
Faux, s'ils ne le font pas.
Cas de test:
Vrai:
n=1, "A->C"
n=1, "A->B ; B->C"
n=2, "A->B ; A->C ; B->C"
n=2, "A->C ; C->B ; A->C ; B->C"
n=2, "A->C ; A->B ; C->B ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=4, "A->B ; A->C ; B->C ; A->B ; C->A ; C->B ; A->B ; A->C ; B->C ; B->A ; C->A ; B->C ; A->B ; A->C ; B->C"
Faux:
3e proposé par @MartinEnder, 7e par @Joffan
n=1, "A->B"
n=1, "C->A"
n=2, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=2, "A->B ; A->C ; C->B"
n=2, "A->C ; A->B ; C->B ; B->A"
n=2, "A->C ; A->C"
n=3, "A->B ; A->D; A->C ; D->C ; A->C"
n=3, "A->C ; A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->B ; B->C ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; C->B"
n=4, "A->B ; A->C ; B->C ; A->B ; C->A ; C->B ; A->B ; A->C ; B->C ; B->A ; C->A ; B->C ; A->B ; A->C"
n=4, "A->B ; A->B ; A->B ; A->C ; B->C ; B->C ; B->C"
C'est le code-golf , la solution la plus courte l'emporte. Des règles et des lacunes standard s'appliquent. Pas de piles incluses.
A->A
?
moving discs to nonexistant rods.
donc bien sûr que oui, c'est unD
A=1
-àB=2
-dC=3
.,,, Etc.)?