Недавно, мне подарили настольную игру под названием "Алиас", суть которой заключается в угадывании слов и всяких "известных персонажей" по словесному описанию от партнера по команде.

Именно с угадыванием известных персонажей и возникли проблемы у компании из двух программистов и одного филолога. Если с такими людьми как Арнольд Шварценеггер или Уилл Смит не возникало никаких проблем, то попытки описать Колин Фарелл или Род Стюарта наталкивались на препятствие вида "эээ, а кто все эти люди?".

Тогда же, одному из двух программистов пришла в голову светлая идея — заменить всех этих "звезд эстрады и шоубизнеса" на таких привычных и понятных программистскому уху именах и фамилиях как: Линус Торвальдс, Ричард Столлман, Деннис Ритчи и так далее.

Естественно, рисовать карточки от руки было, что называется "не с руки", поэтому мною была написана простенькая программка, рисующая карточки автоматически.

Естественно, не стоит ждать от нее каких-то красивостей и прочего. Программа просто берет слова (для карточек со словами) и имена людей из файлов words.txt и people.txt соответственно и генерирует из них pdf с табличкой, ячейки которой и представляют собой искомые карточки. Размер таблицы — 3x3, а с учетом того, что в карточке должно быть 8 слов, нам необходимо иметь как минимум 72 слова в каждом из исходных TXT-файлов. Если слов меньше — таблички просто не будет. Если слов больше и их число кратно 72 — будет несколько страниц с таблицами 3x3.

Основную работу выполняет программа на Clojure, которая парсит TXT-файлы и выдает "на гора" соответствующим образом составленный LaTeX-овский исходник. Эта программа вызывается скриптом make-cards.sh, который сначала проверяет, чтобы в TXT-файлах было достаточно слов, затем запускает программу на Clojure, а после натравливает на получившийся TeX-файл pdflatex.

В итоге получается вот такая таблица. Таблицы с именами и фамилиями не будет, потому что в составленном мною файле people.txt недостаточно имен.

Alias cards

Репозиторий программы: https://github.com/h0rr0rrdrag0n/cs-alias-clj

clojure