Skip to content

PUNK0 - A FUNCTION COMPOSITION CARD GAME

https://punkx.org/punk0/

Что-то вроде UNO для разработчиков, но со стратегией.

Выход каждой карты — это вход для другой карты.

DeckDeck 1Deck 2Deck 3

Купить сейчас: €5,00 EUR [ распродано ]

  • распечатайте сами: punk0-cards.pdf, punk0-box.pdf, punk0-box-cc.pdf (лицензия CC BY 4.0)
  • код: punk0
  • автор: github.com/jackdoe
  • соавтор: Jackie (помогала с тестированием и идеями)
  • контакт: punkx@fastmail.com
  • лицензия: CC BY 4.0, но изображение обложки лицензировано по лицензии Shutterstock до 500 000 экземпляров, поэтому если вы печатаете такое количество, пожалуйста, используйте версию с лицензией CC BY 4.0

Описание игры

На каждой карте изображена функция, написанная на 4 языках: C, Go, Python, JS. Игра начинается со списка [0, 0, 0, 0]. Вы должны сыграть либо ту же функцию на другом языке, либо любую функцию на том же языке, что и предыдущая карта. Каждая карта принимает список и возвращает список. Также есть карты punk0, punk1, punk2, punk3, которые указывают, что нужно сделать в зависимости от соответствующего индекса списка.

Пример: если список становится [0, **-2**, 1, 3], и вы играете карту punk1(x), которая работает с индексом 1 списка (в данном случае значение -2), вы должны сыграть ещё 2 валидные карты за один ход или взять карты из колоды.


ПРАВИЛА

  • Стартовый список: [0, 0, 0, 0]
  • Каждый игрок получает 8 карт, самый молодой игрок ходит первым и может сыграть любую карту.
  • Игроки могут сыграть либо ту же функцию на другом языке, либо любую функцию на том же языке, что и предыдущая карта.
  • Игроки обязаны сыграть подходящую карту, если она у них есть; в противном случае они берут одну карту из колоды.
  • Если игроку требуется взять одну или несколько карт в результате действия карты punk() или потому что у него нет подходящей карты, он должен сыграть одну из взятых карт, если она является валидной.
  • Первый игрок, избавившийся от всех карт, выигрывает.

Облегчённый режим: играйте так, будто инкремент/декремент, rotate_left/rotate_right, punk0/punk1/punk2/punk3 — это одна и та же функция.


КАРТЫ PUNK


  • Карта определяет следующее действие на основе первого элемента (индекс 0) списка.

    • Если значение первого элемента равно , следующий игрок пропускает ход.
    • Если значение , текущий игрок должен сыграть ровно N карт за один ход, где N — абсолютное значение элемента. Если он не может сыграть N карт, он берёт карты из колоды.
    • Если значение , следующий игрок должен взять N карт из колоды, где N — значение элемента, если только у него нет карты punk0, в этом случае он может передать штраф следующему игроку.

  • То же самое, что punk0(), но используется соответствующий индекс списка: punk1 — индекс 1 и так далее.


Пример раунда

Example

Краткое объяснение игры:

Пример партии:


Я работал над этой игрой в первую очередь для того, чтобы показать дочери, что знание множества языков программирования не так важно — главное понимать, как всё устроено, что они представляют и особенно как компьютер их воспринимает. Также чтобы начать формировать интуицию относительно вращения и манипуляции участками памяти.

Символы и цвета

  • Демоны на обложке представляют 4 языка: C — череп, Go — маска, а две рыбы — JS и Python. Мне кажется забавным, что всё, что мы делаем, вращается вокруг C: чем дальше вы удаляетесь (например, PyTorch), тем сильнее вас тянет обратно. Может быть, однажды мы наберём достаточную скорость для побега и создадим новые парадигмы, которые не будут просто C с добавлением «сахара».
  • Кельтский узор на задней стороне коробки символизирует, как всё в компьютерных науках взаимосвязано, и как знания и понимание можно строить разными путями (Richard Feynman - The Relation of Mathematics to Physics).
  • Цвета карт:
    • C: я постарался воссоздать стиль Borland C++ 3.1 для DOS — это очень близко моему сердцу, я считаю, что это, возможно, лучшая среда разработки, которой я когда-либо пользовался.
    • Go: использованы цвета ACME, но с добавлением цвета для ключевых слов. Хотя я не использую подсветку синтаксиса, я думаю, людям будет странно видеть код вообще без цветов.
    • JS: вдохновлено тёмной темой HackerRank.
    • Python: вдохновлено светлой темой GitHub.
  • Неизменяемость: все функции возвращают новый список — мне казалось странным, если бы карты мутировали входной список.

Благодарности

Это, возможно, 30-я версия игры, и она действительно интересная (на мой взгляд). Мы напечатали и протестировали множество версий, и я хочу поблагодарить друзей, которые помогли мне в тестировании: Ronen, Peter, Maarten, Angel, Mattias, Tarek, Deo, Evanji, Melore, Aymeric и многих других, кого я мучил скучными версиями 😄

Вот некоторые из неудачных попыток:

Attempts

P.S.: Для создания карт не использовались LLM, но я применял ChatGPT, чтобы помочь переформулировать правила, так как английский — не мой родной язык, и мне бывает сложно выражать идеи, особенно когда пространство так ограничено.

Контакты: bystrovno@basealt.ru