Ваша работа - воссоздать это произведение искусства:
_____
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
Ответ должен воссоздать это и распечатать в результате. Все языки разрешены, прямая печать произведений искусства, ofc, некий уровень манипуляции не требуется. Ответ с наименьшим количеством байтов выигрывает.
Закрытие в четверг в 6:30 утра по Гринвичу или около того.
Оригинальную вещь мне показал мой друг, который делал это с Java, он отказался показывать мне исходный код, и теперь я, возможно, ослеплю его великолепием других языков. : D
Вы не можете использовать любой альтернативный символ (облегчает?).
Текущий список лидеров
- Pyth - 28 байт - isaacg
- CJam - 30 байт - Runer112
- CJam - 32 байта - Мартин Бюттнер
Наивысшие голоса: C - 73 байта - Paul R
Исаак берет корону за прохождение Лестницы с Питом. Следите за новыми проблемами на PPCG!
code-golf
ascii-art
kolmogorov-complexity
therewillbecoffee
источник
источник
Ответы:
Пиф,
2928Попробуй это здесь.
Довольно простое решение с трюком «добавить пять пробелов или пять подчеркиваний» из решения @ xnor, но с циклом от 0 до 20, а не от 20 до 0.
источник
C
8680767573 байтаисточник
for(i=25;i--;)
i=26
. Помимо этого,' '
можно изменить на32
дополнительный символ. Мое решение на 2 символа длиннее после этих оптимизаций :(main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}
строка , а не 26. Некоторые дополнительные оптимизации: 1. Упростите формулу для длины 2. Как говорит @Allbeert, вы можете использовать код ascii,' '
но зачем останавливаться на ASCII 32, когда ASCII 0 подойдет. Кроме того, он работает нормально для меня""
вместо" "
'|'
печати?c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Ява,
198158156146 байтЭто, вероятно, может быть сокращено много. Как обычно, предложения приветствуются.
Отступ (вроде):
Спасибо Мартин Бюттнер, Рейнболт и Геобитс.
источник
Brainfuck (1065 байт)
Это не красиво, это не коротко ... но я оптимизирую позже!
источник
CJam,
3630 байтПопробуйте онлайн.
Мое первоначальное 36-байтовое решение генерировало результат в выходной ориентации. Несмотря на мои попытки выжать больше байтов из алгоритма, я не смог. Затем я увидел блестящую стратегию Мартина по генерации столбцов вместо строк и переносу результата. Я понял, что это, вероятно, лучший подход, поэтому я решил создать решение на основе транспозиции.
Однако мой подход к реализации этой стратегии несколько отличается. Вместо того, чтобы генерировать полные столбцы, я использую итеративное решение, которое выравнивает любые уже сгенерированные «шаги» и добавляет новый шаг на каждой итерации. Итак, первая итерация основного цикла генерирует это:
Вторая итерация основного цикла выравнивает существующий шаг и добавляет новый после него:
И полные пять итераций основного цикла генерируют это:
После этого все, что нужно сделать, - это исключить первую строку, которая в противном случае стала бы нежелательной вставкой для нижнего шага, и транспонировать.
источник
Python 2,
807774 байтаИзбавился от двойника
exec
и поместил все в одноprint
!источник
Зажим, 46
объяснение
источник
CJam,
3632 байтаПроверьте это здесь.
Я также пытался использовать явную формулу, но она больше в CJam ... может быть, это поможет кому-то еще:
объяснение
Я обнаружил, что лестница может быть построена намного легче, если вы а) транспонируете сетку и б) переставляете линии:
Итак, сначала я это строю, потом наоборот, потом транспонирую.
источник
Python 2, 59
21 строка проиндексирована
n
в[20,19,...,1,0]
. Сначала печатается 6 пробелов за каждый «шаг», который мы подняли (минус 1), вычисляемый какn/5*6
. Затем печатает пять пробелов, за исключением того, что вместо этого они подчеркивают кратные пять. Наконец, печатается вертикальная линия, кроме верхнейn=20
.источник
JavaScript,
1151079694898783 байтаЭто слишком долго, чтобы выиграть, но я впервые придумаю ответ на PCG.SE, и я горжусь тем, что сделал что-то достойное.
С некоторыми полезными советами по синтаксису я значительно сократил код - даже ниже порога прокрутки!
источник
alert
. Если вы запустите его в консоли, то без него все будет работать нормально. Кроме того, точка с запятой внутри последней фигурной скобки не требуется. Вы можете сохранить 1 байт, используя(y/5-.2)
вместо((y-1)/5)
s+='\n'
послеy--
и избавиться от фигурных скобок, чтобы это выглядело какfor(s='',y=21;y>0;y--,s+='\n')
. Я также инициализировал s внутри цикла for, чтобы ваш код был одним операторомfor(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'
если вы перевернете свое троичное выражение, вы можете проверить,number - x
что равно 0, если оба термина равны, экономя вам еще 2 байта.for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'
83 годаECMAScript 6,
14213812991 байтОтдельное спасибо @ edc65 за то, что он действительно переработал это.
Показать фрагмент кода
Логика оригинальной версии check @ edc65 комментирует, как она трансформировалась.
источник
new
конструктор, прежде чемArray
сохранить несколько байтов.new
это необходимо.repeat
[1,2,3,4].map((a,b)
и используя просто b =>[0,1,2,3].map(b
(-4)MATLAB, 68 байт
У меня сильное чувство, что MATLAB должен быть в состоянии добиться большего успеха, но я не могу придумать, как это сделать.
Создает лестницу вверх ногами и переворачивает ее. Мой таумометр сломался из-за всех магических констант вокруг.
'|'
намеренно оставлен как есть (вместо кодовой точки ascii) для инициализацииp
иw
как массив символов.источник
'|' = 124
во всяком случае, так что это не стоит никаких дополнительных символов.Руби, 48
Старый подход, 68
источник
'_'
можно записать как?_
. 3. Новые строки могут быть встроены непосредственно в строки (так вы можете это сделать"<linebreakhere>|"
). 4. Скобки вокруг этого не нужны. Финалputs
можно заменить на$><<
(что позволяет избавиться от места даже после использования?_
). Так держать! :)(1..4).map
,4.times
а затем использовать4-i
вместо5-i
.Юлия, 83 байта
В Julia конкатенация строк выполняется с помощью
*
оператора, а повторение строк - с помощью^
.источник
> <> ,
108104100 байтПростое> <> решение, использующее ту же стратегию, что и мой ответ на Python . Основное отличие состоит в том, что> <> не имеет умножения строк (или даже строк), поэтому все это делается с помощью циклов.
объяснение
источник
Groovy,
9871 байтЯ почти уверен, что это может быть как-то уменьшено :) сокращено на @Score_Under
источник
' '*(i-(i-1)%5)
, удалите скобки со всего('_____'+(i==25?'':'|'))
, замените'_____'
с'_'*5
, и если вы щелкаете последние условными вы можете использовать% как неортодоксальный оператор неравенства:(i%25?'|':'')
. Это должно привести вас к 71.Perl, 50
Попробуй меня .
источник
T-SQL, 276 байт
источник
Visual FoxPro 9.0, 261 байт
n = количество шагов
всего 175 символов, но пришлось выводить в файл для корректного отображения - поэтому минус 43 символа для файловых операций = 132 символа.
Примечание для ответчика: количество байтов для абсолютного рабочего исходного кода, а счетчик байтов говорит, что это 261 байт, так оно и есть.
источник
Bash (+ tac от coreutils): 110 байт
Это может быть вставлено непосредственно в терминал.
источник
|tac
этого это не совсем работает. И я запустил это на Git Bash, поэтому я должен покончить с собой.машинный код x86, 48 байт
Эквивалент кода сборки:
Выход:
Извините, что результат отличается; Я надеюсь, что это приемлемо.
Это было запущено в DOSBOX
источник