Problème
Imaginez 7 seaux alignés d'affilée. Chaque seau peut contenir au maximum 2 pommes. Il y a 13 pommes étiquetées de 1 à 13. Elles sont réparties entre les 7 seaux. Par exemple,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Où 0 représente l'espace vide. L'ordre dans lequel les pommes apparaissent dans chaque seau n'est pas pertinent (par exemple {5,4} équivaut à {4,5}).
Vous pouvez déplacer n'importe quelle pomme d'un seau vers un seau adjacent, à condition qu'il y ait de la place dans le seau de destination pour une autre pomme. Chaque mouvement est décrit par le numéro de la pomme que vous souhaitez déplacer (ce qui est sans ambiguïté car il n'y a qu'un seul espace vide). Par exemple, appliquer le déplacement
7
l'accord ci-dessus entraînerait
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Objectif
Écrire un programme qui lit un arrangement de STDIN et le trie dans l'arrangement suivant
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
en utilisant le moins de coups possible. Encore une fois, l'ordre dans lequel les pommes apparaissent dans chaque seau n'est pas pertinent. L'ordre des godets est important. Il doit afficher les mouvements utilisés pour trier chaque arrangement séparé par des virgules. Par exemple,
13, 7, 6, ...
Votre score est égal à la somme du nombre de coups requis pour résoudre les arrangements suivants:
{8, 2}, {11, 13}, {3, 12}, {6, 10}, {4, 0}, {1, 7}, {9, 5}
{3, 1}, {6, 9}, {7, 8}, {2, 11}, {10, 5}, {13, 4}, {12, 0}
{0, 2}, {4, 13}, {1, 10}, {11, 6}, {7, 12}, {8, 5}, {9, 3}
{6, 9}, {2, 10}, {7, 4}, {1, 8}, {12, 0}, {5, 11}, {3, 13}
{4, 5}, {10, 3}, {6, 9}, {8, 13}, {0, 2}, {1, 7}, {12, 11}
{4, 2}, {10, 5}, {0, 7}, {9, 8}, {3, 13}, {1, 11}, {6, 12}
{9, 3}, {5, 4}, {0, 6}, {1, 7}, {12, 11}, {10, 2}, {8, 13}
{3, 4}, {10, 9}, {8, 12}, {2, 6}, {5, 1}, {11, 13}, {7, 0}
{10, 0}, {12, 2}, {3, 5}, {9, 11}, {1, 13}, {4, 8}, {7, 6}
{6, 1}, {3, 5}, {11, 12}, {2, 10}, {7, 4}, {13, 8}, {0, 9}
Oui, chacun de ces arrangements a une solution.
Règles
- Votre solution doit s'exécuter en temps polynomial en nombre de compartiments par déplacement. Le but est d'utiliser des heuristiques intelligentes.
- Tous les algorithmes doivent être déterministes.
- En cas d'égalité, le nombre d'octets le plus court l'emporte.