% bullshit bingo card % prepared by patrick tj mcphee, december 2002 ptjm@interlog.com % released to the public domain. have fun % concept and many phrases taken from % http://www.perkigoth.com/home/kermit/stuff/BullshitBingo % others from the list of banished words of Lake Superior State University: % http://www.lssu.edu/banished % my thanks to all who have contributed to these efforts % to run off a single card, give a command like % mpost bbcard % and the card will written to bbcard.ps % to run off cards for several players, try % mpost '\nocards := 7; input bbcard' % and the cards will be written to bbcard.1, bbcard.2, .., bbcard.7 % to add additional phrases, duplicate one of the lines starting with % i := i + 1; bs[i] := % and replace the phrase in quotes % I keep them in alphabetical order to ease maintenance, but you don't % have to. I suggest commenting out phrases which are not known in % your community and adding the irritating ones which are. input breakwidth; defaultfont := "ptmr8r"; prologues := 2; string bs[]; i := 0; i := i + 1; bs[i] := "action item"; i := i + 1; bs[i] := "actual facts"; i := i + 1; bs[i] := "articulate"; i := i + 1; bs[i] := "as we speak"; i := i + 1; bs[i] := "at the end of the day"; i := i + 1; bs[i] := "at this point in time"; i := i + 1; bs[i] := "backward compatible"; i := i + 1; bs[i] := "ballpark"; i := i + 1; bs[i] := "bandwidth"; i := i + 1; bs[i] := "basically"; i := i + 1; bs[i] := "been there, done that"; i := i + 1; bs[i] := "benchmark"; i := i + 1; bs[i] := "best of breed"; i := i + 1; bs[i] := "best practice"; i := i + 1; bs[i] := "buzz"; i := i + 1; bs[i] := "by and large"; i := i + 1; bs[i] := "challenge"; i := i + 1; bs[i] := "client-focused"; i := i + 1; bs[i] := "collaborative"; i := i + 1; bs[i] := "conceptualize"; i := i + 1; bs[i] := "core business"; i := i + 1; bs[i] := "core competency"; i := i + 1; bs[i] := "critical path"; i := i + 1; bs[i] := "down the road"; i := i + 1; bs[i] := "down time"; i := i + 1; bs[i] := "downsizing"; i := i + 1; bs[i] := "drill down"; i := i + 1; bs[i] := "dynamic"; i := i + 1; bs[i] := "each and every"; i := i + 1; bs[i] := "empower employees"; i := i + 1; bs[i] := "extreme"; i := i + 1; bs[i] := "fast-track"; i := i + 1; bs[i] := "fault tolerant"; i := i + 1; bs[i] := "front lines"; i := i + 1; bs[i] := "game plan"; i := i + 1; bs[i] := "gap analysis"; i := i + 1; bs[i] := "go public"; i := i + 1; bs[i] := "go the extra mile"; i := i + 1; bs[i] := "going forward"; i := i + 1; bs[i] := "hard-won lessons"; i := i + 1; bs[i] := "hardball"; i := i + 1; bs[i] := "having said that"; i := i + 1; bs[i] := "heads up"; i := i + 1; bs[i] := "issues"; i := i + 1; bs[i] := "knock-on effect"; i := i + 1; bs[i] := "knowledgebase"; i := i + 1; bs[i] := "lessons learned"; i := i + 1; bs[i] := "make no mistake"; i := i + 1; bs[i] := "manage expectations"; i := i + 1; bs[i] := "meaningful"; i := i + 1; bs[i] := "metrics"; i := i + 1; bs[i] := "mind share"; i := i + 1; bs[i] := "mindset"; i := i + 1; bs[i] := "mission critical"; i := i + 1; bs[i] := "move the goal posts"; i := i + 1; bs[i] := "movers and shakers"; i := i + 1; bs[i] := "new economy"; i := i + 1; bs[i] := "no blame"; i := i + 1; bs[i] := "no-brainer"; i := i + 1; bs[i] := "now, more than ever"; i := i + 1; bs[i] := "off-site meeting"; i := i + 1; bs[i] := "off-the-shelf"; i := i + 1; bs[i] := "offload"; i := i + 1; bs[i] := "on the same page"; i := i + 1; bs[i] := "open source"; i := i + 1; bs[i] := "out of the loop"; i := i + 1; bs[i] := "out-source"; i := i + 1; bs[i] := "outside the box"; i := i + 1; bs[i] := "paradigm"; i := i + 1; bs[i] := "partnership"; i := i + 1; bs[i] := "proactive, not reactive"; i := i + 1; bs[i] := "profitability"; i := i + 1; bs[i] := "progressing"; i := i + 1; bs[i] := "pushback"; i := i + 1; bs[i] := "put this one to bed"; i := i + 1; bs[i] := "results-driven"; i := i + 1; bs[i] := "revenue"; i := i + 1; bs[i] := "revisit"; i := i + 1; bs[i] := "robust"; i := i + 1; bs[i] := "run it up the flagpole"; i := i + 1; bs[i] := "run the numbers"; i := i + 1; bs[i] := "sales driven"; i := i + 1; bs[i] := "scope"; i := i + 1; bs[i] := "service oriented"; i := i + 1; bs[i] := "slippery slide"; i := i + 1; bs[i] := "speaks to"; i := i + 1; bs[i] := "strategic fit"; i := i + 1; bs[i] := "stretch the envelope"; i := i + 1; bs[i] := "synergy"; i := i + 1; bs[i] := "take that offline"; i := i + 1; bs[i] := "target audience"; i := i + 1; bs[i] := "team player"; i := i + 1; bs[i] := "the big picture"; i := i + 1; bs[i] := "the bottom line"; i := i + 1; bs[i] := "think outside the box"; i := i + 1; bs[i] := "ticks in boxes"; i := i + 1; bs[i] := "time to market"; i := i + 1; bs[i] := "timeline"; i := i + 1; bs[i] := "to be perfectly honest"; i := i + 1; bs[i] := "total quality"; i := i + 1; bs[i] := "touch base"; i := i + 1; bs[i] := "up to speed"; i := i + 1; bs[i] := "user friendly"; i := i + 1; bs[i] := "value-added"; i := i + 1; bs[i] := "vast majority"; i := i + 1; bs[i] := "very unique"; i := i + 1; bs[i] := "walk the talk"; i := i + 1; bs[i] := "web-enabled"; i := i + 1; bs[i] := "win-win situation"; i := i + 1; bs[i] := "wow factor"; bsmax := i; radius := .5 cm; offset := 1 cm; boxwid := 1.9 cm; % co-ordinates for the grid pair bpos[], bpos[].ll, bpos[].ul, bpos[].ur, bpos[].lr; for i = 0 upto 4: for j = 0 upto 4: bpos[i+j*5+1] := ((j+0.5)*boxwid, (i+0.5)*boxwid); bpos[i+j*5+1].ll := (j*boxwid, i*boxwid); bpos[i+j*5+1].ul := (j*boxwid, (i+1)*boxwid); bpos[i+j*5+1].lr := ((j+1)*boxwid, i*boxwid); bpos[i+j*5+1].ur := ((j+1)*boxwid, (i+1)*boxwid); endfor; endfor; picture bbcard[]; % the grid itself bbcard[0] := image( z1 = (0, radius) = z2 - (0, 5boxwid - 2radius) = z6 - (5boxwid, 0) = z8 - (radius, -radius); z3 = z8 + (0, 5boxwid) = z4 - (5boxwid-2radius, 0); x5 = x6; y5 = y2; x7 = x4; y7 = y8; pickup pencircle xscaled 4pt yscaled 1pt rotated 30; draw z1---z2..z3---z4..z5---z6..z7---z8..cycle; fill ((unitsquare shifted -(.5,.5)) scaled boxwid) shifted bpos[13] withcolor .8 white; pickup pencircle scaled 1pt; for i = 2 upto 5: draw bpos[i].ll--bpos[i+20].lr; endfor; for i = 10 step 5 until 25: draw bpos[i].ul--bpos[i-4].ll; endfor; ); % handle > 1 card if nocards was set on the command-line if known nocards: for bsno = 1 upto nocards: else: if unknown bsno: bsno := -1; fi; fi; % select the strings for each card % after we're done, we set the middle square to `Free Square' % dups[] is used to keep track of already used values to eliminate % duplicates within each grid (a playing card has four grids on it) for bb = 1 upto 4: string bstring[]; numeric dups[]; for i = 1 upto 25: j := 1+floor(uniformdeviate bsmax); forever: exitif unknown dups[j]; j := 1+floor(uniformdeviate bsmax); endfor; dups[j] := i; bstring[i] = bs[j]; endfor; bstring[13] := "Free Square"; bbcard[bb] := image( draw bbcard[0]; for i = 1 upto 25: label(breaktowidth(bstring[i], 1.5cm, 11pt), bpos[i]); endfor; ); endfor; beginfig(bsno); picture p; p := ("Bullshit Bingo" infont defaultfont scaled 2) shifted ((offset, 3offset)+2.25*ulcorner bbcard[0]); fill ((llcorner p)..(ulcorner p).. tension 2 .. (urcorner p).. (lrcorner p) .. tension 2 .. cycle) withcolor .5 white; draw p withcolor white; draw ("Advanced Playing Card" infont defaultfont scaled 1.2) shifted ((lrcorner p) + (10pt, 6pt)); draw ("Stay awake!" infont defaultfont) shifted ((lrcorner p) + (10pt, -14pt)); draw ("Watch for duplicates!" infont defaultfont) shifted ((lrcorner p) + (10pt, -25pt)); draw ("Have fun!" infont defaultfont) shifted ((lrcorner p) + (10pt, -36pt)); draw bbcard[1] shifted (offset, offset); draw bbcard[2] shifted ((1.25offset, offset)+lrcorner bbcard[0]); draw bbcard[3] shifted ((1.25offset, 2offset)+urcorner bbcard[0]); draw bbcard[4] shifted ((offset, 2offset)+ulcorner bbcard[0]); endfig; if known nocards: endfor; fi; end;