問題
7つのバケットが一列に並んでいると想像してください。各バケットには最大2つのリンゴを含めることができます。1〜13のラベルが付いた13個のリンゴがあります。これらは7つのバケットに分散されています。例えば、
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
0は空のスペースを表します。 各バケット内でリンゴが表示される順序は関係ありません(たとえば、{5,4}は{4,5}と同等です)。
目的のバケットに別のリンゴ用のスペースがある場合、リンゴをあるバケットから隣接するバケットに移動できます。各移動は、移動するリンゴの番号で記述されます(空のスペースが1つしかないため、明確です)。たとえば、移動を適用する
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}
はい、これらの取り決めにはそれぞれ解決策があります。
ルール
- ソリューションは、移動ごとのバケット数で多項式時間で実行する必要があります。ポイントは、巧妙なヒューリスティックを使用することです。
- すべてのアルゴリズムは決定論的でなければなりません。
- 同点の場合、最短のバイト数が優先されます。