『ナルハヤのつるぎ』という面白いゲームを手に入れたので、競技プログラミングの問題風にして遊んでみたいと思います。
『ナルハヤのつるぎ』とは?
6枚のカードを組み合わせてお題の剣を揃えるスピード系パズルゲーム。
問題風にする
1枚のカードには上下×裏表で4種類の絵柄が書かれている。 N枚のカードを並び替えて、お題と同じ絵柄を構成する
入力形式
- 使うべきカードの枚数N
- 各カードの絵柄が表上、表下、裏上、裏下の順で与えられる
- 絵柄には180度回転したときに同じ模様になるもの(0)と異なる絵柄になるもの(-1,1)がある。
- D=0が存在するSについて、D=-1,1は存在しない。
- 作るべき剣の本数M
- 各剣について
- 長さL
- 上から順に絵柄の種類と向き
N S_11 D_11 S_12 D_12 S_13 D_13 S_14 D_14 ... S_N1 D_N1 S_N2 D_N2 S_N3 D_N3 S_N4 D_N4 M L1 S_11 D_11 ... S_1L1 D_1L1 ... LM S_M1 D_M1 S_M2 D_M2 ... S_MLM D_MLM
制約
1 <= M <= N
N+M <= Lの総和 <= 2*N
0 <= S < 8
-1 <= D <= 1
出力
- カードiについて、剣Sの上からP番目に置く
- カードをそのまま使う場合はR=0
- カードを上下回転させる場合はR+=1
- カードを裏表反転させる場合はR+=2
- 上半分の絵柄が見える場合はU=1、見えない場合はU=0
- 下半分の絵柄が見える場合はD=1、見えない場合はD=0
- U=0かつD=0のカードが存在してはならず、同じ位置に複数のカードが=1で置かれてはならない。(無理なので)
S_1 P_1 R_1 U_1 D_1 ... S_N P_N R_N U_N D_N
構成する方法が複数ある場合はどれを出力しても良い。
例
3 0 0 1 1 0 0 2 1 3 0 2 1 4 -1 2 1 0 0 2 1 1 1 1 1 2 2 0 0 1 1 3 2 -1 1 1 1 1
1 1 0 1 1 2 1 1 1 0 2 2 2 1 1
1枚目のカードは剣1の先頭(位置1)にそのまま上も下も見える状態で置く。 2枚目のカードは剣2の先頭(位置1)に上下回転して上(2,-1)だけ見える状態で置く。 3枚目のカードは剣2の位置2に裏表反転して、上も下も見える状態で置く。
checkerを書く
// TODO: これはやるだけ
generatorを書く
// TODO: これはちょっとむずい
validatorを書く
// TODO: これはやるだけ
solverを書く
// TODO: Nいくつまで解けるだろうか?
まとめ
面白いゲームなので遊んでみてください。