ひとりすごろく Erlang(Beta)編(paizaランク A 相当)
問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
問題
下記の問題をプログラミングしてみよう!
このページにある問題文は、かつて挑戦した「ひとりすごろく」の問題文そのものです。 ここまでの問題で身につけてきた知識や考え方を活用して、再挑戦してみましょう。 サイコロを使った簡単なゲームを考えてみます。
このゲームでは 1 つのボードと 1 つの特殊なサイコロを使って遊びます。
ボードは複数個の正方形のマスで構成されており、それらは直線上に並んでいます。
また、すべてのマスには 1 から 6 までの数字のいずれかが書かれています。ボードの両端のマスがそれぞれスタートとゴールになっています。
サイコロは 1 から 6 までの数字が書かれた 6 面サイコロですが、面に書かれた数字の配置が通常と異なりゲームを始める際に数字の配置が決まります。
初期状態では、サイコロにの各面に ID としてアルファベット T, B, U, D, L, R が以下の図で表すように与えられています。
ゲームは以下のような手順で進行します。
1. スタートのマスに、T の面を上にし U の面をゴール側に向けたサイコロを置きます。
2. サイコロの各面 T, B, U, D, L, R に対応する数字がそれぞれ決められます。
3. サイコロの上の面の数字が次のマス (サイコロが置かれたマスに隣り合うマスのうちゴール側にあるマス) の数字になるようにサイコロを「回転」し、次のマスに置きます。
※ ここで「回転」の操作は下図における「奥」「手前」「右」「左」のいずれかの方向にサイコロを 90°回転させることを指します。必要であれば 2 回以上の回転もここで行うことができます。
4. ゴールに到達すればゲームクリアとなり、そうでなければ手順3に戻ります。
サイコロとボードの情報が与えられるので、このゲームをクリアするのに必要な回転操作回数の最小値を求めてください。
入力例1の図
入力される値
入力は以下のフォーマットで与えられます。 T B U D L R N p_1 p_2 ... p_N ・ 1 行目には問題文にそってサイコロの各面の ID である T, B, U, D, L, R に対応する数字がこの順に半角スペース区切りで与えられます。 ・ 2 行目には ボードを構成するマスの総数 N が与えられます。 ・ 続く N 行のうち i 行目 (1 ≦ i ≦ N) にはスタートから i 番目のマスに書かれた数字を表す p_i が与えられます。 ・ 入力は合計で N + 2 行となり、入力値最終行の末尾に改行が1つ入ります。
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
標準入力からの値取得方法はこちらをご確認ください
期待する出力
必要な回転操作の最小回数を整数で出力してください。 最後は改行し、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。 添字の範囲は 1 ≦ i ≦ N とする。 ・ 入力される値はすべて整数 ・ 2 ≦ N ≦ 1000 ・ 1 ≦ T, B, U, D, L, R ≦ 6 ・ 1 ≦ p_i ≦ 6 ・ T, B, U, D, L, R はすべて互いに異なる ・ p_1 = T
問題一覧へ戻る