Ряд, столбец, диагональ, блок


13

Напишите квадратный блок кода, который имеет N символов шириной и N символов высоты, для некоторого положительного целого числа N.

Например, ваш N может быть 5, а блок выглядит так:

ThisI
sMy5B
y5Cod
eBloc
kOkay

Этот блок должен вести себя следующим образом:

  1. Когда верхняя строка извлекается и запускается как программа, точный текст rowнеобходимо распечатать на стандартный вывод.

    Например, ThisIнапечатал бы row.

  2. Когда левый столбец извлекается и запускается как программа, точный текст colнеобходимо распечатать на стандартный вывод.

    Например, Tsyekнапечатал бы col.

  3. Когда главная диагональ от верхнего левого угла до правого нижнего угла извлекается и запускается как программа, точный текст diaдолжен быть напечатан на стандартный вывод.

    Например, TMCoyнапечатал бы dia.

  4. Когда весь блок запускается как программа, включая новые строки (с дополнительным завершающим символом новой строки), точный текст blkдолжен быть напечатан на стандартный вывод.

    Например,

    ThisI
    sMy5B
    y5Cod
    eBloc
    kOkay
    

    будет печатать blk.

Детали

  • Все четыре программы работают на одном языке программирования.
  • N 2 символа в исходном блоке могут быть чем угодно, кроме конца строки .
  • Если у вашего языка нет стандартного вывода, вы можете использовать другой общий метод вывода. Это должен быть один и тот же метод во всех четырех программах.

Представление, исходный блок которого содержит наименьшее количество отдельных символов (не считая перевода строки), выигрывает. Tiebreaker переходит к представлению с меньшим N.


Учитывая, что, безусловно, есть решение в каком-то двухсимвольном эзотерическом языке, я думаю, что это станет решением, чтобы втиснуть это в наименьшее N.
xnor

@xnor Вероятно. Хотя однозначный ответ от Lenguage не вне возможного. Тем не менее, этот метод подсчета очков более интересен, чем первый наименьший выигрыш N.
Увлечения Кэлвина

Как может работать Lenguage, если программы строк и столбцов имеют одинаковую длину?
xnor

@xnor Ах, ты прав. Это не сработает.
Увлечения Кэлвина

Могут ли неблокированные программы заканчиваться завершающим переводом строки?
jimmy23013

Ответы:


6

> <> (Рыба) , 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-частей):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

Размер кода составляет 4 МБ, код доступен здесь . (Нет проблем запустить его.)

Программа генератора python3 доступна здесь .


14

CJam, 13 12 уникальных персонажей, N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

Так прямо, как это возможно

ОБНОВЛЕНИЕ : преобразовано пространство в a(без операции в этом случае), как указано в Runner112

Попробуйте онлайн здесь


2
Каждый пробел можно превратить в персонажа, например, aуменьшить количество уникальных персонажей до 12, верно?
Runer112

@ Runer112 Черт! Спасибо за чаевые!
Оптимизатор

8

Баш, 19 уникальных персонажей, N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • Первый ряд есть trap echo\ row exit. Это приводит echo rowк выполнению при выходе из скрипта (только первая строка)
  • Первый столбец ttt=t echo col
  • Диагональ есть t=tt echo dia
  • Полный блок работает путем отмены обработчика EXIT, установленного в первой строке, а echo blkзатем выхода.

1
Вы можете использовать строчные буквы, exitчтобы уменьшить количество уникальных символов на 4. Вы также можете переместить exitкоманду на следующую строку и заменить все точки с запятой пробелами.
jimmy23013

6

> <> , 14 уникальных персонажей, N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

Довольно просто в 2D-языке. Единственная сложность в том, что нам нужно \различать rowи blk.


Рандомные заметки, p1-которые дадут решение с тремя символами , но это будет очень неприятно генерировать (и, вероятно, не победит).
Sp3000

3

Brainfuck, 2 уникальных персонажа, N = 378

С возможным небольшим перегибом правил.

Программа немного большая, так что вот ссылка на нее на Pastebin .

В row, colи diaпрограммы просты. Они просто увеличивают байтовую ячейку до тех пор, пока не будет достигнут правильный код ASCII, а затем выводят. Если письмо уже прошло, оно увеличивается до тех пор, пока ячейка не переполнится, поэтому она может начать снова с 0.

В blkпрограмме происходит небольшое изменение правил. Для того чтобы напечатать «точный текст blk», как было задано в задании, используются символы возврата (код ASCII 8), для которых требуется отображающая консоль / терминал для его поддержки. Всякий раз, когда ошибочные значения из row/ col/ diaпрограмм печатаются, я гарантирую, что они удаляются путем вывода нескольких контрольных кодов возврата. Для упрощения я гарантировал, что все ошибочные значения, выводимые в одной точке, являются частью диапазона ASCII для печати.


2

C (gcc) , 26 уникальных символов, N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

Попробуйте онлайн!


1

Рубин, 24 уникальных символа, N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

Попробуйте онлайн!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.