Files
ordinaceprojekt/SběrDatRůzné/DailyStr8ts/vykresli_velikosti.py
T
Vladimir Buzalka c9903646f1 notebookvb
2026-05-08 13:30:47 +02:00

95 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Vykreslí jedno Str8ts puzzle v různých velikostech (18×18 cm až 2×2 cm),
každou velikost na samostatnou stránku A4, vycentrované.
"""
import json
import sys
from pathlib import Path
sys.stdout.reconfigure(encoding="utf-8")
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "Knihovny"))
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.pdfgen.canvas import Canvas
from mysql_db import connect_mysql
OUTPUT = Path(__file__).parent / "str8ts_velikosti.pdf"
GRID = 9
def draw_str8ts(c: Canvas, x0: float, y0: float, cell: float,
puzzle: str, bw: str, title: str = ""):
board = GRID * cell
font_size = cell * 0.55
if title:
c.setFont("Helvetica-Bold", 12)
c.drawCentredString(x0 + board / 2, y0 + 5, title)
for idx in range(81):
row, col = divmod(idx, 9)
cell_x = x0 + col * cell
cell_y = y0 - (row + 1) * cell
cx = cell_x + cell / 2
cy = cell_y + cell * 0.3
is_black = bw[idx] == "1"
ch = puzzle[idx]
if is_black:
c.setFillColor(colors.black)
c.rect(cell_x, cell_y, cell, cell, fill=1, stroke=0)
if ch in "123456789":
c.setFillColor(colors.yellow if is_black else colors.black)
c.setFont("Helvetica-Bold", max(font_size, 4))
c.drawCentredString(cx, cy, ch)
c.setFillColor(colors.black)
for i in range(GRID + 1):
c.setLineWidth(0.8)
c.line(x0, y0 - i * cell, x0 + board, y0 - i * cell)
c.line(x0 + i * cell, y0, x0 + i * cell, y0 - board)
def main():
conn = connect_mysql(database="puzzle")
cur = conn.cursor()
cur.execute(
"SELECT puzzle, extra FROM puzzles "
"WHERE game_type='str8ts' AND difficulty='easy' AND puzzle_date='2026-05-08'"
)
row = cur.fetchone()
cur.close()
conn.close()
if not row:
print("Žádná data.")
return
puzzle = row[0]
bw = json.loads(row[1])["bw"]
page_w, page_h = A4
c = Canvas(str(OUTPUT), pagesize=A4)
for size_cm in range(18, 1, -1):
board = size_cm * cm
cell = board / GRID
x0 = (page_w - board) / 2
y0 = (page_h + board) / 2
title = f"Str8ts Easy — {size_cm}×{size_cm} cm"
draw_str8ts(c, x0, y0, cell, puzzle, bw, title)
c.showPage()
c.save()
print(f"PDF uloženo: {OUTPUT} ({18 - 2} stránek)")
if __name__ == "__main__":
main()