проблема
Представьте себе 7 ведер в ряд. Каждое ведро может содержать не более 2 яблок. Есть 13 яблок с маркировкой от 1 до 13. Они распределены между 7 ведрами. Например,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Где 0 представляет пустое пространство. Порядок, в котором яблоки появляются в каждом ведре, не имеет значения (например, {5,4} эквивалентно {4,5}).
Вы можете переместить любое яблоко из одного ведра в соседнее, при условии, что в контейнере назначения есть место для другого яблока. Каждый ход описывается номером яблока, которое вы хотите переместить (это однозначно, потому что есть только один пустой пробел). Например, применяя ход
7
к договоренности выше приведет к
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Задача
Напишите программу, которая читает расположение из STDIN и сортирует его по следующему расположению
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
используя как можно меньше ходов. Опять же, порядок, в котором яблоки появляются в каждом ведре, не имеет значения. Порядок ведер имеет значение. Он должен выводить ходы, используемые для сортировки каждого расположения, разделенного запятыми. Например,
13, 7, 6, ...
Ваша оценка равна сумме количества ходов, необходимых для выполнения следующих мероприятий:
{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}
Да, у каждого из этих механизмов есть решение.
правила
- Ваше решение должно выполняться за полиномиальное время по количеству сегментов за ход. Дело в том, чтобы использовать умную эвристику.
- Все алгоритмы должны быть детерминированными.
- В случае ничьей побеждает самый короткий счетчик байтов.