Problema
Imagine 7 baldes alinhados em uma fileira. Cada balde pode conter no máximo 2 maçãs. Existem 13 maçãs rotuladas de 1 a 13. Elas são distribuídas entre os 7 baldes. Por exemplo,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Onde 0 representa o espaço vazio. A ordem em que as maçãs aparecem em cada balde não é relevante (por exemplo, {5,4} é equivalente a {4,5}).
Você pode mover qualquer maçã de um balde para um balde adjacente, desde que haja espaço no balde de destino para outra maçã. Cada movimento é descrito pelo número da maçã que você deseja mover (o que não é ambíguo porque existe apenas um espaço vazio). Por exemplo, aplicando a movimentação
7
acordo acima resultaria em
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Objetivo
Escreva um programa que leia um arranjo do STDIN e o classifique no seguinte arranjo
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
usando o mínimo de movimentos possível. Novamente, a ordem em que as maçãs aparecem em cada balde não é relevante. A ordem dos baldes é importante. Ele deve gerar os movimentos usados para classificar cada arranjo separado por vírgulas. Por exemplo,
13, 7, 6, ...
Sua pontuação é igual à soma do número de movimentos necessários para resolver os seguintes arranjos:
{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}
Sim, cada um desses arranjos tem uma solução.
Regras
- Sua solução deve ser executada em tempo polinomial no número de buckets por movimentação. O objetivo é usar heurísticas inteligentes.
- Todos os algoritmos devem ser determinísticos.
- Em caso de empate, a menor contagem de bytes vence.