1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Aランク・スキルチェック過去問題セット(言語選択)
  4. 問題一覧 Rust(Beta)編
  5. ひとりすごろく Rust(Beta)編

Aランク・スキルチェック過去問題セットのサムネイル
ひとりすごろく Rust(Beta)編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

これは、A ランクの問題としてスキルチェックに出題されていた問題です。試しに解いてみましょう。
現時点では自力で正解することができない場合は、この問題を飛ばして次の問題に進んでください。
この問題の後に続く 3 つの問題に順番に取り組むことで、
この「ひとりすごろく」の問題を解くために必要な知識や考えた方を身につけることができます。
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

入力例1

1 6 2 5 4 3
4
1
5
3
4

出力例1

4

入力例2

6 5 4 3 2 1
6
6
2
1
3
4
3

出力例2

8

問題一覧へ戻る

ページの先頭へ戻る