Problem
Stellen Sie sich 7 Eimer hintereinander vor. Jeder Eimer kann höchstens 2 Äpfel enthalten. Es gibt 13 Äpfel mit den Bezeichnungen 1 bis 13. Sie sind auf die 7 Eimer verteilt. Beispielsweise,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Wobei 0 den leeren Raum darstellt. Die Reihenfolge, in der die Äpfel in jedem Eimer erscheinen, ist nicht relevant (z. B. entspricht {5,4} {4,5}).
Sie können jeden Apfel von einem Eimer in einen benachbarten Eimer verschieben, sofern im Ziel-Eimer Platz für einen anderen Apfel ist. Jede Bewegung wird durch die Nummer des Apfels beschrieben, den Sie bewegen möchten (was eindeutig ist, da nur ein Leerzeichen vorhanden ist). Zum Beispiel den Zug anwenden
7
zu der obigen Anordnung würde führen
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Zielsetzung
Schreiben Sie ein Programm, das eine Anordnung aus STDIN liest und in die folgende Anordnung sortiert
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
mit so wenig Zügen wie möglich. Auch hier ist die Reihenfolge, in der die Äpfel in jedem Eimer erscheinen, nicht relevant. Die Reihenfolge der Eimer spielt eine Rolle. Es sollte die Bewegungen ausgeben, die zum Sortieren jeder durch Kommas getrennten Anordnung verwendet werden. Beispielsweise,
13, 7, 6, ...
Ihre Punktzahl entspricht der Summe der Anzahl der Züge, die zur Lösung der folgenden Vorkehrungen erforderlich sind:
{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}
Ja, jede dieser Vereinbarungen hat eine Lösung.
Regeln
- Ihre Lösung muss in Polynomzeit in der Anzahl der Buckets pro Zug ausgeführt werden. Es geht darum, clevere Heuristiken zu verwenden.
- Alle Algorithmen müssen deterministisch sein.
- Bei einem Gleichstand gewinnt die kürzeste Byteanzahl.