trang chủ / bài tập / tictactoe

Tic-tac-toe

Đề bài

Mô tả

Trò chơi tic-tac-toe (cờ ca-rô 3x3) diễn ra như sau: hai người chơi lần lượt đánh dấu vào các ô của một lưới 3×3. Một người luôn vẽ dấu X, người kia luôn vẽ dấu 0. Người đầu tiên xếp được ba dấu của mình thành một hàng ngang, cột dọc hoặc đường chéo sẽ thắng và ván đấu kết thúc ngay lập tức. Nếu lưới đã đầy mà không ai tạo được hàng ba dấu thì ván đấu hòa. Người vẽ dấu X luôn đi trước.

Cho một lưới 3×3, mỗi ô hoặc trống, hoặc chứa dấu X, hoặc chứa dấu 0. Hãy xác định người chơi (thứ nhất hay thứ hai) sẽ đi nước tiếp theo, hoặc in ra một trong các kết luận sau:

  • illegal: nếu trạng thái lưới đã cho không thể xuất hiện trong một ván đấu hợp lệ.
  • the first player won: nếu ở trạng thái đã cho người chơi thứ nhất vừa mới thắng.
  • the second player won: nếu ở trạng thái đã cho người chơi thứ hai vừa mới thắng.
  • draw: nếu trạng thái đã cho vừa dẫn tới một ván hòa.

Ván đấu dừng lại ngay khi một người thắng, nên không thể có trạng thái mà cả hai người cùng có một hàng ba dấu, và cũng không thể có thêm nước đi nào sau khi đã có người thắng.

Dữ liệu vào

Gồm ba dòng, mỗi dòng chứa ba ký tự thuộc tập {".", "X", "0"} (dấu chấm, chữ X hoa, hoặc chữ số 0). Dấu chấm biểu diễn ô trống.

Dữ liệu ra

In ra đúng một trong sáu kết luận: first, second, illegal, the first player won, the second player won hoặc draw.

  • first: đến lượt người chơi thứ nhất (X) đi.
  • second: đến lượt người chơi thứ hai (0) đi.

Ví dụ

Input Output Giải thích
X0X
.0.
.X.
second Có 3 dấu X và 2 dấu 0, chưa ai thắng, lưới chưa đầy nên đến lượt người chơi thứ hai đi.
00.
00.
X.X
illegal Có 2 dấu X nhưng 4 dấu 0. Vì X đi trước nên số dấu 0 không thể vượt số dấu X, trạng thái này không hợp lệ.
XXX
...
000
illegal Cả X (hàng trên) lẫn 0 (hàng dưới) đều có hàng ba dấu. Ván đấu phải dừng ngay khi người đầu tiên thắng, nên trạng thái này không thể xảy ra.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0