ĐẤU TRƯỜNG CHIẾN THUẬT
Chào mừng trở lại.
Đăng nhập để nộp bot và tham gia thi đấu.
Bắt đầu từ mã mẫu
Bot là chương trình chơi cờ thay bạn. Tải một mẫu, nộp thử, rồi sửa cách chọn nước đi để bot chơi tốt hơn.
Hướng dẫn từng bước
Cách viết bot, đọc power-up và chơi đúng khi bản đồ hoặc hướng đi thay đổi.
Đọc hướng dẫn → NẾU BẠN HỌC PYTHONMẫu Python
Tải file main.py. Có thể nộp nguyên file để làm thử.
Tải mẫu Python ↓ NẾU BẠN HỌC C++Mẫu C++
Tải file main.cpp. Có sẵn phần nhận dữ liệu và trả lời.
Tải mẫu C++ ↓Chỉ cần chọn một ngôn ngữ. Mẫu đã hỗ trợ luật tùy chỉnh và power-up; chiến thuật còn đơn giản, bạn có thể sửa hàm score.
Đăng nhập
Sử dụng tài khoản do ban tổ chức cấp.
Lần đầu tham gia? Bạn sẽ được hướng dẫn đặt mật khẩu riêng sau khi đăng nhập.
Đổi mật khẩu
Tài khoản đang dùng mật khẩu do ban tổ chức cấp. Bạn cần đổi sang mật khẩu riêng trước khi nộp bot hoặc xem bảng xếp hạng.
Nộp bài mới
Chọn file code của bạn. Bản mới nhất vượt qua kiểm tra sẽ được dùng thi đấu.
Lần đầu nộp bài? Xem 4 bước
- Tải mã mẫu: chọn Python hoặc C++. Chưa cần sửa gì, bạn có thể nộp nguyên file.
- Chọn file và bấm Nộp bot. Nếu nộp một file, để trống ô “File chính trong ZIP”.
- Chờ trang báo Sẵn sàng thi đấu. Hệ thống tự kiểm tra và cho bot chơi hai ván thử. Không bắt buộc thắng.
- Xem bot chơi: bấm “Chi tiết & trận thử”, chọn một trận rồi bấm “Tự động chạy”.
Mỗi lần nộp tạo một bản mới: v1, v2… Bản mới nhất vượt qua kiểm tra được chọn thi đấu. Nếu bản mới lỗi, bản đang chọn trước đó vẫn được giữ.
Muốn bot chơi tốt hơn? Mở file mẫu, tìm “THAY CHIẾN THUẬT Ở ĐÂY”, sửa hàm score rồi nộp lại. Luôn chọn trong legal_moves để hỗ trợ cả hướng đi mới và power-up. Xem ví dụ và luật chơi →
Các bản đã nộp
Chi tiết kỹ thuật (khi cần tìm lỗi)
Thông báo gốc của hệ thống nằm ở đây. Nếu chưa hiểu lỗi, bạn có thể gửi phần này cho giảng viên hoặc ban tổ chức.
Thông tin đội
Repo GitHub
Ban tổ chức chưa bật nộp bằng GitHub. Hãy nộp file trong mục Bot của tôi.
- Tạo repo Private trên GitHub. Ở thư mục gốc có file
ott.json; mã bot đặt trong thư mụcbot/. - Nhập địa chỉ repo bên dưới rồi bấm Lưu repo.
- Cài GitHub App của ban tổ chức, chọn “Only select repositories” và chọn đúng repo này.
- Tạo file
ott-verify.txtở thư mục gốc nhánh mặc định, nội dung chỉ gồm mã(lưu repo để nhận mã); commit và push. - Bấm Xác minh repo. Sau đó nộp bằng nút “Nộp commit mới nhất” ở mục Bot của tôi, hoặc push tag bắt đầu bằng
ott-submit.
Mẫu ott.json và cấu trúc repo
{"language": "python", "entry": "main.py"}entry tính từ thư mục bot/. Với C++: {"language": "cpp", "entry": "main.cpp"}. Chỉ file .py hoặc .cpp/.h/.hpp trong bot/ được chấm; file khác trong repo bị bỏ qua. Khi hết hạn, hệ thống lấy commit cuối cùng đã push lên nhánh mặc định trước hạn; nếu commit đó lỗi, dùng bản hợp lệ gần nhất.
Chuẩn bị giải đấu
Quản lý cấu hình và danh sách đội riêng cho từng giải.
Tạo giải, nhận/chốt bot, chạy vòng loại tính điểm, duyệt đội đi tiếp rồi chạy loại trực tiếp và duyệt kết quả. Hiện có thể giữ cùng bot/luật giữa hai giai đoạn; mục Vòng điểm vẫn là vòng xếp hạng cũ.
Đội tham gia giải
Chọn từ tài khoản thí sinh đã được cấp. Bỏ chọn chỉ gỡ khỏi giải này; tài khoản và lịch sử ở giải khác được giữ lại.
Nhận bài và chốt bot vòng loại
Hủy giải trước thi đấu sẽ ngừng nhận bài, giữ lịch sử và không thể mở lại. Bài đã nhận vẫn được kiểm tra, nhưng không được chốt hay đưa vào thi đấu.
Vòng loại tính điểm
Thắng cặp 1 điểm, hòa 0,5, thua 0. Khi bằng điểm, lần lượt xét tổng điểm đối thủ, điểm đối thủ có trọng số, điểm ván và bốc thăm theo mã ghép lịch. Đội được miễn đấu nhận 1 điểm, không cộng điểm ván. Chỉ tạo vòng tiếp theo khi vòng hiện tại hoàn tất.
Cách đọc các chỉ số phụ
Tổng điểm đối thủ: cộng điểm vòng loại của các đội đã gặp. Điểm đối thủ có trọng số: cộng toàn bộ điểm của đối thủ khi thắng, một nửa khi hòa và không cộng khi thua. Điểm ván: tổng điểm thắng/hòa của từng ván trong các cặp đấu. Lượt miễn đấu: số lượt được nhận điểm mà không cần gặp đối thủ.
Tạm dừng ngừng cấp ván mới; ván đang chạy được hoàn tất và giữ kết quả. Chỉ hủy sau khi tạm dừng và hết ván đang chạy. Hủy không thể tiếp tục hoặc duyệt đội đi tiếp.
Sơ đồ vòng loại trực tiếp
Hạt giống cao được ưu tiên miễn đấu; các nhánh được giữ cố định sau khi tạo. Bước này chưa chạy trận hoặc chốt luật mới.
Chạy loại trực tiếp với bot đã chốt: dùng đợt chính thức nếu đã mở nộp lại, hoặc bot vòng loại khi giữ nguyên luật. Ván hòa được đấu thêm theo cấu hình, sau đó xét hạt giống. Sau khi khởi tạo, nguồn bot và luật được giữ cố định.
Tạm dừng sẽ ngừng cấp ván mới; ván đang chạy được hoàn tất và giữ kết quả. Chỉ hủy sau khi tạm dừng và không còn ván đang chạy. Hủy là kết thúc phiên, không thể tiếp tục hoặc công bố vô địch; dữ liệu cũ vẫn được giữ. Các nút dùng lý do thao tác loại trực tiếp.
Chọn một chế độ trước khi bắt đầu. Ở chế độ từng cặp/vòng, chỉ các cặp được admin chọn mới chạy; các ván phụ của cặp đó vẫn tự chạy khi hòa. Không đổi chế độ sau khi bắt đầu.
Nhập bài từ thư mục / USB (dự phòng)
Dùng khi đội không nộp được qua portal (mạng LAN lỗi, máy hỏng). Thư mục trên máy chủ chứa <mã đội>/ott.json + bot/, <mã đội>.zip hoặc <mã đội>.py/.cpp. Bài vẫn qua kiểm tra sandbox như bình thường; nhập lại cùng nội dung không tạo bản mới.
Công bố kết quả công khai
Mỗi lần công bố tạo một bản không đổi (v1, v2…) cho trang kết quả tĩnh, Google Sheets và file tra cứu theo đội. Bảng điểm khi vòng loại chưa duyệt được ghi “tạm tính”. Trang công khai không chứa thông tin thành viên.
Lịch sử thay đổi
Khởi động, chạy thử và điều hành giải
Trang quản trị dùng để cấp tài khoản, theo dõi bài nộp và tổ chức vòng tính điểm. Các nút chạy trận yêu cầu máy chủ Node.js và Docker đang hoạt động.
- Kiểm tra máy chủ. Mở Docker Desktop ở chế độ Linux containers. Trong Đấu thử theo bộ luật, bấm “Kiểm tra máy chạy bot”; chỉ tiếp tục khi máy chủ báo sẵn sàng.
- Cấp tài khoản. Dán danh sách tại Tài khoản thí sinh rồi chọn “Tạo tài khoản”. Mật khẩu ban đầu trùng tên tài khoản. Gửi tên tài khoản cho từng thí sinh và yêu cầu đổi mật khẩu ngay lần đăng nhập đầu tiên.
- Chờ bot hợp lệ. Thí sinh đăng nhập, đổi mật khẩu tạm và nộp mã nguồn. Theo dõi tại Bài nộp và hàng đợi. Mỗi tài khoản cần một phiên bản đã vượt qua kiểm tra và đang được chọn.
- Chạy thử khi cần. Trong Quản lý bộ luật, tạo hoặc chọn bộ luật. Sau đó chọn hai bot mẫu hoặc phiên bản bot thí sinh đã hợp lệ và bấm “Chạy trận thử”. Trận này không thay đổi điểm, điểm xếp hạng hay bot đang chọn.
- Sửa luật. Chọn bộ luật, sửa cấu hình rồi bấm “Lưu bộ luật”. Mỗi lần lưu được đánh số tự động để trận cũ vẫn giữ đúng luật. Ví dụ: bản 1 giới hạn 500 nước, bản 2 đổi thành 100 nước; replay đã chơi theo bản 1 vẫn giữ giới hạn 500. Chỉ cần chọn bản mới nhất khi chạy thử, trừ khi muốn kiểm tra lại luật cũ.
- Tạo vòng tính điểm. Khi có ít nhất hai bot sẵn sàng, mở Vòng điểm. Mỗi bot sẽ gặp tất cả bot còn lại, mặc định mỗi cặp 3 trận. Có thể nhập số trận khác từ 1 đến 20; hệ thống tự tính tổng số trận. Bốc thăm bên đi trước trận đầu rồi đổi bên luân phiên. Bấm “Tạo và chạy vòng điểm”. Không tự đấu thêm khi bằng điểm. Vòng điểm dùng luật cơ bản; các bot và phiên bản được chốt lúc tạo.
- Theo dõi và xuất kết quả. Mở Bảng xếp hạng để xem tiến độ, điểm xếp hạng, bản xem lại và tải CSV. Khi vòng hoàn tất, kiểm tra tổng số ván trước khi công bố kết quả.
Các lệnh khởi động trên máy chủ
Thực hiện trong terminal tại thư mục dự án sau khi cài Node.js và Docker. Đây là hướng dẫn lệnh; trang web không tự thực thi lệnh terminal.
npm ci npm run seed npm run sandbox:build npm run sandbox:check npm start
Lưu mật khẩu mà lệnh seed in ra. Chạy lại seed không đổi mật khẩu đã có. Giữ terminal chạy npm start; dừng bằng Ctrl+C. Hướng dẫn cài đặt chi tiết nằm trong README.md của dự án.
Xử lý lỗi và tài khoản trong lúc thi đấu
- Bot lỗi: xem nhật ký và lý do từ chối; thí sinh sửa mã nguồn rồi nộp phiên bản mới. Bot gặp lỗi khi thi đấu được xử thua theo quy định.
- Máy chủ lỗi: hệ thống chạy lại tối đa 3 lần tổng cộng, sau đó tạm dừng. Kiểm tra Docker, dung lượng và nhật ký máy chủ; khi đã khắc phục, chọn nút chạy lại. Lỗi máy chủ không tính thua bot.
- Cấp lại mật khẩu: hủy phiên cũ và yêu cầu thí sinh đổi mật khẩu tạm ở lần đăng nhập tiếp theo. Khóa tài khoản ngăn đăng nhập; không xóa lịch đấu hoặc thay phiên bản của vòng đã tạo.
- Điểm xếp hạng: bắt đầu 1500 riêng cho mỗi vòng, cập nhật sau từng ván với K = 32. Cùng số trận thắng/thua có thể có điểm xếp hạng khác nhau do đối thủ và thứ tự cập nhật.
Tài khoản thí sinh
Thêm thí sinh
Repo GitHub của đội
Bài nộp và hàng đợi
Bộ xử lý tự động kiểm tra bài nộp hoặc chạy trận. Số vị trí xử lý cho biết số tác vụ có thể chạy cùng lúc. Hàng đợi chứa các bài đang chờ; “Tạm dừng” nghĩa là hệ thống cần xử lý lỗi máy chủ trước khi chạy lại.
Chi tiết bài nộp và nhật ký
Sao lưu (snapshot)
Bản sao nhất quán của cơ sở dữ liệu và bài nộp ra ổ ngoài (biến SNAPSHOT_DIR), chụp định kỳ khi server đang chạy. Khôi phục: dừng server rồi chạy npm run restore -- <thư mục snapshot> (xem RUNBOOK).
Đồng bộ máy online ↔ máy LAN
Bundle mã hóa (passphrase) và ký số, chép qua USB. Mỗi phần dữ liệu chỉ một máy được ghi; bàn giao quyền đi kèm bundle. Máy LAN mới: chạy server với DB trống rồi nhập bundle đầy đủ.
Quyền ghi hiện tại
Lịch sử
Máy chấm
Mỗi máy chấm có mã và khóa bí mật riêng; khóa chỉ hiện một lần khi tạo. Máy chấm tự lấy việc từ máy chủ này. Thu hồi khi máy bị mất hoặc không còn dùng; việc đang chạy sẽ được giao lại sau khoảng 30 giây.
Chạy trên máy chấm (PowerShell, trong thư mục dự án). Khóa bí mật không hiển thị lại.
Đăng ký máy chấm USB
Mở đợt khi chuẩn bị phòng thi, cắm và khởi động các USB máy chấm, rồi đóng đợt khi đã đủ máy. Mỗi máy tự nhận khóa riêng; mã đăng ký chỉ hiện một lần và hết tác dụng khi đóng đợt, hết giờ hoặc đủ số máy.
Nội dung grader.env cho phân vùng OTTCONF của USB (thay địa chỉ bằng IP LAN của máy chủ nếu đang mở trang bằng 127.0.0.1). Mã không hiển thị lại.
Tạo vòng tính điểm
Đấu vòng tròn: mỗi bot gặp tất cả bot còn lại. Mặc định mỗi cặp đấu 3 trận; bạn có thể đổi số trận bên dưới. Không tự đấu thêm khi bằng điểm.
Điểm vòng loại của giải
Sơ đồ vòng loại trực tiếp
Điểm xếp hạng ngoài giải
Điểm xếp hạng bắt đầu từ 1500 ở mỗi vòng, tăng hoặc giảm theo kết quả và đối thủ. Bảng này thuộc luồng cũ, không quyết định thứ hạng vòng loại của giải.
Thiết kế bàn cờ
Chỉnh bản đồ và quân cờ. Búa ăn Kéo, Kéo ăn Bao, Bao ăn Búa luôn giữ nguyên trong trình chỉnh trực quan.
Đấu thử theo bộ luật
Chọn “Kiểm tra máy chạy bot” để xác minh máy chủ có thể chạy bot (Docker, WSL2 hoặc chế độ lớp học).
Có thể chọn bot mẫu hoặc bất kỳ phiên bản Accepted nào. Trận thử không đổi điểm hay bot đang chọn.
Xem lại trận đấu
Phím tắt: ← → từng nước · Home/End về đầu/cuối · Space chạy/dừng · N/P tới pha ăn quân hoặc nhặt ô tiếp theo/trước đó · bấm một dòng lịch sử để quay lại nước đó.
Bên 0 màu tím, bên 1 màu hồng. Ô ★ là nhà. Viền nét đứt chỉ nơi quân vừa rời đi, viền xanh chỉ nơi quân đến. Kéo thanh “Nước đi” để xem từng bước.