(с извинениями перед Джимом Уэстом за название и случайным образом вдохновленный текстовым представлением Cisco их логотипа: .:|:.:|:.
для концепции)
Учитывая входное целое 1 <= n <= 255
, выведите художественное представление ASCII подвесного моста расстояния, n
следуя приведенным ниже правилам построения:
- Начало и конец моста (не учитываются на
n
расстоянии) всегда-|
и|-
, таким образом, мост может надлежащим образом соединиться с шоссе рядом с ним. - Мост не простирается вниз (уровень проезжей части, состоящий из
-
ряда, является нижним рядом). - Может быть максимум две части проезжей части
--
одном ряду , для более длинного пролета требуются подвесные тросы для поддержки. - Подвесные тросы
\
простираются от проезжей части до вышек|
по прямым линиям. - Башни
|
должны быть достаточно высокими, чтобы поддерживать соседние подвесные тросы, но не выше. - Мост должен быть сбалансирован слева направо относительно средней точки, отдавая предпочтение центральным участкам, когда это возможно.
- Все вышеперечисленное должно привести к минимизации кабелей, но, чтобы было ясно, количество подвесных кабелей должно быть сведено к минимуму при одновременном соблюдении вышеуказанных правил.
Чтобы обеспечить визуальное представление, вот ожидаемые результаты для n = 1, 2, 3, ... 15
-
1
-|-|-
2
-|--|-
3
-|\-/|-
4
-|\--/|-
5
|\ /|
-|-\-/-|-
6
|\ /|
-|-\--/-|-
7
|\ /|
| \ / |
-|--\-/--|-
8
|\ /|
| \ / |
-|--\--/--|-
9
|\ /|
| \ / |
| \ / |
-|\--\-/--/|-
10
|\ /|
| \ / |
| \ / |
-|\--\--/--/|-
11
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\-/--/-|-
12
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\--/--/-|-
13
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\-/--/--|-
14
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\--/--/--|-
15
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
| \ \ / / |
-|\--\--\-/--/--/|-
вход
Один положительное целое число в любом удобном формате , n > 9
.
Выход
Мост ASCII-art, следуя приведенной выше методике строительства.
правила
- Начальные или завершающие символы новой строки или пробелы являются необязательными, если символы моста сами выстраиваются правильно.
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Если возможно, пожалуйста, включите ссылку на среду онлайн-тестирования, чтобы люди могли опробовать ваш код!
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Ответы:
05AB1E ,
795958 байтПопробуйте онлайн! ,
Объяснение:
Нашли лучшее решение, ключом было вернуть следующие массивы для каждого числа следующим образом:
источник
Python 2, 173 байта
Отразите значение b и добавьте центральный
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
базовый шаблон "-" (правая половина нижней строки).
b=(i*'/--')[:~-i/2]
Цикл для не нижних слоев
for x in range(1,~-i/2):
Получите первые x символов базового шаблона и завершите "-".
(len(b)-x)*'-'+b[:x]
Замените все - пробелами для печати. все слои (кроме нижнего)
print f().replace('-',' ')
Печать нижнего слоя
print f(b)
источник
Befunge, 150 байт
Попробуйте онлайн!
Я также предоставил версию кода без заглядывания, которая лучше демонстрирует архитектуру, используемую при строительстве моста.
Попробуйте онлайн!
Башни обрабатывают ввод и инициализацию параметров. Колода состоит из двух циклов, вычисляющих части моста, которые должны быть выведены для каждой координаты x, y. И фундамент содержит таблицу символов для этих частей моста, а также некоторый другой совершенно не связанный код.
Детальное объяснение
Мы начнем с вычисления ширины и высоты области вывода, которую необходимо будет повторить для визуализации моста.
Обратите внимание, что диапазон y не начинается с нуля. Начальное значение равно
5 - (h<5)
итерации до h (текущее значение сохраняется в 2,0). Значение x повторяется от w до 0 и сохраняется в стеке.Внутренний цикл - это просто последовательность логических условий, определяющих, соответствует ли конкретная координата x , y любому из местоположений, для которых требуется непробельный символ. Эти расчеты основаны на двух сдвигах скольжения, которые следуют пути подвесных тросов.
Различные условия затем определяются следующим образом:
Чтобы перевести эти условия в правильное смещение символов, нам просто нужно умножить каждое из них на соответствующее смещение и суммировать результат. Этот расчет выполняется при оценке условий. Так это выглядит примерно так:
Обратите внимание, что значение bridge_deck объединяется в зависимости от того, были ли выполнены какие-либо другие условия, так как символ приостановки или башни будет иметь приоритет над колодой.
Конечным результатом является смещение в таблице символов в последней строке игрового поля. Мы просто выводим этот символ и повторяем цикл.
источник
Пакетный, 241 байт
Примечание. Конечный пробел в строке 5. Начинайте с создания ряда пробелов, затем добавляйте кабели по мере необходимости, повторяя, чтобы построить башни на желаемую высоту, заканчивая заменой оставшихся пробелов дорогой.
источник
WinDbg, 312 байт
Ввод осуществляется путем установки псевдорегистра
$t0
.Я чувствую, что должен быть способ объединить два
for
петли в одну ... может быть, есть и другие возможности для игры в гольф ...Этот работает, заполняя всю область дорогой, затем заменяя все, кроме последнего ряда, пробелом, и, наконец, строит колонны и кабели.
Пример вывода 1-15:
источник
Java 8,
423, 412 байт11 байт сэкономлено благодаря Kritixi Lithos
golfed:
ungolfed:
источник
int i,j,k,t=n/2+n%2,u=t-2,q=0
и вместо того,char v="-";
чтобы использовать их,char v=45;
и вы можете изменитьabc%xyz==0
s наabc%xyz<1
(еще не проверял)