在這道練習中,你要實作一個程式,判斷一場井字遊戲的狀態。 (你可能也聽過這個遊戲叫「noughts and crosses」或「Xs and Os」。)
遊戲在 3×3 的方格上進行。
玩家輪流在方格上放置X和O。
當某位玩家在方格的橫列、直行或對角線上連成 3 個記號而獲勝,或是整個方格被填滿時,遊戲就結束。
在這道練習中,我們假設由X先下。
你的任務是判斷給定的遊戲處於哪一種狀態。
遊戲狀態有 3 種可能:
如果給定的棋盤不合法,請拋出適當的錯誤。
棋盤符合下列任一條件時,就是不合法:
X先下)。 | |
X | |
___|___|___
| |
| X | O
___|___|___
| |
O | X |
| |
| |
X | O | X
___|___|___
| |
X | X | O
___|___|___
| |
O | X | O
| |
| |
X | X | X
___|___|___
| |
| O | O
___|___|___
| |
| |
| |
| |
O | O | X
___|___|___
| |
| |
___|___|___
| |
| |
| |
| |
X | X | X
___|___|___
| |
O | O | O
___|___|___
| |
| |
| |
棋盤以一個以 null 結尾的字串表示,每一列的結尾都有一個換行字元。
例如 "X \n XO\nOX \n"
| 暫存器 | 用途 | 型別 | 說明 |
|---|---|---|---|
$a0 |
輸入 | 位址 | 以 null 結尾的輸入字串 |
$v0 |
輸出 | 整數 | 遊戲狀態 (1 = ongoing, 2 = draw, 3 = win, -1 = error) |
$t0-9 |
暫存 | 任意 | 用於暫存資料 |