Implement bingo generator
This commit is contained in:
commit
9ddc6171c7
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
*.pdf
|
||||||
|
*.aux
|
||||||
|
*.log
|
||||||
|
*.fls
|
||||||
|
*.fdb_latexmk
|
||||||
|
**/build/*
|
||||||
|
__pycache__
|
6
bingo/Makefile
Normal file
6
bingo/Makefile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
all:
|
||||||
|
python generate_bingo.py
|
||||||
|
(cd build; latexmk -pdf; pdfjam --nup 1x2 --outfile output.pdf *.pdf)
|
||||||
|
|
||||||
|
template:
|
||||||
|
pdflatex template.tex
|
0
bingo/build/.gitkeep
Normal file
0
bingo/build/.gitkeep
Normal file
51
bingo/generate_bingo.py
Normal file
51
bingo/generate_bingo.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import random
|
||||||
|
from functools import reduce
|
||||||
|
from tex_template import latex_template # tex_template.py
|
||||||
|
|
||||||
|
output_dir = "build/"
|
||||||
|
|
||||||
|
num_total = 9
|
||||||
|
num_hard = 3
|
||||||
|
num_easy = num_total - num_hard
|
||||||
|
|
||||||
|
sentences = {"easy": [], "hard": []}
|
||||||
|
with open("prompts.txt") as f:
|
||||||
|
raw_sentences = f.readlines()
|
||||||
|
stripped = "".join(raw_sentences).strip().split("\n")
|
||||||
|
sentences["easy"] = [ line for line in stripped if "*" not in line ]
|
||||||
|
sentences["hard"] = [ line.replace("*","") for line in stripped if "*" in line ]
|
||||||
|
|
||||||
|
print(f"[INFO] Found {len(sentences['easy'])} easy prompts")
|
||||||
|
print(f"[INFO] Found {len(sentences['hard'])} hard prompts")
|
||||||
|
|
||||||
|
|
||||||
|
""" Postprocess the content string to look nice in the latex tabular cell """
|
||||||
|
def make_cell(content: str):
|
||||||
|
return fr"""\vspace{{0.5cm}}
|
||||||
|
\rule{{3cm}}{{0.15mm}} \, \newline \small {content}
|
||||||
|
\vspace{{0.5cm}}"""
|
||||||
|
|
||||||
|
def substitute_texts(text: str, substitutions: list[str]):
|
||||||
|
return reduce( \
|
||||||
|
# reducer
|
||||||
|
lambda acc, value: acc.replace(f"[[text{value}]]", make_cell(substitutions[value])), \
|
||||||
|
# list
|
||||||
|
range(len(substitutions)), \
|
||||||
|
# initializer
|
||||||
|
text \
|
||||||
|
)
|
||||||
|
|
||||||
|
def gen_board(num: int = 1):
|
||||||
|
print(f"Generating {num} boards")
|
||||||
|
|
||||||
|
for i in range(1, num+1):
|
||||||
|
prompts = [ *random.sample(sentences["easy"], num_easy), *random.sample(sentences["hard"], num_hard) ]
|
||||||
|
random.shuffle(prompts)
|
||||||
|
|
||||||
|
pick = substitute_texts(latex_template, prompts)
|
||||||
|
|
||||||
|
filename = "output.tex" if num == 1 else f"output{i}.tex"
|
||||||
|
with open(output_dir + filename,"w") as f:
|
||||||
|
f.writelines(pick)
|
||||||
|
|
||||||
|
gen_board(36)
|
49
bingo/prompts.txt
Normal file
49
bingo/prompts.txt
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
ist mit Ludmilla verwandt
|
||||||
|
ist mit Karl verwandt
|
||||||
|
ist jünger als Ludmilla
|
||||||
|
spricht mindestens drei Sprachen
|
||||||
|
kann Schach spielen
|
||||||
|
konnte \newline $\int_{5}^{8} (2x + 1) \text{dx} = \quad $ \newline ausrechnen*
|
||||||
|
s Name hat weniger als 5 Buchstaben
|
||||||
|
reiste weiter als 100km an
|
||||||
|
(hat) studiert, aber nicht Informatik oder Computerlinguistik*
|
||||||
|
hat keine Geschwister
|
||||||
|
ist single
|
||||||
|
konnte drei Star Wars Charaktere nennen
|
||||||
|
konnte fünf Animes nennen
|
||||||
|
hat blaue Augen
|
||||||
|
konnte 15 Sekunden auf einem Bein stehen
|
||||||
|
ist veganer
|
||||||
|
ist im Saarland geboren
|
||||||
|
spielt ein Instrument
|
||||||
|
hat ein Haustier
|
||||||
|
benutzt als Betriebssystem Linux
|
||||||
|
kennt Ludmilla schon länger als zehn Jahre
|
||||||
|
kennt Karl schon länger als zehn Jahre
|
||||||
|
kannte mich nicht, hat aber ein Selfie mit mir gemacht
|
||||||
|
schlug den Bräutigam im Armdrücken
|
||||||
|
ist Linkshänder
|
||||||
|
kann eine Krawatte binden
|
||||||
|
hat ein Tattoo
|
||||||
|
trinkt keinen Kaffee
|
||||||
|
hat schonmal ein Pokémon-Spiel gespielt
|
||||||
|
hat heute schon Bier getrunken
|
||||||
|
ist größer als Karl
|
||||||
|
konnte vor meinen Augen einen Zauberwürfel lösen*
|
||||||
|
war schonmal in der Natur klettern*
|
||||||
|
hatte dieses Jahr Corona :-(
|
||||||
|
kann 5km unter 30 Minuten laufen
|
||||||
|
identifiziert sich als Ravenclaw (Harry Potter Haus)*
|
||||||
|
mag Katzen mehr als Hunde
|
||||||
|
kann Stricken
|
||||||
|
hat schonmal ein Buch von Mark-Uwe Kling gelesen
|
||||||
|
aß noch nie in der Mensa der UdS
|
||||||
|
war schonmal auf einem Musikfestival
|
||||||
|
hat eine Lebensmittelunverträglichkeit
|
||||||
|
hat außerhalb von Saarbrücken studiert*
|
||||||
|
fuhr an einem Tag mehr als 100km mit dem Fahrrad*
|
||||||
|
besitzt ein Auto
|
||||||
|
war schonmal auf Mallorca
|
||||||
|
hat mal in einer WG gewohnt
|
||||||
|
war schonmal in der Zeitung*
|
||||||
|
hat schonmal in einem Theaterstück mitgespielt*
|
58
bingo/tex_template.py
Normal file
58
bingo/tex_template.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
latex_template=r"""
|
||||||
|
\documentclass{article}
|
||||||
|
\pagenumbering{gobble}
|
||||||
|
\usepackage{array}
|
||||||
|
\usepackage[a5paper,landscape,margin=0.0in]{geometry}
|
||||||
|
\usepackage{graphics}
|
||||||
|
\usepackage{amsmath}
|
||||||
|
\usepackage{eurosym}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
\setlength\tabcolsep{1cm}
|
||||||
|
\hspace{0pt}
|
||||||
|
\vfill
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
{\Huge Hochzeits-Bingo}
|
||||||
|
\vspace{0.2cm}
|
||||||
|
|
||||||
|
Trage in jedem Feld den Namen einer Person ein, die die genannte Eigenschaft erfüllt.
|
||||||
|
Jede Person darf nur \\ einmal eingetragen werden.
|
||||||
|
Für jedes vollständig ausgefüllte Bingo das bei Dominic oder Jan abgegeben wird \\ bekommt das Brautpaar 2 \euro.
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
\resizebox{15cm}{!}{
|
||||||
|
% \begin{tabular}{|m{4cm}|m{4cm}|m{4cm}|}
|
||||||
|
\begin{tabular}{| >{\centering\arraybackslash}m{1in} | >{\centering\arraybackslash}m{1in} | >{\centering\arraybackslash}m{1in} |}
|
||||||
|
\hline \centering
|
||||||
|
[[text0]]
|
||||||
|
& \centering
|
||||||
|
[[text1]]
|
||||||
|
&
|
||||||
|
[[text2]]
|
||||||
|
\\
|
||||||
|
\hline
|
||||||
|
[[text3]]
|
||||||
|
& \centering
|
||||||
|
[[text4]]
|
||||||
|
&
|
||||||
|
[[text5]]
|
||||||
|
\\
|
||||||
|
\hline
|
||||||
|
[[text6]]
|
||||||
|
& \centering
|
||||||
|
[[text7]]
|
||||||
|
&
|
||||||
|
[[text8]]
|
||||||
|
\\
|
||||||
|
\hline
|
||||||
|
\end{tabular}
|
||||||
|
}
|
||||||
|
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
\hspace{0pt}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
|
"""
|
Loading…
Reference in New Issue
Block a user