<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.mafiasi.de/index.php?action=history&amp;feed=atom&amp;title=BullshitBingo%2FGenerator.py</id>
	<title>BullshitBingo/Generator.py - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mafiasi.de/index.php?action=history&amp;feed=atom&amp;title=BullshitBingo%2FGenerator.py"/>
	<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=BullshitBingo/Generator.py&amp;action=history"/>
	<updated>2026-10-17T09:02:42Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Fachschaft Informatik</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=BullshitBingo/Generator.py&amp;diff=15468&amp;oldid=prev</id>
		<title>1steenfa: Bot: Kosmetische Änderungen</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=BullshitBingo/Generator.py&amp;diff=15468&amp;oldid=prev"/>
		<updated>2012-06-08T15:09:32Z</updated>

		<summary type="html">&lt;p&gt;Bot: Kosmetische Änderungen&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 8. Juni 2012, 15:09 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/usr/bin/env python&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# !/usr/bin/env python&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Generate Metapost Bullshitbingo cards.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Generate Metapost Bullshitbingo cards.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>1steenfa</name></author>
	</entry>
	<entry>
		<id>https://wiki.mafiasi.de/index.php?title=BullshitBingo/Generator.py&amp;diff=12278&amp;oldid=prev</id>
		<title>T: aus :Bild:2011-02-12-bullshitbingo.tar</title>
		<link rel="alternate" type="text/html" href="https://wiki.mafiasi.de/index.php?title=BullshitBingo/Generator.py&amp;diff=12278&amp;oldid=prev"/>
		<updated>2011-02-13T12:31:44Z</updated>

		<summary type="html">&lt;p&gt;aus &lt;a href=&quot;/index.php/Datei:2011-02-12-bullshitbingo.tar&quot; title=&quot;Datei:2011-02-12-bullshitbingo.tar&quot;&gt;Bild:2011-02-12-bullshitbingo.tar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#!/usr/bin/env python&lt;br /&gt;
# &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Generate Metapost Bullshitbingo cards.&lt;br /&gt;
Feed it with newline separated wordlist with utf-8 encoded words (sic!) and pipe the result to &amp;quot;bbcard.mp&amp;quot;.&lt;br /&gt;
(To then create the cards, follow the documentation in &amp;quot;bbcard.mp&amp;quot;).&lt;br /&gt;
The metapost code will generate a random sheet with 4 BullshitBingo-cards on it named bbcards.ps, &lt;br /&gt;
or if it receives a parameter &amp;quot;n&amp;quot; it generates the files bbcards.1 to bbcards.n&lt;br /&gt;
@author 4tmuelle, slightly modified by 7giese&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
import subprocess&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
  if os.geteuid() == 0:&lt;br /&gt;
    print &amp;gt;&amp;gt;sys.stderr, &amp;#039;You are root! Go away, N00B!&amp;#039;&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
except OSError:&lt;br /&gt;
  pass &lt;br /&gt;
print &amp;gt;&amp;gt;sys.stderr, &amp;#039;Reading utf-8 encoded wordlist from stdin!&amp;#039;&lt;br /&gt;
&lt;br /&gt;
bullshit_metapost = r&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
% bullshit bingo card&lt;br /&gt;
% prepared by patrick tj mcphee, december 2002 ptjm@interlog.com&lt;br /&gt;
% released to the public domain. have fun&lt;br /&gt;
&lt;br /&gt;
% to run off a single card, give a command like&lt;br /&gt;
%  mpost bbcard&lt;br /&gt;
% and the card will written to bbcard.ps&lt;br /&gt;
&lt;br /&gt;
% to run off cards for several players, try&lt;br /&gt;
%  mpost &amp;#039;\nocards := 7; input bbcard&amp;#039;&lt;br /&gt;
% and the cards will be written to bbcard.1, bbcard.2, .., bbcard.7&lt;br /&gt;
&lt;br /&gt;
% to add additional phrases, duplicate one of the lines starting with&lt;br /&gt;
%  i := i + 1; bs[i] :=&lt;br /&gt;
% and replace the phrase in quotes&lt;br /&gt;
% I keep them in alphabetical order to ease maintenance, but you don&amp;#039;t&lt;br /&gt;
% have to. I suggest commenting out phrases which are not known in&lt;br /&gt;
% your community and adding the irritating ones which are.&lt;br /&gt;
&lt;br /&gt;
input breakwidth;&lt;br /&gt;
&lt;br /&gt;
defaultfont := &amp;quot;ptmr8r&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
prologues := 2;&lt;br /&gt;
&lt;br /&gt;
string bs[];&lt;br /&gt;
i := 0;&lt;br /&gt;
&lt;br /&gt;
$$$BULLSHIT_WORDLIST$$$&lt;br /&gt;
&lt;br /&gt;
bsmax := i;&lt;br /&gt;
&lt;br /&gt;
radius := .5 cm;&lt;br /&gt;
&lt;br /&gt;
offset := 1 cm;&lt;br /&gt;
boxwid := 1.9 cm;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% co-ordinates for the grid&lt;br /&gt;
pair bpos[], bpos[].ll, bpos[].ul, bpos[].ur, bpos[].lr;&lt;br /&gt;
   for i = 0 upto 4:&lt;br /&gt;
      for j = 0 upto 4:&lt;br /&gt;
        bpos[i+j*5+1] := ((j+0.5)*boxwid, (i+0.5)*boxwid);&lt;br /&gt;
        bpos[i+j*5+1].ll := (j*boxwid, i*boxwid);&lt;br /&gt;
        bpos[i+j*5+1].ul := (j*boxwid, (i+1)*boxwid);&lt;br /&gt;
        bpos[i+j*5+1].lr := ((j+1)*boxwid, i*boxwid);&lt;br /&gt;
        bpos[i+j*5+1].ur := ((j+1)*boxwid, (i+1)*boxwid);&lt;br /&gt;
      endfor;&lt;br /&gt;
   endfor;&lt;br /&gt;
&lt;br /&gt;
picture bbcard[];&lt;br /&gt;
&lt;br /&gt;
% the grid itself&lt;br /&gt;
bbcard[0] := image(&lt;br /&gt;
   z1 = (0, radius) = z2 - (0, 5boxwid - 2radius) =&lt;br /&gt;
        z6 - (5boxwid, 0) = z8 - (radius, -radius);&lt;br /&gt;
   z3 = z8 + (0, 5boxwid) = z4 - (5boxwid-2radius, 0);&lt;br /&gt;
   x5 = x6; y5 = y2;&lt;br /&gt;
   x7 = x4;&lt;br /&gt;
   y7 = y8;&lt;br /&gt;
&lt;br /&gt;
   pickup pencircle xscaled 4pt yscaled 1pt rotated 30;&lt;br /&gt;
&lt;br /&gt;
   draw z1---z2..z3---z4..z5---z6..z7---z8..cycle;&lt;br /&gt;
&lt;br /&gt;
   fill ((unitsquare shifted -(.5,.5)) scaled boxwid) shifted bpos[13] withcolor .8 white;&lt;br /&gt;
&lt;br /&gt;
   pickup pencircle scaled 1pt;&lt;br /&gt;
   for i = 2 upto 5:&lt;br /&gt;
	draw bpos[i].ll--bpos[i+20].lr;&lt;br /&gt;
   endfor;&lt;br /&gt;
&lt;br /&gt;
   for i = 10 step 5 until 25:&lt;br /&gt;
	draw bpos[i].ul--bpos[i-4].ll;&lt;br /&gt;
   endfor;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
% handle &amp;gt; 1 card if nocards was set on the command-line&lt;br /&gt;
if known nocards:&lt;br /&gt;
 for bsno = 1 upto nocards:&lt;br /&gt;
else:&lt;br /&gt;
 if unknown bsno:&lt;br /&gt;
   bsno := -1;&lt;br /&gt;
 fi;&lt;br /&gt;
fi;&lt;br /&gt;
&lt;br /&gt;
 % select the strings for each card&lt;br /&gt;
 % after we&amp;#039;re done, we set the middle square to `Free Square&amp;#039;&lt;br /&gt;
 % dups[] is used to keep track of already used values to eliminate&lt;br /&gt;
 % duplicates within each grid (a playing card has four grids on it)&lt;br /&gt;
&lt;br /&gt;
 for bb = 1 upto 4:&lt;br /&gt;
    string bstring[];&lt;br /&gt;
    numeric dups[];&lt;br /&gt;
&lt;br /&gt;
    for i = 1 upto 25:&lt;br /&gt;
      j := 1+floor(uniformdeviate bsmax);&lt;br /&gt;
&lt;br /&gt;
      forever:&lt;br /&gt;
         exitif unknown dups[j];&lt;br /&gt;
         j := 1+floor(uniformdeviate bsmax);&lt;br /&gt;
      endfor;&lt;br /&gt;
      dups[j] := i;&lt;br /&gt;
      bstring[i] = bs[j];&lt;br /&gt;
    endfor;&lt;br /&gt;
&lt;br /&gt;
    bstring[13] := &amp;quot;Free Square&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    bbcard[bb] := image(&lt;br /&gt;
	draw bbcard[0];&lt;br /&gt;
	for i = 1 upto 25:&lt;br /&gt;
	   label(breaktowidth(bstring[i], 1.5cm, 11pt), bpos[i]);&lt;br /&gt;
	endfor;&lt;br /&gt;
    );&lt;br /&gt;
 endfor;&lt;br /&gt;
&lt;br /&gt;
 beginfig(bsno);&lt;br /&gt;
  picture p;&lt;br /&gt;
  p := (&amp;quot;Bullshit Bingo&amp;quot; infont defaultfont scaled 2)&lt;br /&gt;
   shifted ((offset, 3offset)+2.25*ulcorner bbcard[0]);&lt;br /&gt;
&lt;br /&gt;
  fill ((llcorner p)..(ulcorner p).. tension 2 .. (urcorner p)..&lt;br /&gt;
        (lrcorner p) .. tension 2 .. cycle)&lt;br /&gt;
   withcolor .5 white;&lt;br /&gt;
  draw p withcolor white;&lt;br /&gt;
&lt;br /&gt;
  draw (&amp;quot;Advanced Playing Card&amp;quot; infont defaultfont scaled 1.2)&lt;br /&gt;
    shifted ((lrcorner p) + (10pt, 6pt));&lt;br /&gt;
  draw (&amp;quot;Stay awake!&amp;quot; infont defaultfont)&lt;br /&gt;
    shifted ((lrcorner p) + (10pt, -14pt));&lt;br /&gt;
  draw (&amp;quot;Watch for duplicates!&amp;quot; infont defaultfont)&lt;br /&gt;
    shifted ((lrcorner p) + (10pt, -25pt));&lt;br /&gt;
  draw (&amp;quot;Have fun!&amp;quot; infont defaultfont)&lt;br /&gt;
    shifted ((lrcorner p) + (10pt, -36pt));&lt;br /&gt;
&lt;br /&gt;
  draw bbcard[1] shifted (offset, offset);&lt;br /&gt;
  draw bbcard[2] shifted ((1.25offset, offset)+lrcorner bbcard[0]);&lt;br /&gt;
  draw bbcard[3] shifted ((1.25offset, 2offset)+urcorner bbcard[0]);&lt;br /&gt;
  draw bbcard[4] shifted ((offset, 2offset)+ulcorner bbcard[0]);&lt;br /&gt;
 endfig;&lt;br /&gt;
&lt;br /&gt;
if known nocards:&lt;br /&gt;
 endfor;&lt;br /&gt;
fi;&lt;br /&gt;
&lt;br /&gt;
end;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
wordlist = []&lt;br /&gt;
for word in sys.stdin.readlines():&lt;br /&gt;
    wordlist.append(word.decode(&amp;#039;utf-8&amp;#039;).strip())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
bullshitwordlist = &amp;#039;\n&amp;#039;.join([&amp;#039;&amp;#039;&amp;#039;i := i + 1; bs[i] := &amp;quot;%s&amp;quot;;&amp;#039;&amp;#039;&amp;#039; % word for word in wordlist])&lt;br /&gt;
&lt;br /&gt;
print &amp;gt;&amp;gt;sys.stderr, &amp;#039;Writing Metapost file to bbcard.mp!&amp;#039;&lt;br /&gt;
file(&amp;#039;bbcard.mp&amp;#039;, &amp;#039;w&amp;#039;).write(&lt;br /&gt;
    bullshit_metapost.replace(&amp;#039;$$$BULLSHIT_WORDLIST$$$&amp;#039;, bullshitwordlist).encode(&amp;#039;latin1&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) &amp;gt; 1:&lt;br /&gt;
    number_of_cards = int(sys.argv[1])&lt;br /&gt;
    cmd = [&amp;#039;mpost&amp;#039;, r&amp;#039;\nocards := %s; input bbcard&amp;#039; % number_of_cards]&lt;br /&gt;
else:&lt;br /&gt;
    cmd = [&amp;#039;mpost&amp;#039;, &amp;#039;bbcard.mp&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
print &amp;gt;&amp;gt;sys.stderr, &amp;#039;Trying to run %s!&amp;#039; % &amp;#039; &amp;#039;.join(cmd)&lt;br /&gt;
subprocess.check_call(cmd)&lt;br /&gt;
#&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>T</name></author>
	</entry>
</feed>