(Вдохновлен этим вопросом )
Задача
Ваша задача - написать программу или функцию для печати ASCII-версии логотипа Stack Overflow в STDOUT.
\|/
(-)
(-)
(-)
(-)
Ваша программа должна принимать два входа, называемые здесь H и N. Высота стека "контейнер" (скобки) определяется как H. Количество элементов в стеке определяется как N. Если N> H, то стек будет «переполнен».
Ввод, вывод
H определит высоту контейнеров
Например:
Н = 1:
( )
Н = 2:
( )
( )
Н = 3:
( )
( )
( )
H всегда будет хотя бы 1
N определит, сколько предметов в стеке. Следующие примеры все H = 2:
N = 0
( )
( )
N = 1
( )
(-)
N = 2
(-)
(-)
N = 3
\
(-)
(-)
N = 4
\|
(-)
(-)
N = 5
\|/
(-)
(-)
N = 6
\|/
(-)-
(-)
N = 7
\|/
(-)-
(-)-
N никогда не будет больше 2H+3
(другими словами, стек никогда не пройдет через землю).
правила
- Нет стандартных лазеек.
- Ваша программа не должна выдавать никаких ошибок.
- Все тесты должны пройти.
- Вы можете вводить H и N любым удобным для вас способом.
- Я серьезно сомневаюсь, что ваш язык имеет встроенный для этого.
- Каждая строка может иметь дополнительный пробел в конце. Пустая строка над стеком, где N <= H не является обязательным, как и завершающий перевод строки.
- Это код-гольф , поэтому выигрывает самый короткий код в байтах!
Тестовые случаи
В дополнение ко всем тестовым примерам H = 2 из раздела «Вход / выход» должны пройти все следующие тестовые примеры:
H = 1, N = 1
(-)
H = 1, N = 5
\|/
(-)-
H = 4, N = 7
\|/
(-)
(-)
(-)
(-)
H = 5, N = 0
( )
( )
( )
( )
( )
Leaderboards
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте списка лидеров:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Ответы:
Pyth,
434140 байтПопробуйте онлайн. Тестирование.
Первый проход, быстрый и грязный. Вход в STDIN как
N\nH
.объяснение
J
(JE
) и вычтите его из первого ввода (количество элементов). (-QJE
)K
. (K-QJE
)hK-QJE
)max(0, previous)
. Это необходимо, поскольку отрицательные числа нарушат следующий шаг. (g#0hK-QJE
)" \|/"
чтобы получить первую строку и распечатать. (<" \|/"g#0hK-QJE
)N
надrange(0, J)
. (VJ
) Для каждойN
печати объединение следующего: (s[
)"("
(\(
)" "
еслиN+1
в стеке есть хотя бы свободные места (<N_K
), в"-"
противном случае. (?<N_Kd\-
)")"
(\)
)"-"
еслиN+4
в стеке есть хотя бы переполненные части<N-K3
,""
иначе. (*<N-K3\-
)источник
JavaScript (ES6),
105102 байта@ Редактировать: 3 байта сохранены благодаря @PatrickRoberts.
источник
substring
на,substr
чтобы сохранить 3 байта, и заменитьi+n<h?' ':'-'
на,'- '[i+n<h]
чтобы сохранить 2 байта, и заменитьi+h+3<n?'-':''
на,' -'[i+h+3<n]
чтобы сохранить 1 байт. Это даст вам меньше 100substr
игнорировали ли отрицательные подписки или нет, но я не могу использовать ваши другие советы, потому что строчные подписки являются строками, поэтому логические значения не достаточно хороши.JavaScript (ES6),
126122112 байтКонтрольная работа
Альтернативный тест (если ваш браузер не поддерживает ES6)
Посмотрите тест на Babeljs.io и отметьте «оценить».
Интересный альтернативный подход на 136 байтах
Это перемещает повторяющиеся суммы в строку шаблона и использует регулярное выражение и замену для внедрения повторяющихся групп. К сожалению подпись для
.replace()
слишком длинная.источник
C ++ 14 (лямбда-функция), 196
Сохранено 1 байт благодаря Квентину.
Сохранено 2 байта благодаря Адаму Мартину.
Сама функция занимает 157 байт.
Смотрите это в действии здесь .
Безголовая версия:
источник
include
s иusing namespace std;
количество байтов, если ваш ответ не является полной программой (а это не так).CJam, 57 байтов
Проверьте это здесь.
Может определенно использовать некоторые улучшения. Идея состоит в том, чтобы построить сетку, в которой
-\|/-
ячейки заменяются последовательными целыми числами, напримерА затем заменить их правильными символами (возможно, пробелами) в конце.
источник
Python 2,
10110098 байтисточник
print
не нужныJavaScript (ES6),
8780 байтИспользует рекурсию для создания выходной строки снизу вверх.
РЕДАКТИРОВАТЬ : благодаря @Neil за брить 7 байтов от 87 байтов
оригинал
Тестовый фрагмент:
источник
SyntaxError
мне.JavaScript (ES6),
149139137 байтМне понравилась идея @ MartinEnder об индексации
-\|/
персонажей, и я хотел посмотреть, как она будет развиваться в ES6. Видимо, я не очень хорошо. Попытка выяснить, можно ли это улучшить с помощьюfor...of
.Правки
.replace
, переместив индексацию прямо вg()
нее.f=
во втором счетчике байтовКонтрольная работа
источник
Ява,
186177 байтUngolfed попробуйте онлайн
источник
Excel, 131 байт
Входные данные принимаются как кортеж, высота
H
вA1
,N
вB1
. В ячейке, содержащей формулу, необходимо включить перенос текста. Предложите использовать моноширинный шрифт.источник
A1
иB1
и добавляет простое примечание, что для этого требуется, чтобы вызывающая ячейка имела опцию переноса текста, чтобы быть истинным. Также возможно, что для получения правильного выравнивания у него должен быть моноширинный шрифт, такой как Courier New или Lucidia ConsoleC ++ 11,
155148145 байтовUngolfed :
Использование :
источник
Python 3,
134121118111 байтовПроверьте это здесь: https://repl.it/CYL1/0
Un-golfed:
Я хотел бы добавить боковое переполнение к пониманию списка, но я не мог втиснуть его, поэтому мне пришлось пойти с циклом while.Сохранено 13 байт!источник
'\|/'[:max(0,n-h)]
чтобы он был похож на решение Python 2.Perl 5 , 91 байт
Попробуйте онлайн!
источник
Пип , 50 байт
Попробуйте онлайн!
Тьфу, это слишком долго ... но я не знаю, как его сократить. Циклическая индексация, которая обычно полезна, на этот раз стоит дополнительных байтов.
источник
PowerShell ,
109108104 байтаПопробуйте онлайн!
Потерял много на дорогой индексации, но все еще прилично. Я не уверен, что моя математика индекса оптимальна как бы то ни было. Украл некоторую логику из других ответов, чтобы сохранить байт. Также запомнилось приоритетность вытаскивать несколько паренов для -4 байта.
источник
05AB1E , 45 байт
Можно определенно играть в гольф .. Не слишком доволен этим в его нынешнем виде.
Попробуйте онлайн или проверьте все тесты .
Объяснение:
источник
LR'(ì')«¹x‚3+¬UŸ¦ζJ¹XŸJ¦1úr)˜»
и это только половина дела.