Wireworld - это сотовый автомат, который был разработан, чтобы напоминать электроны, протекающие через провода. Его простая механика позволяет строить цифровые схемы. Это даже позволило построить целый компьютер .
Ваша миссия - создать самую короткую реализацию Wireworld на выбранном вами языке.
Каждая ячейка в сетке имеет одно из четырех состояний. Четыре состояния являются «пустыми», «медными», «электронными головками» или «электронными хвостами».
- Пустая ячейка всегда будет оставаться пустой ячейкой
- Голова электрона всегда станет хвостом электрона
- Хвост электрона всегда станет медью
- Медная ячейка станет электронной головкой, если ровно один или два из ее восьми соседей являются электронными головками, в противном случае она останется медью
Этот конкурс будет иметь стиль, аналогичный конкурсу Shortest Game of Life , но с некоторыми изменениями.
- Сетка должна быть не менее 40 на 40 ячеек
- Края сетки НЕ должны обтекать (не тор). Относитесь к клеткам вне поля как к постоянно «пустым».
- У пользователей должна быть возможность ввести свою начальную конфигурацию.
- Смотреть на пустые экраны не весело. Программа должна визуально отображать симуляцию во время ее работы.
Это код гольф, выигрывает наименьшее количество байтов.
источник
ALPACA, 82 символа
ALPACA - это язык, специально разработанный для клеточных автоматов.
о ничто; с - проводник; е - электрон; т - электронный хвост.
источник
GolfScript (
125 120 105100 символов)Обратите внимание, что я считаю
\033
один символ каждый, потому что они могут быть заменены буквальнымESC
символом. При этом используются управляющие коды ANSI, поэтому используется совместимый tty. Также обратите внимание, что кадры печатаются, начиная с входной сетки.Существует некоторое совпадение с Генерировать сетку сумм , которая также использует окрестности Мура.
Кодировка: пробел =>
; электронная голова =>
i
; электронный хвост =>`
; медь =>X
.Пауза между итерациями - это время, необходимое для расчета 46656 46656 . Переключение
6.?.?
на другое выражение позволяет вам контролировать скорость; следующий самый медленный для того же числа символов7.?.?
, что значительно медленнее (результат в 22 раза больше, и это не линейный расчет сложности).Для теста я использую
из розыгрыша кода Wireworld .
источник
Python
371341 символДа, это не так коротко, но у него есть интерактивный графический интерфейс!
Инструкции:
Нажмите левой кнопкой мыши, чтобы разместить провод
Нажмите правой кнопкой мыши, чтобы очистить
Нажмите среднюю кнопку мыши, чтобы разместить головку электрона
Нажмите за пределами осей, чтобы активировать автомат
источник
(x>0)&(x<3)
->(0<x<3)
. :)Python (
243214)Пытался сделать пометку между юзабилити и символами. Сетка 40х40. Ввод дан на стандартный ввод. Голова
h
электрона, хвост электронаt
, медьc
, все остальное пусто.Цикл while (строка 3) без сжатия (не будет работать, если помещен в код):
источник
g[e]='h'if(t=='c')&...else't'if i=='h'else'c'if i=='t'else i
. Не уверен, что это работает точно так, как есть, но что-то в этом роде должно работатьС
355347300294 символаРедактировать: понял, что мне не нужно
feof()
Редактировать: Сохранено 47 символов! Убрал сон, избавился практически от всех брекетов, объединил много операций.
Изменить: последний сегодня, так как я сломал 300 символов. Изменено
printf
наputs
, нашли милые маленькие оптимизации с первым сравнением.С не очень хорошо справляется с такой проблемой, но играть в гольф - это весело. Это довольно грубая реализация, но я хотел посмотреть, как далеко я смогу это сделать.
Ввод представляет собой текстовый файл с именем
i
. Он содержит представление начального состояния,*
для меди,+
для головки электрона,-
для хвоста электрона, пространства для пустых ячеек. Я использую ворота XOR со страницы вики для тестирования.источник
cond?43:42
быть написано42+(cond)
? И я уверен, чтоr=s[j][i++];*p=r==43?45:r;if(r==45)*p=42;
может быть уменьшен до,r=s[j][i++];*p=r==43?45:r==45?42:r;
если не доr=s[j][i++]-43;*p=!r?45:r==2?42:r;
Питон,
234218 символовВы вводите доску как три списка комплексных чисел, представляющих координаты ячеек меди (которые должны включать в себя списки голов и хвостов), голов и хвостов. Вот пример:
Обратите внимание, что мы
eval
вводим, поэтому вы можете использовать произвольно сложные выражения для списков комплексных чисел.источник
QBasic, 309 байт
Предупреждение: версия для гольфа не является удобной для пользователя: она имеет странный метод ввода, работает как бесконечный цикл и не имеет никакой задержки (таким образом, работает в некоторых системах слишком быстро). Запускайте его, только если вы знаете, как завершить программу в вашей среде QBasic. Рекомендуется версия без золота (см. Ниже).
Для запуска укажите в строке ввода ширину
w
и высоту вашей конфигурацииh
. 1 Затем введитеw*h
однозначные коды для ячеек (двигаясь слева направо, затем сверху вниз) с помощью0
= пусто6
= провод7
= сигнальная головка1
= сигнальный хвостКак только вы вошли во все ячейки, начнется симуляция (и будет продолжаться до тех пор, пока вы не убьете программу).
Ungolfed
Более удобная версия. Чтобы изменить макет, измените
DATA
операторы в конце.Код использует
POINT
функцию, которая считывает значение цвета пикселя с экрана. Это означает, что нам не нужно хранить ячейки отдельно в виде массива. Чтобы убедиться, что все ячейки обновляются одновременно, мы выполняем обновления на второй «странице». Мы можем переключать активную страницу, используя версиюSCREEN
оператора, и копировать содержимое одной страницы на другую, используяPCOPY
инструкцию.1 Максимальные значения ширины и высоты зависят от того, какой режим экрана используется. В
SCREEN 9
, ширина может быть до 638 и высотой до 348.SCREEN 7
имеет меньшее разрешение (максимальный размер конфигурации 318 на 198), но пиксели больше и , таким образом , легче увидеть (на DOS QBasic или эмулятор DOSBox - к сожалению , только Qb64 дает меньшее окно).Пример запуска
Неуправляемая версия на archive.org , с режимом экрана 7:
источник