From 8d533e891ad6f33073e3bab384c957247dd06144 Mon Sep 17 00:00:00 2001 From: Dejvino Date: Tue, 23 Dec 2025 00:18:26 +0100 Subject: [PATCH] New job: chess puzzles --- jobs/chess_puzzle.py | 71 ++++++++++++++++++++++++++++++++++++++++++++ print_server.py | 4 ++- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 jobs/chess_puzzle.py diff --git a/jobs/chess_puzzle.py b/jobs/chess_puzzle.py new file mode 100644 index 0000000..0ac1170 --- /dev/null +++ b/jobs/chess_puzzle.py @@ -0,0 +1,71 @@ +import random +from .base import Job + +class ChessPuzzleJob(Job): + def get_name(self): + return "SACHOVE ULOHY" + + def print_body(self, p): + # (FEN, Instruction, Solution) + puzzles = [ + ("r1bqkb1r/pppp1ppp/2n2n2/4p2Q/2B1P3/8/PPPP1PPP/RNB1K1NR w KQkq - 4 4", "Bily na tahu. Mat 1. tahem.", "Qxf7# (Scholar's Mate)"), + ("rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR b KQkq - 1 3", "Cerny na tahu. Mat 1. tahem.", "Qh4# (Fool's Mate)"), + ("6k1/5ppp/8/8/8/8/5PPP/4R1K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Re8# (Back Rank Mate)"), + ("3r2k1/p4ppp/1p6/8/8/8/P4PPP/3R2K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rxd8#"), + ("6rk/5p1p/3N4/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Nf7# (Smothered Mate)"), + ("8/4N1pk/8/7R/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh5# (Anastasia's Mate)"), + ("7k/R7/5N2/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh7# (Arabian Mate)"), + ("2kr4/1pp5/B7/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Ba6# (Boden's Mate)"), + ("7k/6pp/6P1/7Q/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qh7#"), + ("6k1/5p1p/5PpQ/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qg7# (Lolli's Mate)"), + ("3k4/5ppp/8/6B1/8/8/5PPP/3R2K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rd8# (Opera Mate)"), + ("6k1/5P2/8/8/8/8/5PPP/6KR w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh8# (Anderssen's Mate)"), + ("7k/5ppp/8/7Q/8/2B5/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qxh7# (Damiano's Bishop Mate)"), + ("4k3/8/4K3/8/8/8/8/5Q2 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qf7# (Dovetail Mate)"), + ("2rkr3/8/2Q5/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qd7# (Swallow's Tail Mate)"), + ("3rkr2/8/4Q3/8/8/8/5PPP/6K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qe6# (Epaulette Mate)"), + ("7k/6p1/8/8/2B5/8/5PPP/R5K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rh1# (Greco's Mate)"), + ("6k1/5pP1/5N2/8/8/8/5PPP/3R2K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Rd8# (Hook Mate)"), + ("8/8/8/8/8/5K2/6Q1/7k w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Qg2#"), + ("k7/1R6/8/8/8/8/8/R5K1 w - - 0 1", "Bily na tahu. Mat 1. tahem.", "Ra8# (Ladder Mate)") + ] + + puzzle = random.choice(puzzles) + fen, instruction, solution = puzzle + + p.text(f"{instruction}\n\n") + self.print_board(p, fen) + p.text("\n") + + p.text("Legenda: K=Kral, Q=Dama, R=Vez\n") + p.text(" B=Strelec, N=Jezdec, P=Pesec\n") + p.text(" (Velka=Bily, mala=Cerny)\n\n") + + p.text("Reseni (naskenuj):\n") + p.qr(solution, size=6, native=True) + + def print_board(self, p, fen): + board_str = fen.split(' ')[0] + rows = board_str.split('/') + + # Center the board + p.set(align='center') + + # Top border + p.text(" +-----------------+\n") + + for i, row in enumerate(rows): + rank = 8 - i + line = f"{rank} | " + for char in row: + if char.isdigit(): + count = int(char) + line += ". " * count + else: + line += f"{char} " + line += "|\n" + p.text(line) + + p.text(" +-----------------+\n") + p.text(" a b c d e f g h\n") + p.set(align='left') \ No newline at end of file diff --git a/print_server.py b/print_server.py index df179f6..95c3815 100644 --- a/print_server.py +++ b/print_server.py @@ -2,6 +2,7 @@ from escpos.printer import Usb, Dummy from escpos.exceptions import USBNotFoundError from jobs.math_homework import MathHomeworkJob from jobs.unit_conversion import UnitConversionJob +from jobs.chess_puzzle import ChessPuzzleJob # ========================================== # CONFIGURATION @@ -38,7 +39,8 @@ def get_printer(): JOBS = [ MathHomeworkJob(), - UnitConversionJob() + UnitConversionJob(), + ChessPuzzleJob() ] def run_tui():