トラック
/
Roc
Roc
/
演習
/
クイーンの攻撃
クイーンの攻撃

クイーンの攻撃

初級

説明

チェス盤上の2つのクイーンの位置が与えられたとき、それらが互いを攻撃できる配置にあるかどうかを判定します。

チェスのゲームでは、クイーンは同じ行、列、または対角線上にある駒を攻撃できます。

チェス盤は8×8の配列で表すことができます。

では、白のクイーンがc5(0から数えて列2、行3)に、黒のクイーンがf2(0から数えて列5、行6)にあるとしましょう。すると、配置は次のようになっていることがわかります。

2つのクイーンが置かれたチェス盤。c5のクイーンから伸びる矢印は、縦・横・斜めの駒を取れる方向を示しています。

クイーン同士が互いを攻撃できるかどうかも答えられます。 この場合は「はい、攻撃できます」となります。なぜなら、2つの駒が同じ対角線上にいるからです。

クレジット

チェス盤の画像は、habere-et-dispertireが、Ulrike FischerによるchessboardパッケージとLaTeXを使って作成したものです。

実装

チェスでは、行は「ランク」、列は「ファイル」と呼ばれます。 ランクは1から8、ファイルはAからHです。

この演習では、Squareはチェス盤上のマスを表す不透明型です。 内部的には0から始まるrowとcolumnフィールドを使用し、それらが常に有効(つまり0から7)であることを保証します。

create関数は、"C5"のような公式表記でチェス盤上の有効なマスを表すStrを入力として受け取ります。 create関数は、このStrを解析し、それが有効なマスを表しているか確認し、もしそうであれば、適切なrowとcolumnフィールドを含むSquare値を返さなければなりません。 ランク1は行0に、ランク8は行7に対応します。 たとえば、create("C5")は、行4、列2のマスを返さなければなりません。

Square型はまた、便利なrankとfileメソッドを公開しています。 上記の例では、rankは整数5を返し、fileは文字'C'を返さなければなりません。

最後に、queen_can_attack関数は、2つの異なるSquare値を受け取り、それらのマスに置かれたクイーンが互いを攻撃できるかどうかをチェックします。

まとめ: Squareのような不透明型は、rowとcolumnが常に0から7の間にあるといった保証を提供したいときに最適です。 また、不透明型はユーザーから実装の詳細を隠すため、APIがよりクリーンになります。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Roc Exercism

クイーンの攻撃を始める準備はできましたか?

Exercismに登録すれば、120個の演習、そして本物の人間によるメンタリングとともに、Rocを学んでマスターできます。すべて無料です。