Система циклических тегов - это крошечная, полная по Тьюрингу вычислительная модель, состоящая из двухсимвольного алфавита (я буду использовать {0,1}
), конечного непустого циклического списка произведений , состоящих из этих двух символов, и неограниченного слова, которое также состоит из эти два символа.
На каждом этапе:
- первый элемент в слове удален
- если это было
0
текущее производство пропускается - если это было
1
текущее производство , добавляется в конце слова . - следующее производство становится активным. Если это было последнее производство, вернитесь к первому.
Система останавливается, когда слово становится пустым.
Пример (из Википедии):
Productions: (010, 000, 1111)
Initial word: 11001
Generation Production Word (before) Word (after)
0 010 11001 → 1001010
1 000 1001010 → 001010000
2 1111 001010000 → 01010000
3 010 01010000 → 1010000
4 000 1010000 → 010000000
5 1111 010000000 → 10000000
6 010 10000000 → 0000000010
7 000 0000000010 → 000000010
8 1111 000000010 → 00000010
9 010 00000010 → 0000010
Ваша задача, если вы решите принять ее, - написать программу или функцию, которая принимает:
- список производств,
- начальное слово и
- поколение,
и печатает или возвращает слово в этом поколении.
Например,
cyclic_tag(
prod=[[0,1,0],[0,0,0],[1,1,1,1]],
word=[1,1,0,0,1],
gen=4) => [1,0,1,0,0,0,0]
Детали реализации:
Алфавит не имеет значения. Вы можете использовать
0
и1
,True
иFalse
,T
иNIL
,A
иB
, или, даже1
и0
, или что- либо еще , что вы можете придумать, если вы последовательны. Все входные и выходные данные должны использовать один и тот же алфавит, и вы должны указать, для чего вы используете и для0
чего1
.Длина слова должна быть теоретически неограниченной. То есть вы не можете жестко задавать максимальную длину слова. Если я запускаю вашу программу на идеальном компьютере с бесконечным объемом памяти, ваша программа должна теоретически использовать ее. (Вы можете игнорировать ограничения вашего интерпретатора / компилятора.)
Если данная система останавливается до достижения данного поколения, вы должны вернуть или напечатать пустое слово.
Пустое производство существует, и вы должны быть в состоянии справиться с этим. Если вы пишете полную программу, ваш ввод / вывод также должен уметь ее обрабатывать.
Редактировать : изначально я хотел, чтобы поколение 0
было самим входным словом, а поколение 1
- результатом первого шага. То есть я намеревался вернуть вам столбец перед . Тем не менее , поскольку я не достаточно ясно сформулировал это, я приму оба варианта ; для каждого поколения вы можете возвращать значение в столбце « до» или « после» . Вы должны указать, что следите за колонкой после , если вы это делаете. Вы также должны быть уверены, в какой колонке вы выбираете.
Я присуждаю самый маленький кодекс через неделю (27.10.2014).
источник
Ответы:
GolfScript (от 17 до 19 байт в зависимости от формата ввода и принятого формата вывода)
18 байт:
Принимает вход в виде
[1 1 0 0 1] [[0 1 0] [0 0 0] [1 1 1 1]] 4
и выдает выходные данные в форме[1 0 1 0 0 0 0]
. (Может быть 17 байтов без последнего,`
если вывод как1010000
приемлемый).Онлайн демо
19 байт:
Принимает участие в форме
"11001" ["010" "000" "1111"] 4
.Онлайн демо
рассечение
Кредит Martin Büttner «s решение CJam для идеи создания списка постановок повторения и усечения.
источник
Хаскелл,
555351это использует
True
как1
иFalse
как0
. пример выполнения:источник
CJam,
313028272418 байтЭто определяет блок (самый близкий к функции), который ожидает, что вход будет находиться в стеке, как это
Он также оставит массив
0
s и1
s в стеке.Проверьте это здесь. Вставьте ввод в первую строку, код в третью строку и добавьте a,
~
чтобы фактически оценить блок. НапримерЕсли вывод не должен иметь ту же форму, что и ввод
Объяснение:
Конечное состояние слова остается в стеке.
Спасибо Питеру Тейлору за то, что он заставил меня вернуться к этому.
источник
l~{_,g{('1=@(:Pa+@@P*+}*}*\;
28 и все еще возможности для улучшения (особенно(:P
часть), но время для обеда:P
меня это тоже раздражает: Dl~{_,g{(si@(:Pa+@@P*+}*}*\;
: 27 и после изучения, на:P
самом деле эффективен: P_,g
также могут быть заменены,_!!
но одинаковыми байтами._{...}{}?
тогда.Mathematica,
84 8077 символовПример:
источник
Пиф 22
Требуются все 3 аргумента в качестве отдельных входных данных.
Принимает аргументы, такие как:
Объяснение:
Python 2 - 61
67 91 105 124Симпатичный Джо-Базовый ответ. Предполагается, что пустое производство
[[]]
.Спасибо @xnor за то, что указал на то, что игра в гольф в 2 часа ночи - плохое решение.
Дополнительная благодарность @xnor, которому я, похоже, должен 50% моего балла.
Образец:
источник
g and w
дляx
? Кроме того, я думаю, чтоg*w
должно работать, чтобы дать истинное значение, когда обаg
ненулевые иw
непустые.if x else w
. Неx
всегда будет правдой, потому что этот код только выполняетсяif x
, или я что-то упустил?and
/or
и вращениемp
вместо увеличенияn
:c=lambda p,w,g:g*w and c(p[1:]+p[:1],w[1:]+w[0]*p[0],g-1)or w
Javascript ES6 - 88 байт
Выглядит жутко похоже на ответ Фрая, который только что появился в моем браузере. (Нет копирования, я торжественно клянусь.)
Казалось бы, он пошел по маршруту массива, а я по маршруту string / regex.
Expanded:
Пример вывода
Теперь смотрите, как появляются языки гольфа и расправляетесь с нами обоими. : D
источник
n
. Великие умы, а? : D