Рассмотрим эту спираль
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
Начиная в центре:
- Первая строка (вверх) имеет 3 символа.
- Вторая строка имеет такое же количество символов (3)
- Далее мы добавляем два символа (5) для следующих двух сторон.
- Этот шаблон продолжается, две стороны одинаковой длины, а затем увеличивают длину на 2.
Я хочу создать эту спираль для N строк.
- Пишите на любом языке.
- Ввод / аргумент и т. Д. - это количество строк в вашей спирали.
- Каждая строка начинается с символа конца предыдущей строки в направлении 90 градусов по часовой стрелке от предыдущей строки.
- Мне все равно, сколько пробелов до или после каждой строки, пока элементы спирали выстраиваются в линию.
- Выведите текст, чтобы нарисовать спираль с любым непробельным символом, который вы выберете.
- Попытайтесь сделать это в наименьшем количестве байтов.
Тестовые случаи (с использованием хэша в качестве вывода):
N = 1
#
#
#
N = 2
###
#
#
N = 3
###
# #
# #
#
#
N = 10
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
*
вместо#
. Ожидаемая?Ответы:
05AB1E ,
1311 байтКод:
Спасибо Emigna за сохранение двух байтов!
Использует кодировку 05AB1E . Попробуйте онлайн!
объяснение
Длина каждого отдельного ребра на спирали начинается с длины 3 и постепенно увеличивается каждые два шага на два:
Это в основном дает нам желаемый список длин.
Холст работает как функция, которая извлекает три параметра (где самый правый параметр выводится первым): <length (s)> , <char (s)> , <direction (s)> . Параметр directions в этом случае представляет собой список чисел. Номера, которые соответствуют направлениям:
В этом случае [0, 2, 4, 6] соответствует списку направлений
[↑, →, ↓, ←]
. Канва перебирает каждую длину, извлеченную из списка длин, использует символ «#» и циклически перебирает список направлений.источник
0246S
=3Ý·
Python 2 ,
176170165161157 байтПопробуйте онлайн!
Повторно: используется
g
для поворотаn
итерации спирали в «каноническую» позицию (аналогично N = 3 или N = 7), добавляет новый сегмент, добавляя 2 пробела слева от каждой существующей строки, а затем заменяя последнюю строку со всеми'#'
s (приводя к положению, сравнимому с N = 4 или N = 8) и, наконец,g
снова используя его, чтобы повернуть его обратно в правильное положение. Вспенить, промыть, повторить.источник
Древесный уголь ,
161514 байтов-2 байта благодаря @Neil .
Попробуйте онлайн (многословно) или Попробуйте онлайн (чисто) .
Объяснение:
Направление печати по умолчанию направо, и мы хотим начать вверх, поэтому мы начнем с поворота на 45 градусов против часовой стрелки:
Затем цикл
i
в диапазоне[0, input)
:Выведите новую строку, чтобы имитировать эффект возврата на одну позицию назад:
Выведите «#»
x
количество раз в текущем направлении:Где
x
находится3 + i // 2 * 2
:А затем поверните на 45 градусов по часовой стрелке для следующей итерации цикла:
источник
⊗÷ι²
Байт короче⁻ι﹪ι²
. Кроме того, вы можете получить эффект возврата назад, напечатав\n
перед#
символом s, что позволит вам удалить»#
дополнительную общую байтовую экономию.⊗÷ι²
, но какие будут изменения для печати\n
перед#
s? Спираль неверна, если я добавлюPrint("\n")
.#
длиннее.Python 2 ,
179178 байтспасибо Кевину Круйссену за -1 байт.
Попробуйте онлайн!
Python 2 , 179 байт
В этом подходе формулы
x
иy
дельты используются вместо списка поиска.Попробуйте онлайн!
источник
n+1+n%2
вn%2-~n
течение -1 байт. И мне нужно помнить,0--n/4*2
что я на 1 короче-(-n/4*2)
. Хороший ответ, +1 от меня.JavaScript (ES6), 185 байт
Конечно, это может быть больше в гольфе, может быть, с карри, но вот моя очень скромная попытка. Добавлены разрывы строк для удобства чтения, кроме предпоследнего символа
Использование:
d(10)
возвращает строку в соответствии с примером задачи N = 10.Определяет функцию
r(a,n)
для поворота массиваa
поn
очереди; функцияs(n)
для генерации двумерного массива, представляющего спираль размера,n
путем рекурсивного вращения и добавления интервалов и линий (не повернутых обратно в исходное положение); и функцияd(n)
рисовать спираль размераn
, последовательно вращающейся в соответствии с задачей, и отображаемой в виде возвращаемой строки.Это было действительно забавное испытание: ¬)
источник