J, 126 124 121 119 116 115 113 105 116 115 112 символов
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Принимает ввод с клавиатуры. Пример:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1[(s=:[,.~,.)9!:7'\=/<=>/=\|='
6302715408
|\==============================================================/|
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|| || (__) (__) (__) || (__) || (__) (__) || ||
|| || || || || || || || || || || ||
|| (__) || || || (__) || (__) || || (__) ||
|<==============================================================>|
|| (__) (__) || (__) (__) (__) || (__) || (__) ||
|| || (__) || (__) (__) || || (__) || (__) ||
|| || (__) || || || || || (__) || (__) ||
|| || || || || || || || (__) || || ||
|| || || || || || || || || || || ||
|| || || (__) || || || (__) || (__) || ||
|| (__) || (__) || || (__) (__) || (__) || ||
|| (__) || (__) (__) (__) (__) (__) || (__) || ||
|| (__) (__) (__) (__) (__) (__) (__) || (__) (__) ||
|| (__) (__) (__) (__) (__) (__) (__) (__) (__) (__) ||
|/==============================================================\|
Основным трюком здесь является злоупотребление боксом J путем переопределения используемых им символов. Он использует глобальный параметр -9!:7
. Может быть, есть место для дальнейшего игры в гольф, но, честно говоря, я был просто рад получить что-то работающее, что должно компенсировать мою последнюю попытку в этом вопросе .
Вписывается в твит с достаточным количеством персонажей, чтобы сказать «Газ сделал это» :-).
Изменить: 3 символа сбережений из-за заимствования 2 6$' || (__)'
у Джесси Милликана ответа .
Дальнейшее редактирование: Потерянные 11 символов, добавляющие лишние пробелы с обеих сторон, которых я не заметил, отсутствовали.
Объяснение:
Код состоит из трех основных разделов:
1) Настройка
[(s=:[,.~,.)9!:7'\=/<=>/=\|='
Это само по себе в двух частях.
9!:7'\=/<=>/=\|='
переопределяет символы, которые J будет использовать для отображения полей. Бокс J обычно выглядит так:
2 2$<"0[1 2 3 4
┌─┬─┐
│1│2│
├─┼─┤
│3│4│
└─┴─┘
но после переопределения это выглядит так:
2 2$<"0[1 2 3 4
\===/
|1|2|
<===>
|3|4|
/===\
(s=:[,.~,.)
определяет глагол, который я собираюсь использовать пару раз позже. Это оказывается лучшим местом, чтобы объявить это. Он принимает символ слева и массив символов справа и помещает массив между символом. Например:
3 5$'abcdefghijklmno'
abcde
fghij
klmno
'-' s 3 5$'abcdefghijklmno'
-abcde-
-fghij-
-klmno-
Финал [
просто служит для отделения установки от следующей части.
2) Ввод и представление
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
".,.1!:1[1
берет ввод с клавиатуры и разделяет его на отдельные цифры:
".,.1!:1[1
314159
3 1 4 1 5 9
((i.5)</5|])
создает нули и единичное представление нижней части счёта:
((i.5)</5|]) 3 1 4 1 5 9
1 1 1 1 0 1
1 0 1 0 0 1
1 0 1 0 0 1
0 0 1 0 0 1
0 0 0 0 0 0
|:@(1,.<&5)
создает нулевые и единичные представления верхней части счёта:
|:@(1,.<&5) 3 1 4 1 5 9
1 1 1 1 1 1
1 1 1 1 0 0
Эти две части упакованы вместе, используя ;
:
(|:@(1,.<&5);((i.5)</5|])) 3 1 4 1 5 9
\=======================/
|1 1 1 1 1 1|1 1 1 1 0 1|
|1 1 1 1 0 0|1 0 1 0 0 1|
| |1 0 1 0 0 1|
| |0 0 1 0 0 1|
| |0 0 0 0 0 0|
/=======================\
Затем ящики помещают друг на друга, чтобы сформировать основу счёта, давая:
,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
/===========\
3) Выход
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>
&.>
означает, что то, что следует, будет работать на обеих коробках по очереди.
(,-.)
это ловушка, которая отменяет ввод и затем добавляет его в конец оригинала:
2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
(,-.) 2 5$1 0 1 0 1
1 0 1 0 1
1 0 1 0 1
0 1 0 1 0
0 1 0 1 0
Это действительно часть представления, но для целей игры в гольф лучше иметь это в этом разделе. Применяется к предыдущему входу:
(,-.)&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\===========/
|1 1 1 1 1 1|
|1 1 1 1 0 0|
|0 0 0 0 0 0|
|0 0 0 0 1 1|
<===========>
|1 1 1 1 0 1|
|1 0 1 0 0 1|
|1 0 1 0 0 1|
|0 0 1 0 0 1|
|0 0 0 0 0 0|
|0 0 0 0 1 0|
|0 1 0 1 1 0|
|0 1 0 1 1 0|
|1 1 0 1 1 0|
|1 1 1 1 1 1|
/===========\
[:,.(_6[\' || (__)'){~
Нули и единицы теперь используются для выбора строки для представления бусинки или ее отсутствия:
([:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\====================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<====================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/====================================\
Но теперь, как сказал мне Говард, по обеим сторонам бусинок осталось мало места. Поэтому мы используем предопределенный s
глагол, чтобы поместить содержимое каждого блока между двумя столбцами пробелов:
(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
\======================================/
| (__) (__) (__) (__) (__) (__) |
| (__) (__) (__) (__) || || |
| || || || || || || |
| || || || || (__) (__) |
<======================================>
| (__) (__) (__) (__) || (__) |
| (__) || (__) || || (__) |
| (__) || (__) || || (__) |
| || || (__) || || (__) |
| || || || || || || |
| || || || || (__) || |
| || (__) || (__) (__) || |
| || (__) || (__) (__) || |
| (__) (__) || (__) (__) || |
| (__) (__) (__) (__) (__) (__) |
/======================================\
Сделав это, все, что осталось, - это преобразовать это в строку, используя ее, ":
чтобы мы могли поместить ее между двумя столбцами |
:
'|'s":(' 's[:,.(_6[\' || (__)'){~(,-.))&.>,.(|:@(1,.<&5);((i.5)</5|]))".,.1!:1[1
314159
|\======================================/|
|| (__) (__) (__) (__) (__) (__) ||
|| (__) (__) (__) (__) || || ||
|| || || || || || || ||
|| || || || || (__) (__) ||
|<======================================>|
|| (__) (__) (__) (__) || (__) ||
|| (__) || (__) || || (__) ||
|| (__) || (__) || || (__) ||
|| || || (__) || || (__) ||
|| || || || || || || ||
|| || || || || (__) || ||
|| || (__) || (__) (__) || ||
|| || (__) || (__) (__) || ||
|| (__) (__) || (__) (__) || ||
|| (__) (__) (__) (__) (__) (__) ||
|/======================================\|