『ナルハヤのつるぎ』を競技プログラマーが遊ぶ

『ナルハヤのつるぎ』という面白いゲームを手に入れたので、競技プログラミングの問題風にして遊んでみたいと思います。

『ナルハヤのつるぎ』とは?

6枚のカードを組み合わせてお題の剣を揃えるスピード系パズルゲーム。


【GM2019春】ナルハヤのつるぎ 紹介動画

問題風にする

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いくつまで解けるだろうか?

まとめ

面白いゲームなので遊んでみてください。