パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

プログラムの難問に挑む手法3 チェスの特殊移動

2021-07-13 | プログラムをマスター計画2021

今回は仕様にはまったケース

昔からあるゲームは生き残るために独特のルールが存在していて、プログラム化泣かせだったりします。

 

https://www.codingame.com/training/hard/chess-moves-on-fen-position

チェスの指し手からボードの状態を作成する問題

まずFENというボード状態を簡易圧縮したものを解凍するルーチンと最期に圧縮するルーチンから作成

初めての時は悩みましたが一度作ったことがあるのでサクッと作成

持ち駒というルールがないので、駒の基本的な移動もわりとあっさり実装できました。

 

そしてキャッスリング これが最初の難関

王様が2つ動いていればキャッスリングなのであとはゴリゴリ

 

次がアンパッサン なんか知らない仕様が出てきました(キレイに忘れていた)

前の手とかをみないといけない困ったちゃん。

面倒なロジックを後回しにすると痛い目に合います。関数とか見直しです。

最後にはまったのはプロモーション。ポーンが相手陣一段目までいくとクイーンになるというものです。

SUBMIT時にどうしても解けないので、調べてみるとプロモーション時の記述の最後がNだとナイトに昇格するルールがありました。

問題文に記述一切なく、SUBMIT時の突如発生するルール、これはニャイ。(28行目)


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。