Ваша задача - создать программу или функцию, которая принимает в качестве входных данных натуральное число ( n
) от 1 до 25 (включительно) и печатает изометрическое представление слайда и лестницы сn
количеством ступеней.
Характеристики лестницы и горки
Лестница всегда ориентирована слева, а горка справа. Мы видим его со стороны лестницы, поэтому часть слайда скрыта на верхних трех уровнях. Ступеньки представлены четырьмя черточками ( ----
) и сторонами лестницы и скользят косыми чертами ( /
и \
). Ниже приведена схема, представляющая шаблоны пространств, необходимых для слайда с пятью ступенями.
Slide Blank space count
/----/\ 1234/----/\
/----/ \ 123/----/12\
/----/ \ 12/----/1234\
/----/ \ \ 1/----/1\1234\
/----/ \ \ /----/123\1234\
Примеры
>>1
/----/\
>>3
/----/\
/----/ \
/----/ \
>>4
/----/\
/----/ \
/----/ \
/----/ \ \
>>10
/----/\
/----/ \
/----/ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
/----/ \ \
Это код-гольф, поэтому выигрывает ответ с наименьшим количеством байтов.
Примечание: конечный пробел допустим в выводе, если он не превышает длину строки.
Ответы:
Сетчатка ,
817252 байтаКоличество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
объяснение
Программа состоит из четырех этапов, каждый из которых является заменой регулярных выражений (с парой специфичных для Retina функций). Я буду использовать вход
5
в качестве примера для объяснения.Этап 1
Это превращает ввод
n
вn
пробелы, за/\ \
которыми следует вершина лестницы / слайда:Сейчас мы просто покажем слайд полностью и представим лестницу только левой рукой
/
.Этап 2
К сожалению,
n
пробелы на один больше, чем нам нужно, поэтому мы снова удаляем первый символ. Теперь у нас есть:Этап 3
Время расширить полную структуру. Знающий где находится верх, достаточно, чтобы построить все это, потому что мы можем просто растянуть его по одной линии за раз, раздвинув лестницу и ползунок на две части.
+
Говорит Retina повторить этот этап в цикле , пока на выходе не перестает изменяться (в данном случае, так как регулярное выражение останавливает согласование). Что касается самого регулярного выражения, мы просто сопоставим/
последнюю строку и все после нее, а также сопоставляем один пробел перед ним, что означает, что это больше не может совпадать, когда/
достигнет первого столбца.Вот что мы заменим на это:
Таким образом, на каждой итерации это добавляет одну строку к строке, пока мы не получим следующее:
4 этап
Все, что осталось, это правильно выбрать лестницу. Это действительно просто, мы просто сопоставляем
/
и следующие 5 символов и вставляем правильное представление релейной логики, тем самым переопределяя слайд или пробелы, которые уже есть:источник
V ,
38, 37, 36, 34, 33, 32, 31, 3029 байтовПопробуйте онлайн!
Я могу догнать Осаби. Один байт короче, чем у Осаби.Один байт короче!\o/
Связано с 2sable!Из других новостей, это определенно самый длинный зачеркнутый заголовок, который я когда-либо делал.
Объяснение:
Это будет выполняться до тех пор, пока не произойдет ошибка, которая благодаря команде «переместить влево» («h») будет превышать «arg1».
Теперь нам просто нужно добавить внутреннюю ногу
Неконкурентная версия (28 байт)
источник
Pyth,
3935 байтОбъяснение:
Тест здесь
источник
2sable ,
40363230 байтХм, V приближается очень близко ...
Использует кодировку CP-1252 . Попробуйте версию, совместимую с 05AB1E! ,
источник
:P
PowerShell v2 +,
999082 байтаПринимает ввод
$n
, запускает цикл с1
по$n
с|%{...}
. На каждой итерации мы создаем строку. Начнем с соответствующего количества пробелов" "*($n-$_)
и лестницы"/----/"
.К этому мы добавляем еще одну строку, которая была разрезана
[...]
и-join
отредактирована вместе. Вторая строка - это слайд, и мы предполагаем, что весь слайд всегда виден. Это количество пробелов до начала слайда" "*($_+$i++)
, за которым следует сам слайд"\ \"
. Это разделено на диапазон, рассчитанный как часть «пространства плюс слайд», который частично скрыт лестницей.Примеры
источник
:D
\golfing
папка должна быть очень организованной._.
Python 2 -
797675 байтСпасибо Hubert Grzeskowiak за «дисквалификацию» меня, так как печать моей программы фактически сэкономила 3 байта! Спасибо также Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ за сохранение еще 1 байта!
источник
def f(x):
сx=input()
, и удалить отступ во второй строке. Это экономит вам 1 байт.Vim, 71 нажатие клавиш
Это такой глупый способ сделать это, но это немного забавно. Входные данные представлены в виде текстового файла с одной строкой, содержащей целое число. Это, вероятно, вполне пригодно для игры в гольф, но пока подойдет ( edit: переключенный стиль управляющих символов по запросу ):
<c-v>
,<esc>
И<cr>
все отдельные нажатия клавиш; Ctrl + V, escape и возврат каретки (ввод) соответственно. Для простой для усвоения версии с правильными литералами вот файл,ladder.keys
хотя выполнитеxxd
:Чтобы попробовать это (предполагая, что nix с соответствующими инструментами), возьмите вышесказанное, запустите его
xxd -r
и поместите в файлladder.keys
. Создайте файлladder.txt
с целым числом. Затем сделайте:источник
^V
как<c-v>
здесь.Баш, 61
где
^M
буквальный возврат кареткиисточник
/
и `\` в 4-й строке и на 1 меньше пространства между краями слайда.JavaScript (ES6), 79 байт
Работает, взяв строку
n
пробелов, затем выполняя некоторую экзотическую замену, чтобы получить слайд с подставкой, а затем заменяет подставку лестницей.источник
Рубин, 61 байт
Ungolfed
Я мог бы сохранить два байта, используя
'%*s\ \^M%*s----/'
(где^M
буквенный возврат каретки) для строки формата, но затем Ruby выводит предупреждение "warning: encountered \r in middle of line, treated as a mere space
". ¯ \ _ (ツ) _ / ¯Предыдущее решение (64 байта)
источник
Пакет, 194 байта
Оказалось, что это достаточно просто: сделать отступ в слайде, убрать первые 7 символов, сделать отступ в лестнице, удалить пробел. Этот последний бит включает в себя небольшую хитрость, хотя!
источник
Java, 116 байт
К сожалению, вы не можете [легко] дублировать строки в Java, поэтому я в итоге злоупотребил функцией форматирования.
источник
Скала, 95 байт
источник
Haskell, 81 байт
источник
do i<-[1..n];a(n-i)++"/----/"++drop 7(a(2*i)++"\\ \\\n")
сохраняет два байта.eacal , неконкурентный, 386 байт
Я официально сделал самый многословный язык возможным.Я сделал комментарий в шутку и с сарказмом. Пожалуйста, успокойся. Инструкция по запуску в репозитории github приведена в шапке.Ungolfed
источник