Problema
Imagine 7 cubos alineados en una fila. Cada cubo puede contener como máximo 2 manzanas. Hay 13 manzanas etiquetadas del 1 al 13. Se distribuyen entre los 7 cubos. Por ejemplo,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Donde 0 representa el espacio vacío. El orden en que aparecen las manzanas dentro de cada cubo no es relevante (por ejemplo, {5,4} es equivalente a {4,5}).
Puede mover cualquier manzana de un cubo a un cubo adyacente, siempre que haya espacio en el cubo de destino para otra manzana. Cada movimiento se describe por el número de la manzana que desea mover (lo cual no es ambiguo porque solo hay un espacio vacío). Por ejemplo, aplicando el movimiento
7
a la disposición anterior resultaría en
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Objetivo
Escriba un programa que lea un arreglo de STDIN y lo clasifique en el siguiente arreglo
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
usando la menor cantidad de movimientos posible. Nuevamente, el orden en que aparecen las manzanas dentro de cada cubo no es relevante. El orden de los cubos es importante. Debería mostrar los movimientos utilizados para ordenar cada disposición separada por comas. Por ejemplo,
13, 7, 6, ...
Su puntaje es igual a la suma del número de movimientos necesarios para resolver los siguientes arreglos:
{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}
Sí, cada uno de estos arreglos tiene una solución.
Reglas
- Su solución debe ejecutarse en tiempo polinómico en el número de cubos por movimiento. El punto es usar heurísticas inteligentes.
- Todos los algoritmos deben ser deterministas.
- En caso de empate, gana el conteo de bytes más corto.