Создайте программу, которая берет длину и список интервалов и выводит линейку этой длины с более длинными галочками для каждого интервала, используя символы рисования линий ┌ ┬ ┐ │ ╵
- Первая строка вывода должна начинаться с отметки 0 с
┌
и заканчиваться галочкой для длины с┐
,┬
используемой для каждого символа между ними. Всегоlength
в этом первом ряду будет + 1 символ рисования линий. - Тик должен быть удлинен по вертикали на полсимвольные приращения с использованием
╵
и│
на основе интервалов ввода. - Интервалы перечислены от наименьшего к наибольшему относительно интервала перед ним. Разработать:
- Первый интервал сообщает, сколько базовых тиков (первая строка - один символ на тик) находятся во втором наименьшем интервале (наименьший интервал равен 1). Например, [3] будет удлинять каждый третий тик на половину символа.
- Второй и последующие интервалы соответствуют следующему наименьшему интервалу. Например, [3, 5] будет удлинять каждый 15-й базовый тик на полный символ, а [3, 5, 2] будет удлиняться на каждый 30-й базовый тик на полтора символа.
- Подинтервал 1 действителен и фактически означает, что последние строки интервала удлиняются на полный символ вместо полусимвола.
- Примеры тестов должны помочь уточнить, как это работает.
Примеры / Тестовые случаи
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Другие правила / примечания
- Ввод и вывод может использовать любой удобный формат
- Правитель не должен заканчиваться на главном тике
- Список интервалов может быть пустым
- Нулевой тик всегда во всех интервалах.
- Можно предположить, что длина линейки и интервалы всегда будут положительными целыми числами меньше 120
- Конечный пробел - это хорошо, но ведущий пробел - нет.
- Любой пробел с фиксированной шириной в одну допускается как пробел, если вы по какой-то причине хотите использовать что-то кроме пробелов ASCII.
Счастливого гольфа!
Ответы:
JavaScript (Node.js) , 123 байта
Попробуйте онлайн!
Используйте эту функцию как
f(20)([5, 2])
.Спасибо Арно, экономит 4 байта.
источник
Perl 6 ,
130 122 10292 байта-10 байт благодаря nwellnhof!
Попробуйте онлайн!
Ах да, намного короче, чем мой предыдущий метод. Это блок анонимного кода, который возвращает список строк.
Объяснение:
источник
Dyalog APL,
66645852 байтаПопробуйте онлайн!
¯2¯8¯14 байтов благодаря ngn !источник
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. прием⍺
в обратном порядке теперь явно разрешен , так что вы также можете удалить⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 байтаПопробуйте онлайн!
источник
05AB1E , 51 байт
Не слишком доволен,
I¯Qiεõ}}
как обходной путь для пустых входных списков .. И, безусловно, может играть в гольф и в некоторых других частях ..ПРИМЕЧАНИЕ. Использует сжатые целые числа, преобразованные в требуемые символы, поскольку непосредственное использование требуемых символов означает, что мне придется считать всю программу в UTF-8, увеличивая ее слишком сильно для всех встроенных символов 05AB1E.
Попробуйте онлайн или проверьте все тесты .
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжать большие целые числа? ), Чтобы понять, почему
•5·W4•
есть94749589
и•áΣ=Yô•
есть948495169488
.источник
×S
может бытьи
sиS
работает, но, к сожалению, это байт больше, а не короче. Это потому, что целые числа сначала находятся в стеке, а строки - после. При×
этом не имеет значения, будет этоint,string
или нетstring,int
, но си
этим ожидаетstring,int
.и
! Это будет полезно узнать в будущем, я не видел, чтобы он использовался раньше, чем один из ваших других ответов.Древесный уголь , 50 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. Символы рисования прямоугольников имеют 3-байтовое представление в Charcoal, поэтому длина приведенной выше строки составляет всего 40 символов. Объяснение:
Рассчитайте накопленное произведение интервалов.
Напечатайте первый ряд отметок. Левый и правый символы неправильные, потому что результат отражается позже.
Рассчитайте количество интервалов, которые являются фактором для каждой отметки. Создайте строку
│
s из половины этой длины и добавьте╵
для нечетных длин. Выведите каждую строку вниз с последующими строками в предыдущих столбцах, т.е. в обратном порядке.Отразите все, чтобы получить правителя в порядке слева направо.
источник
Холст ,
424140 байтПопробуй это здесь! ( со шрифтом, который моноширинный вывод )
источник
Emacs Lisp , 303 байта
Используйте эту функцию как
(f '(30 (5 2)))
.Лучше читаемая версия:
источник
Желе ,
4241 байтПолная программа.
Попробуйте онлайн!
Или посмотрите комплект тестов.
Примечание: этот код был изменен из полной программы -
ñ
(следующая ссылка как диада) была заменена на1ŀ
(ссылка на индекс 1 как диада), чтобы нижний колонтитул мог вызывать его несколько раз ,Как?
источник
Рубин , 126 байт
Попробуйте онлайн!
Выглядит довольно многословно со всем этим
each_slice
, но пока подойдет, если мне не удастся найти подход к игре в гольф.Принимает ввод как
l
для длины, так иi
для интервалов, возвращает массив строк.источник
R ,
175170 байтПопробуйте онлайн!
Берет пустые интервалы как
0
, возвращает матрицу символов. Ссылка TIO отображает вывод довольно напечатано.источник
Haskell ,
167164149 байтПопробуйте онлайн! Слегка по гольфу другой подход от Οurous .
Попробуйте онлайн! Есть еще некоторые увольнения, которые выглядят так, как будто они могут быть использованы, но до сих пор они выдерживали все дальнейшие попытки игры в гольф.
Предыдущее 167-байтовое решение аналогично обработке новой строки и, вероятно, немного лучше читается:
Попробуйте онлайн!
источник
PowerShell , 152 байта
Попробуйте онлайн!
раскатали:
источник
C # (интерактивный компилятор Visual C #) , 204 байта
Попробуйте онлайн!
Выводит, но застревает в бесконечном цикле.
источник
Чистый ,
221201195162 байтаПопробуйте онлайн!
Возвращает список списков символов UTF-8 (в виде строк, поскольку Clean не имеет встроенной поддержки UTF-8).
Работает, генерируя первую строку, затем беря произведение префиксов из списка, представленного группами по два, и проверяет, какую метку рисовать, основываясь на том, разделяет ли продукт текущую позицию символа.
Ungolfed:
источник