Цель этого задания - выпустить ASCII-версию обложки этого великолепного альбома рок-группы Pink Floyd.
Кирпичные узлы сделаны из символов _
и |
. Кирпичи имеют ширину 7 и высоту 2 символа, исключая перекрестки. Таким образом, основной единицей, включая соединения, является:
_________
| |
| |
_________
Каждый ряд кирпичей смещен на половину ширины кирпича (4 символа) относительно предыдущего ряда:
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
________________________________________
| | | | |
| | | | |
Стена параметризована следующим образом. Все параметры измеряются в символах, включая соединения:
- Горизонтальное смещение первого ряда
F
. Это расстояние между левым полем и первым вертикальным соединением самого верхнего ряда. (Помните также относительное смещение между строками в половину кирпича). Его возможные значения0
,1
, ...,7
. - Общая ширина ,
W
. Это включает в себя соединения. Его значение является положительным целым числом. - Общая высота ,
H
. Это включает в себя соединения. Его значение является положительным целым числом.
Вершина стены всегда совпадает с вершиной ряда. Дно может быть неровным (если общая высота не кратна 3
). Например, вот выход для 6
, 44
, 11
:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
и визуальное объяснение параметров:
F=6
......
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
H=11 . | | | | | |
. ____________________________________________
. | | | | |
. | | | | |
. ____________________________________________
. | | | | | |
............................................
W=44
Дополнительные правила
Вы можете предоставить программу или функцию.
Формат ввода, как обычно, гибкий. Вывод может быть через STDOUT или аргумент, возвращаемый функцией. В этом случае это может быть строка с символами новой строки или массив строк.
Пробелы или переводы строки разрешены.
Самый короткий код в байтах побеждает.
Контрольные примеры
Входные данные расположены в указанном выше порядке: горизонтальное смещение первой строки, общая ширина, общая высота.
6, 44, 11:
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
| | | | | |
____________________________________________
| | | | |
| | | | |
____________________________________________
| | | | | |
2, 20, 10:
____________________
| | |
| | |
____________________
| |
| |
____________________
| | |
| | |
____________________
1, 1, 1:
_
1, 2, 3:
__
|
|
3, 80, 21:
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
________________________________________________________________________________
| | | | | | | | | |
| | | | | | | | | |
Ответы:
Pyth,
4327 байтМне нужно играть в гольф тяжело ... счёт слишком постыдный.
Попробуйте уже онлайн.
Формат ввода
Выходной формат
объяснение
источник
C
86858382 байта3 байта сохранены благодаря Линн.
1 байт сохранен благодаря Чарли.
источник
for(i=0;++i<w*h;)
или еслиi
сделано локально (трюк с парамами):for(;++i<w*h;)
i;
наi=1;
и сохраните еще один байт в цикле for.for(i=1;i<w*h;++i)
->for(i=0;++i<w*h;)
сохраняет 1C 92 байта
Вызывать как
b(F, W, H)
.источник
Perl, 63 байта
Считая shebang как 2, ввод берется из стандартного ввода, разделяя пробел.
Пример использования
источник
Haskell, 83 байта
Это определяет троичную инфиксную функцию,
!
которая возвращает список строк. Пример использования:Как это устроено:
источник
JavaScript (ES6),
9695 байтОбъяснение: Создает строку из 7 повторяющихся пробелов плюс
|
шаблон или просто повторяющихся_
s, но по крайней мере достаточно долго, чтобы можно было извлечьw
символы, необходимые для каждой строки. Первые три строки начинаются с позиции,f^7
а затем следующие три строки начинаются с позицииf^3
, поэтому я достигаю этого,переключая бит 2 виспользуя противоположный бит 2 в последних двух строках каждого блока 6 для сохранения 1 байт.f
каждой третьей строке,источник
MATL,
423633 байтаФормат ввода:
nCols
,offset
,nRows
Попробуйте онлайн
Подход здесь заключается в том, что мы устанавливаем «шаблон», который затем индексируем, используя индексы строк (
[1 2 ... nRows]
) и индексы столбцов, смещенные на первый вход ([1 2 ... nCols] - shift
). Благодаря модульной индексации MATL это автоматически приводит к выводу мозаики. Как примечание, чтобы сэкономить место, технически я работаю с транспонированной версией шаблона, а затем просто берут transpose (!
) в конце.Шаблон такой:
источник
Python 2,
9388 байт2-й уровень отступа - вкладкаСохранение нескольких байтов благодаря Leaky Nun и некоторым собственным модификациям, также теперь корректное смещение:предыдущий код:
Та же длина, что и у безымянной лямбды:
источник
F,W,H=input()
print
h/3%2*4
илиh%6/3*4
вместо4*(h%6>3)
print
утверждение в той же строке, что иfor
утверждение"| "
короче, чем("|"+7*" ")
если бы я считал правильноQBasic,
121109 байт(Проверено на QB64)
Спасибо @DLosc за игру в гольф с моим
IF
математическим эквивалентом. Это стоило 12 байтов.Общий метод:
Цикл по каждой ячейке по одному за раз и определить , должен ли он быть
_
,или в
|
зависимости от его расположения.MOD
операторы и логическая логика используются для определения границ кирпичей и того, насколько сильно они должны поражать.Код:
Примечание об использовании:
QBasic ожидает, что вводом будут числа, разделенные запятыми.
источник
IF
/THEN
добавляет еще больше скобок, но сохраняет 12 байтов:?CHR$((y MOD 3>0)*(((x-(y MOD 6>3)*4)MOD 8=F)*92+63)+95);
Java,
149,147,146, 143 байтаGolfed:
Ungolfed:
источник
> 0
которым можно сохранить два символа. И, конечно, вы можете объединить декларации вint y=0,x
.int
передx
и использоватьint y=0,x
в первом цикле for вместо того, чтобы сохранить 2 байта. Кроме того, в настоящее время вы можете изменитьy%3==0
наy%3<1
. (Это не возможно ,...%8==0
чтобы...&8<1
хотя, так как ваша операция может возвращать отрицательное число.)int...o
качестве параметра и измененияw
вo[1]
,h
чтобыo[2]
иo
кo[0]
-3 байт вместо этого.Рубин,
7266 байтСпасибо @Value Ink за 6 байтов!
Простое умножение и нарезка строк.
Работает в Ruby 2.3.0 (синтаксическая ошибка Ideone версии 2.1.
источник
i%6/4*4
вместо(i%6>3?4:0)
и используй?_
вместо'_'
,?|
вместо'|'
.?
одном трюке, и математическая часть действительно впечатляет!((' '*7+?|)*w)[f^7^i%6&4,w]
экономит два байта.Юлия:
150128116108107 байтбежать с аргументами:
julia -e 'o=2;h=18;w=40;include("codegolf.jl")'
Если вы чувствуете, что вызов bash обманывает и вы хотите, чтобы внутри интерпретатора была функция, тогда версия функции составляет 117 байт :)
демонстрация
(Спасибо, @ glen-o за дополнительный совет по экономии байтов!)
источник
h
иw
в кирпичи, а не в символыrepmat([32],6,8)
), а затем переименовав repmat, чтобы побрить другого персонажа (g=repmat;b=g([32],6,8)
и позжеb=g(b,h,w)[1:h,o+1:o+w+1]
). Затем заменитьreinterpret
наmap
. По моим подсчетам, вы сэкономите 9 байтов между этими изменениями.JavaScript,
172168165157147142137 байтисточник
s.repeat(w)
вместоArray(w).fill(s).join``
?Дьялог АПЛ, 29 байт
↑⎕⍴⎕⍴¨a,4⌽¨a←'_',2⍴⊂⌽⎕⌽¯8↑'|'
Тесты:
6 44 11
,2 20 10
,1 1 1
,1 2 3
,3 80 21
⎕
оценивается вклад; как выражение выполняется справа налево, он запрашиваетF
,W
и именноH
в таком порядке¯8↑'|'
является' |'
⎕⌽
вращается, он обрезает F символов с фронта и помещает их в конец строкидругой
⌽
означает обратный'_',2⍴⊂
создает 3 кортежа '_', за которым следуют две отдельные копии строкиa,4⌽¨a←
добавьте 4-вращение всего, что в итоге получается 6-кортеж⎕⍴¨
изменить форму каждого элемента на ширину⎕⍴
измениться до высоты↑
смешать вектор векторов в матрицуисточник
На самом деле ,
444340 байтЭто фактически порт алгоритма в ответе Нейла JS . Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing:
источник
PowerShell ,
10188 байтПопробуйте онлайн!
источник
Октава
8076 байтбежать из терминала:
octave --eval "o=2;h=18;w=44; codegolf"
(альтернативно, если вы думаете, что вызов терминала обманывает: p, тогда реализация анонимной функции занимает 86 байт :)
Позвоните
f(2,18,44)
в октавный переводчик.источник
Bash + Sed,
411395381370 байт:Ну, вот мой самый первый ответ на Bash или любом другом языке сценариев оболочки. Это также самый длинный ответ здесь. Принимает последовательность разделенных пробелами аргументов командной строки в формате
Offset Width Height
. Это, вероятно, может быть намного короче, чем в настоящее время, поэтому любые советы и / или хитрости для игры в гольф это больше ценится.источник
Delphi / Object Pascal,
305,302, 292 байтаПолная консольная программа, которая читает 3 параметра.
ungolfed
К сожалению, в Delphi нет троичного оператора, и это довольно многословный язык.
прецедент
Редактировать: Может брить 3 байта, используя байт в качестве типа для всех переменных.
Редактировать 2: и консольные приложения не нуждаются в объявлении программы, -10
источник