2 Punkte von GN⁺ 2026-02-16 | 1 Kommentare | Auf WhatsApp teilen
  • Eine leichtgewichtige Schach-Engine mit einer Größe von nur etwa 2 KB, die innerhalb eingeschränkter Regeln ein vollständiges Spiel ermöglicht
  • Enthält zentrale Algorithmen wie ein 120-Zellen-Mailbox-Board, Negamax-Suche und Alpha-Beta-Pruning
  • Verwendet materialbasierte Bewertung (material-only eval) und Capture-Priorisierung (move ordering)
  • Nicht implementiert sind Rochade, En passant, Umwandlung, Wiederholung und die 50-Züge-Regel
  • Erreicht eine Spielstärke von etwa 1170 bis 1200 Elo und fällt als Beispiel für eine Schach-Engine in weniger als 2 KB Code auf

Projektüberblick

  • Sameshi ist eine minimale Schach-Engine mit Unterstützung eingeschränkter Regeln, deren gesamter Code nur etwa 1,95 KB umfasst
    • Die Hauptdatei ist sameshi.h, eine besser lesbare Version befindet sich in readable/sameshi.h
    • Im GitHub-Repository sind außerdem main.c, Makefile, .gitignore und weitere Dateien enthalten
  • Auf YouTube ist ein Demo-Video veröffentlicht, in dem sich die tatsächliche Funktionsweise ansehen lässt

Kernstruktur (core)

  • Die Engine besteht aus den folgenden sechs Hauptkomponenten
    1. 120-Zellen-Mailbox-Board-Struktur
    2. Negamax-Suchalgorithmus
    3. Alpha-Beta-Pruning
    4. Materialbasierte Bewertung (material-only evaluation)
    5. Capture-Priorisierung (move ordering)
    6. Vollständige Prüfung legaler Züge einschließlich Schach, Schachmatt und Patt
  • Als nicht implementierte Funktionen werden ausdrücklich Rochade, En passant, Umwandlung, Wiederholung und die 50-Züge-Regel genannt

Spielstärke (strength)

  • Wird auf etwa 1170 Elo geschätzt, mit einem 95-%-Konfidenzintervall von 1110 bis 1225 Elo
  • Gemessen auf Basis von 240 Partien gegen Stockfish (Level 1320–1600)
  • Getestet unter den Bedingungen Tiefe 5 (fixed depth 5), maximal 60 Ply und eingeschränkte Regeln

Technische Merkmale

  • Der gesamte Code bleibt unter 2 KB und besteht zu 98,6 % aus C und zu 1,4 % aus Makefile
  • Durch die Maximierung von Schlankheit und algorithmischer Effizienz wird Schachlogik mit minimalem Code umgesetzt
  • Eingeordnet unter Themen wie chess-engine, chess und demoscene

Repository-Status

  • Auf GitHub verzeichnet das Projekt 143 Stars und 5 Forks
  • Die Bereiche Issues, Pull requests, Projects und Security sind alle leer
  • Die Repository-Beschreibung wird zusammengefasst als: "a ~1200 Elo chess engine that fits within 2KB"

1 Kommentare

 
GN⁺ 2026-02-16
Hacker-News-Kommentare
  • Wirklich ein tolles Projekt. Es ist schön, dass Patt unterstützt wird, aber ich frage mich, wie viel Platz nötig wäre, um die vollständigen Regeln zu implementieren
    Wie der Autor erwähnt, fehlen Rochade, en passant, Umwandlung, Wiederholung und die 50-Züge-Regel, und ich denke, ohne diese lässt es sich kaum als modernes Schach bezeichnen
    Bei einer kleinen Engine könnte man Wiederholung und die 50-Züge-Regel vielleicht weglassen, aber Rochade, en passant und Umwandlung halte ich für unverzichtbar
    Video Chess von 1980 unterstützte die vollständigen Regeln in 4KB
    Deshalb frage ich mich, was aktuell die kleinste UCI-kompatible Engine ist. Eine ultrakleine Engine mit vollständigen Regeln zu bauen, die das unterbietet, wäre ein interessantes Ziel
    Zur Einordnung: Mein Fidelity CC3, das ich Anfang der 1980er benutzt habe, unterstützte ebenfalls Rochade und en passant

    • ToledoChess gibt es in mehreren Sprachversionen
      Die 2KB-JavaScript-Version enthält Rochade, en passant, Umwandlung, Suche und sogar eine GUI
      Die 326-Byte-Assembler-Version lässt Sonderregeln weg
      Eine UCI-kompatible Version gibt es nicht, aber das wäre vermutlich leichter umzusetzen als eine GUI. Einige Forks der JS-Version könnten diese Funktion bereits hinzugefügt haben
  • Tolles Projekt. Mit einem Frontend für GNU Chess könnte man vielleicht die Zahl der Codezeilen reduzieren und nur das Backend implementieren
    Als Bugreport: Ein Bauer darf nicht zwei Felder vorrücken, nachdem er bereits ein Feld gezogen ist, aber b6b4 wird erlaubt

    • Es kam die Antwort, dass man für den Hinweis dankbar sei. Ein Patch soll sofort versucht werden
  • Das von Schach-Engine-Entwicklern am häufigsten verwendete Tool zur ELO-Schätzung ist cutechess. Intern verwendet es SPRT
    Ein weiteres Tool ist Ordo, das ich aber selbst noch nicht benutzt habe

  • Ich frage mich, ob man 1 ELO pro Byte erreichen kann. Man könnte es noch kleiner machen, aber dann vielleicht auch weniger klug

    • Ich finde, das ist eine wirklich großartige Code-Golf-Challenge
    • In sehr niedrigen Rating-Bereichen könnte das vielleicht gehen, aber auf praktischem Niveau stößt man wohl schnell an Grenzen
  • Das ist eher ein Programm, das Schachfiguren bewegen kann, als wirklich Schach. Rochade, en passant, Umwandlung, Wiederholung und die 50-Züge-Regel fehlen ja

    • Ich beschäftige mich schon lange mit Computerschach und kenne solche Behauptungen über „Schach-Implementierungen“ gut
      Oft wird behauptet, Schach in extrem kleiner Größe implementiert zu haben, tatsächlich werden aber wichtige Regeln weggelassen
      Wenn man eine wirklich kleine und starke Engine sucht, würde ich asmFish (etwa 130KiB) empfehlen, geschrieben in x86-Assembler, außerdem OliThink mit ungefähr 1000 Zeilen und Xiphos, das mit einfachem C-Code starke Leistung liefert
      Es gibt auch 4KB-Engines, die bei der TCEC aufgetaucht sind, aber ich finde, bei diesen Behauptungen ist ein Sternchen(*) angebracht
  • Toledo ist eine Familie kleiner, aber ziemlich starker Schachprogramme

  • Ich habe kürzlich selbst eine Schach-Engine mit allen Regeln in etwa 400 Zeilen gut lesbarem Code implementiert
    Zuerst in Java, später habe ich sie in meine eigene Sprache Bau portiert
    Eine Terminal-UI ist ebenfalls enthalten, und das ELO wird noch gemessen, aber ich konnte sie nicht schlagen
    Vor allem die Implementierung der Rochade war knifflig, aber genau diese Herausforderung hat Spaß gemacht
    Siehe den Schach-Code in der Bau-Sprache

    • Jemand fragte, warum es in Bau keinen unsigned Zahlentyp gibt
  • Ich frage mich, wie Partien behandelt wurden, in denen Stockfish rochieren wollte. Das ist ein so häufiger Zug, dass sich die Stärke einer Engine ohne diese Unterstützung kaum sinnvoll bewerten lässt

    • Es wurden keine Partien wegen Rochade verworfen. Stattdessen wurde ein Filter für legale Züge angewendet, damit Stockfish weder Rochade noch en passant noch Umwandlung ausführen konnte
      Dadurch wurden alle Partien als dieselbe „schachartige Variante ohne Rochade“ gespielt
      Diese Bewertung bezog sich also nicht auf vollständiges Schach, sondern auf diese eingeschränkte Variante
  • Wirklich großartig! Ich habe dieses Projekt zu HN Arcade hinzugefügt
    HN-Arcade-Link