Напишите квадратный блок кода, который имеет N символов шириной и N символов высоты, для некоторого положительного целого числа N.
Например, ваш N может быть 5, а блок выглядит так:
ThisI
sMy5B
y5Cod
eBloc
kOkay
Этот блок должен вести себя следующим образом:
Когда верхняя строка извлекается и запускается как программа, точный текст
row
необходимо распечатать на стандартный вывод.Например,
ThisI
напечатал быrow
.Когда левый столбец извлекается и запускается как программа, точный текст
col
необходимо распечатать на стандартный вывод.Например,
Tsyek
напечатал быcol
.Когда главная диагональ от верхнего левого угла до правого нижнего угла извлекается и запускается как программа, точный текст
dia
должен быть напечатан на стандартный вывод.Например,
TMCoy
напечатал быdia
.Когда весь блок запускается как программа, включая новые строки (с дополнительным завершающим символом новой строки), точный текст
blk
должен быть напечатан на стандартный вывод.Например,
ThisI sMy5B y5Cod eBloc kOkay
будет печатать
blk
.
Детали
- Все четыре программы работают на одном языке программирования.
- N 2 символа в исходном блоке могут быть чем угодно, кроме конца строки .
- Если у вашего языка нет стандартного вывода, вы можете использовать другой общий метод вывода. Это должен быть один и тот же метод во всех четырех программах.
Представление, исходный блок которого содержит наименьшее количество отдельных символов (не считая перевода строки), выигрывает. Tiebreaker переходит к представлению с меньшим N.
источник
Ответы:
> <> (Рыба) , 3 уникальных персонажа (N = 2000)
Код использует
1
и-
для помещения произвольных чисел в стек иp
для (самостоятельного) изменения кода на основе верхних 3 чисел в стеке. Например, установка!
в положение0 0
будет выглядеть как003b*p
в нормальном> <> и сp1-
ним становится111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p
.После модификации указатель инструкции (IP) оборачивается вокруг кода и запускает измененную часть. В случае «блока» IP перенаправляется для дальнейшей модификации (затем переадресовывается обратно), чтобы отличаться от случая «строки». В случае «строки» происходит такое же перенаправление, но между ними нет кода, поэтому они не имеют никакого эффекта.
Окончательно сгенерированные коды для 4 случаев (без учета неизмененных
p1-
частей):Размер кода составляет 4 МБ, код доступен здесь . (Нет проблем запустить его.)
Программа генератора python3 доступна здесь .
источник
CJam,
1312 уникальных персонажей, N = 5Так прямо, как это возможно
ОБНОВЛЕНИЕ : преобразовано пространство в
a
(без операции в этом случае), как указано в Runner112Попробуйте онлайн здесь
источник
a
уменьшить количество уникальных персонажей до 12, верно?Баш, 19 уникальных персонажей, N = 19
trap echo\ row exit
. Это приводитecho row
к выполнению при выходе из скрипта (только первая строка)ttt=t echo col
t=tt echo dia
echo blk
затем выхода.источник
exit
чтобы уменьшить количество уникальных символов на 4. Вы также можете переместитьexit
команду на следующую строку и заменить все точки с запятой пробелами.> <> , 14 уникальных персонажей, N = 10
Довольно просто в 2D-языке. Единственная сложность в том, что нам нужно
\
различатьrow
иblk
.источник
p1-
которые дадут решение с тремя символами , но это будет очень неприятно генерировать (и, вероятно, не победит).Brainfuck, 2 уникальных персонажа, N = 378
С возможным небольшим перегибом правил.
Программа немного большая, так что вот ссылка на нее на Pastebin .
В
row
,col
иdia
программы просты. Они просто увеличивают байтовую ячейку до тех пор, пока не будет достигнут правильный код ASCII, а затем выводят. Если письмо уже прошло, оно увеличивается до тех пор, пока ячейка не переполнится, поэтому она может начать снова с 0.В
blk
программе происходит небольшое изменение правил. Для того чтобы напечатать «точный текстblk
», как было задано в задании, используются символы возврата (код ASCII 8), для которых требуется отображающая консоль / терминал для его поддержки. Всякий раз, когда ошибочные значения изrow
/col
/dia
программ печатаются, я гарантирую, что они удаляются путем вывода нескольких контрольных кодов возврата. Для упрощения я гарантировал, что все ошибочные значения, выводимые в одной точке, являются частью диапазона ASCII для печати.источник
C (gcc) , 26 уникальных символов, N = 29
Попробуйте онлайн!
источник
Рубин, 24 уникальных символа, N = 17
Попробуйте онлайн!
источник