Problema
Immagina 7 secchi allineati in fila. Ogni secchio può contenere al massimo 2 mele. Ci sono 13 mele etichettate da 1 a 13. Sono distribuite tra i 7 secchi. Per esempio,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Dove 0 rappresenta lo spazio vuoto. L'ordine in cui le mele compaiono all'interno di ogni secchio non è rilevante (ad esempio {5,4} è equivalente a {4,5}).
Puoi spostare qualsiasi mela da un secchio a un secchio adiacente, a condizione che ci sia spazio nel secchio di destinazione per un'altra mela. Ogni mossa è descritta dal numero della mela che si desidera spostare (il che è inequivocabile perché c'è solo uno spazio vuoto). Ad esempio, applicando la mossa
7
alla disposizione di cui sopra si tradurrebbe in
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Obbiettivo
Scrivere un programma che legge una disposizione da STDIN e la ordina nella seguente disposizione
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
usando il minor numero di mosse possibile. Ancora una volta, l'ordine in cui le mele compaiono all'interno di ciascun secchio non è rilevante. L'ordine dei secchi è importante. Dovrebbe produrre le mosse utilizzate per ordinare ciascuna disposizione separata da virgole. Per esempio,
13, 7, 6, ...
Il tuo punteggio è uguale alla somma del numero di mosse richieste per risolvere le seguenti disposizioni:
{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ì, ognuna di queste disposizioni ha una soluzione.
Regole
- La soluzione deve essere eseguita in tempo polinomiale nel numero di bucket per mossa. Il punto è usare l'euristica intelligente.
- Tutti gli algoritmi devono essere deterministici.
- In caso di pareggio, vince il conteggio dei byte più corto.