チャレンジ
文字列入力を関数パラメーターとして、またはstdinから取得し、それが有効なFEN文字列かどうかを判断するプログラムまたは関数を作成します。
入力
入力には次の文字のみが含まれると想定できます(大文字と小文字が区別されます)
pkqrbnPKQRBN12345678/
入力の長さは常に最小1文字、最大100文字です。
出力
出力は、真偽値でなければなりません。これらは、一貫している限り、任意の値にすることができます(すべての真実の結果は同じ出力を持ち、すべての偽の結果は同じ出力を持ちます)。正確に2つの可能な出力が必要です。
有効とみなされるもの
小文字は黒い部分を表し、大文字は白い部分を表します。
チェスのゲームで、現在の位置にあるピースが存在することを確認する必要があります。
各プレイヤーは常に正確に1つのキング(k / K)を
持ちます。各プレイヤーは8個以下のポーン(p / P)を
持ちます。各プレイヤーは通常1 *クイーン以下(q / Q)を
持ちます。 2 *を超えるルーク(r / R)
各プレイヤーは通常2 *を超える騎士(n / N)を
持たない各プレイヤーは通常2 *を超える司教(b / B)を持たない*
プレイヤーが「これら4つのピースのいずれかにポーンをプロモートします。
各プレイヤーのポーン、クイーン、ルーク、ナイト、ビショップの合計が15を超えることはありません
ピースの総数と空の四角(数字で表示)の合計は、ランクごとに常に正確に8になるはずです。また、常にスラッシュで区切られた8つのランクが常に存在する必要があります。
無視できるもの
指定されたポジションでプレーできるかどうか、またはポジションが合法である場合、与えられた数量でピースが存在できるかどうかについて心配する必要はありません。
プレーヤーターン、キャスティング権、パッサンのようなFENストリングのさらなる複雑さは無視できます。
これはコードゴルフです。バイト単位の最短プログラムが優先されます。通常の抜け穴とルールが適用されます。
テストケース
入力 rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR
出力 True
入力 2br2k1 / 1p2n1q1 / p2p2p1 / P1bP1pNp / 1BP2PnP / 1Q1B2P1 / 8 / 3NR2K
出力 True
入力 r2r2k1 / p3q2p / ppR3pr / rP4bp / 3p4 / 5B1P / P4PP1 / 3Q1RK1
出力 False
(黒には7つのポーンと4つのルークがある-不可能)
入力 6k1 / pp3ppp / 4p3 / 2P3b1 / bPP3P1 / 3K4 / P3Q1q1
出力 False(7ランクのみ)
入力 3r1rk1 / 1pp1bpp1 / 6p1 / pP1npqPn / 8 / 4N2P / P2PP3 / 1B2BP2 / R2QK2R
出力 False(9ランク)
入力 5n1k / 1p3r1qp / p3p3 / 2p1N2Q / 2P1R3 / 2P5 / P2r1PP1 / 4R1K1
出力 False(2番目のランクには9マス/個)
入力 rnbqkbnr / pppppppp / 8/35/8/8 / PPPPPPPP / RNBQKBNR
出力 True
このケースを明確にしたFeersumとArnauldに感謝(3 + 5 = 8)
FENとは何ですか?
FENは、チェス盤上の駒の位置を記録するための標準的な表記法です。
画像クレジットhttp://www.chessgames.com
* It is legal for a player to 'promote' a pawn to any of these four pieces.
プレイヤーは、ポーンの数を減らして補償する限り、最大で9人のクイーンを持つことができます。ピースの数だけで、ピースの位置が合法であるか違法であるかを心配する必要はありません。
35
8個の空の正方形を記述するための異常な方法です。