2 điểm bởi GN⁺ 2026-02-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • Là một động cơ cờ vua gọn nhẹ hoạt động trong kích thước khoảng 2KB, có thể chơi trọn vẹn một ván trong phạm vi các luật bị giới hạn
  • Bao gồm các thuật toán cốt lõi như bàn cờ mailbox 120 ô, tìm kiếm Negamax, cắt tỉa Alpha-Beta
  • Sử dụng đánh giá dựa trên giá trị quân cờ (material-only eval)ưu tiên nước bắt quân (move ordering)
  • Chưa triển khai nhập thành, bắt tốt qua đường, phong cấp, lặp lại thế cờ, quy tắc 50 nước
  • Đạt mức hiệu năng khoảng 1170~1200 Elo, gây chú ý như một trường hợp triển khai động cơ cờ vua trong mã dưới 2KB

Tổng quan dự án

  • Sameshi là một động cơ cờ vua tối giản hỗ trợ bộ luật giới hạn, với tổng kích thước mã chỉ khoảng 1.95KB
    • Tệp chính là sameshi.h, và phiên bản dễ đọc hơn nằm trong readable/sameshi.h
    • Kho GitHub cũng cung cấp main.c, Makefile, .gitignore cùng các tệp liên quan
  • Video demo đã được công bố trên YouTube, có thể xem hoạt động thực tế của dự án

Cấu trúc cốt lõi (core)

  • Động cơ gồm sáu thành phần chính sau
    1. Cấu trúc bàn cờ mailbox 120 ô
    2. Thuật toán tìm kiếm Negamax
    3. Cắt tỉa Alpha-Beta
    4. Đánh giá dựa trên giá trị quân cờ (material-only evaluation)
    5. Ưu tiên nước bắt quân (move ordering)
    6. Kiểm tra đầy đủ nước đi hợp lệ, bao gồm chiếu, chiếu hết và hết nước đi (stalemate)
  • Các tính năng chưa được triển khai gồm nhập thành, bắt tốt qua đường, phong cấp, lặp lại thế cờ và quy tắc 50 nước

Hiệu năng (strength)

  • Được đánh giá ở mức khoảng 1170 Elo, với khoảng tin cậy 95% là 1110~1225 Elo
  • Được đo dựa trên kết quả 240 ván đấu với Stockfish (mức 1320~1600)
  • Thử nghiệm trong điều kiện độ sâu 5 cố định (fixed depth 5), tối đa 60 ply, và bộ luật giới hạn

Đặc điểm kỹ thuật

  • Tổng kích thước mã dưới 2KB, gồm C 98.6%Makefile 1.4%
  • Tối đa hóa tính gọn nhẹ và hiệu quả thuật toán, triển khai logic cờ vua với lượng mã tối thiểu
  • Được phân loại theo các chủ đề chess-engine, chess, demoscene

Tình trạng kho mã

  • Ghi nhận 143 sao5 fork trên GitHub
  • Các mục Issues, Pull requests, Projects, Security đều đang trống
  • Mô tả kho mã được tóm tắt là “a ~1200 Elo chess engine that fits within 2KB

1 bình luận

 
GN⁺ 2026-02-16
Ý kiến trên Hacker News
  • Dự án này thực sự rất tuyệt. Việc có cả tính năng stalemate cũng rất hay, nhưng tôi tò mò không biết sẽ cần bao nhiêu dung lượng để hiện thực toàn bộ luật chơi
    Như tác giả đã nói, nếu thiếu castling, en passant, promotion, lặp lại vị trí và luật 50 nước thì khó mà gọi là cờ vua hiện đại
    Với một engine nhỏ thì có thể bỏ qua lặp lại vị trí và luật 50 nước, nhưng castling, en passant và promotion theo tôi là bắt buộc
    Video Chess năm 1980 đã hỗ trợ toàn bộ luật trong 4KB
    Vì vậy tôi tò mò engine tương thích UCI nhỏ nhất hiện nay là gì. Làm một engine siêu nhỏ hỗ trợ đầy đủ luật và vượt qua được nó có vẻ sẽ là một mục tiêu thú vị
    Nhân tiện, chiếc Fidelity CC3 mà tôi dùng vào đầu những năm 1980 cũng hỗ trợ castling và en passant

    • ToledoChess có các phiên bản được viết bằng nhiều ngôn ngữ khác nhau
      Bản JavaScript 2KB có cả castling, en passant, promotion, tìm kiếm và GUI
      còn bản assembly 326 byte thì thiếu các luật đặc biệt
      Không có bản tương thích UCI, nhưng có vẻ sẽ dễ hiện thực hơn GUI. Có thể một số fork của bản JS đã thêm tính năng đó
  • Dự án rất hay. Có vẻ có thể tận dụng frontend của GNU Chess để giảm số dòng mã và chỉ hiện thực phần backend
    Về bug report, tôi phát hiện rằng tốt không thể đi hai ô sau khi đã đi một ô trước đó, nhưng nước b6b4 lại được cho phép

    • Tôi đã nhận được phản hồi cảm ơn vì đã chỉ ra vấn đề. Họ nói sẽ thử vá ngay
  • Công cụ mà các nhà phát triển engine cờ vua dùng thường xuyên nhất để ước tính ELOcutechess. Bên trong nó dùng SPRT
    Một công cụ khác là Ordo, nhưng tôi chưa trực tiếp dùng thử

  • Tôi tự hỏi liệu có thể đạt được 1 ELO trên mỗi byte hay không. Có thể làm nhỏ hơn nữa, nhưng cũng có thể kém thông minh hơn

    • Tôi nghĩ đây sẽ là một thử thách code golf cực kỳ hay
    • Ở dải rating rất thấp thì có thể làm được, nhưng ở mức thực dụng thì có lẽ sẽ nhanh chóng chạm trần
  • Thứ này gần với một chương trình có thể di chuyển các quân cờ hơn là cờ vua thực sự. Vì nó thiếu castling, en passant, promotion, lặp lại vị trí và luật 50 nước

    • Tôi đã chơi cờ vua máy tính từ rất lâu rồi, nên khá quen với những tuyên bố kiểu “đã hiện thực cờ vua” như thế này
      Đôi khi người ta nói đã hiện thực cờ vua với kích thước cực nhỏ, nhưng thực tế lại lược bỏ những luật quan trọng
      Nếu muốn tìm các engine thật sự nhỏ mà mạnh, tôi khuyên dùng asmFish viết bằng x86 assembly (khoảng 130KiB), OliThink khoảng 1000 dòng, và Xiphos với mã C đơn giản nhưng hiệu năng mạnh
      Cũng có những engine 4KB từng xuất hiện ở TCEC, nhưng theo tôi các tuyên bố đó vẫn cần có dấu hoa thị (*)
  • Toledo là một họ chương trình cờ vua nhỏ nhưng khá mạnh

  • Gần đây tôi cũng đã hiện thực một engine cờ vua bao gồm toàn bộ luật bằng khoảng 400 dòng mã dễ đọc
    Ban đầu tôi làm bằng Java, rồi sau đó port sang ngôn ngữ Bau do tôi tạo ra
    Nó còn có cả terminal UI, và tuy ELO vẫn đang được đo nhưng tôi vẫn chưa thắng được nó
    Đặc biệt phần hiện thực castling khá khó, nhưng bản thân thử thách đó rất vui
    Tham khảo mã cờ vua của ngôn ngữ Bau

    • Có người hỏi vì sao Bau lại không có kiểu số unsigned
  • Tôi tò mò họ đã xử lý các ván mà Stockfish muốn nhập thành như thế nào. Đây là một nước đi xuất hiện rất thường xuyên, nên nếu không hỗ trợ nó thì rất khó đánh giá sức mạnh của engine

    • Không có ván nào bị loại vì castling. Thay vào đó, họ áp dụng bộ lọc nước đi hợp lệ để Stockfish không thể castling, en passant hay promotion
      Vì thế mọi ván đều được chơi như cùng một “biến thể cờ vua không castling”
      Đánh giá này không dành cho toàn bộ cờ vua, mà chỉ cho biến thể bị giới hạn đó
  • Quá tuyệt! Tôi đã thêm dự án này vào HN Arcade
    Liên kết HN Arcade