Соревнование
Вы должны написать полную программу, которая берет семь чисел из STDIN и печатает двумерную историю клеточного автомата (CA) в STDOUT. Это код гольф.
Форматирование ввода На входе будет семь целых чисел / строк, разделенных запятыми. Первое число - это номер правила в соответствии с кодом Wolfram (стандартное имя для каждого правила). Второе - начальная начальная конфигурация. Третий и четвертый описывают, какой шаблон и сколько раз он должен быть добавлен слева от начальной конфигурации. в качестве дополнения. Пятый и шестой делают то же самое для правой стороны. Последнее число - это число поколений, которые запускают симуляцию.
Итак, пример ввода 90,11,0,4,0,4,5
. Это должно сказать вашей программе, что вы используете правило 90 . Он также должен сообщить программе, что вы хотите, чтобы начальная конфигурация была 11
со строкой, 0
добавленной 4 раза к обоим концам, поэтому фактический начальный шаблон - это 0000110000
. Это также говорит вашей программе запускать эту симуляцию в течение 5 поколений.
Выходные данные Ваша программа должна печатать весь массив ячеек каждого поколения (разделенных новыми строками), чтобы выходные данные представляли собой диаграмму пространства-времени ЦС. Для каждого поколения состояние каждой ячейки определяется ее состоянием и состояниями ячеек непосредственно слева и справа в соответствии с правилом, предоставленным в качестве входных данных. Симуляция должна обтекать края. Первое, что должно быть напечатано, это начальный массив как gen. 0.
Ввод 90,11,0,4,0,4,5
должен привести к следующему выводу как можно точнее.
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
Обратите внимание, что начальное состояние не входит в пять поколений. Также обратите внимание, что симуляция оборачивается по краям.
Больше примеров
вход:
184,1100,01,2,01,1,4
выход:
0101110001
1011101000
0111010100
0110101010
0101010101
вход:
0,1011,1,0,0,1,2
выход:
10110
00000
00000
Больше информации о том, как работает 1D CA и как они пронумерованы
источник
Ответы:
Golfscript,
77 7370 символовСпасибо @Howard, который указал, как сохранить 4 символа.
источник
48-
->1&
и я думаю, что еще три. Вы можете опустить)
перед блоком (не увеличивать счетчик) и, следовательно, также сохранить последние два всплывающих окна.APL (153 символа)
И в менее читаемой, немного более короткой форме:
Пример:
Я уверен, что есть возможности для улучшения (я даже обнаружил несколько изменений при написании этого поста!), Но некоторые из них могут повлечь за собой фундаментальные изменения, и я не могу больше смотреть на APL. Используемый здесь вариант APL - Dyalog APL .
источник
Рубин,
165159 знаковИзменить: я нашел несколько мест для небольших улучшений.
Пример выполнения:
источник
С
303 305 301 294292305 Редактировать: упс. Забыл, что
calloc()
требуется два аргумента. Это было взрывом на большем входе.301 Редактировать: Ах, ха! Использовал мою
calloc()
бу-бу, чтобы сохранить еще 2 байта, увеличив размер блока запрошенной памяти.294 Редактировать: Сломал 300! Устранен один из
strcat()
s и подправлен несколько петель. Нужно использовать максимальный хруст, который так же весело, как и использовать.292 Редактировать: не требуется
+2
выделение памяти.Я использовал ответ luser droog в качестве базовой идеи, но изменил алгоритм обтекания, а также много настроек и вычленения констант.
источник
C,A,
! :)brk()
? тогдаp=s+C+1;
где-то.+++
!%[01]
на%s
! -9 (... много лет спустя)C (
487484418 с удаленными пробелами)* Отбросил 66 с помощью JoeFish *
машинопись
источник
int
переменные глобальными и удалив#include
:r,A,B,C,n,i,j; main(){char *s...
for
циклах:for(;A--;)strcat(s,a);
A
иC
позже, так что вам не нужно декларироватьi
илиB
вообще.p=malloc((C=strlen(s))+1); --C; strcpy(p,s); for(A=0;A<n;A++){
Извините, я сейчас остановлюсь :)--C;
:p=malloc((C=strlen(s)-1)+2);
. Я думаю, что код игры в гольф веселее, чем придумывать его в первую очередь!#include
так какscanf
это вариативно. Но это, вероятно, нормально, так как он вызывается только один раз. ... Моя старая машина умерла вчера, и я все еще устанавливаю Cygwin. Я включу эти изменения, как только смогу их протестировать. Благодарность!