Учитывая спираль размера S
и шага N
, выведите «квадратную» S*S
спираль, имеющую N
звездочки, построенную от внешнего к внутреннему радиусу по часовой стрелке.
Тестовые случаи (примеры) приведены ниже.
Входные данные:
4 3
Выход:
***
Входные данные:
4 6
Выход:
**** * *
Входные данные:
4 11
Выход:
**** * * * ****
Входные данные:
6 18
Выход:
****** * * * * * * ******
Входные данные:
6 22
Выход:
****** *** * * * * * * * ******
Входные данные:
6 27
Выход:
****** ****** * ** * ** * ** ******
Входные данные:
1 1
Выход:
*
Нет необходимости обрабатывать случаи, когда:
при условии,
N
звездочки не могут "вписаться" в спираль заданныхS*S
размеров.или
N
илиS
ноль.
Задача заключается в коде-гольфе, кратчайшие байты отвечают победам, могут использоваться любые языки.
Ваш вывод может иметь столько конечных (но не ведущих) пробелов / новых строк, сколько вы пожелаете.
S
размер (или хотя бы диаметр ), а не радиусОтветы:
MATL ,
1716 байтПопробуйте онлайн!
Пояснение (с примером)
Рассмотрим входные данные
4
и11
в качестве примера.источник
Stax , 19 байт
Запустите и отладьте его
Он начинается с построения строки, содержащей все символы в результате со всеми звездочками по левому краю. Затем он берет все большие срезы с конца строки и «оборачивает» их вокруг сетки, когда она вращает сетку.
Вот та же самая программа, распакованная, разархивированная и прокомментированная.
Запустите и отладьте его
источник
Python 2 , 117 байт
Попробуйте онлайн!
источник
APL (Dyalog) , 65 байт
Попробуйте онлайн!
Код для спиральной матрицы взят из другого моего ответа .
источник
N
нечетное :)PHP, 118 байт
настроил и отыграл моё решение по Алфавитной Спирали .
Запустите
php -nr '<code>' <S> <N>
или попробуйте онлайн .источник
Python 2 , 150 байт
Попробуйте онлайн!
источник
Древесный уголь , 34 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Вход
N
.Длины спиральных рукавов (без углов) являются
S-1
,S-1
,S-1
,S-2
,S-2
,S-3
, ...,3
,2
,2
,1
,1
,1
. Это формируется, начиная с диапазона от0
до, но исключая2S
, изменяя 0 на 1, обращая его, добавляя 1 к каждому элементу после первого, и, наконец, целое число, деля все элементы на 2. Затем этот список зацикливается.Если осталось нарисовать меньше звезд, чем длина следующей руки, уменьшите руку до этой длины.
Нарисуйте соответствующее количество звездочек.
Вычтите из числа оставшихся звезд.
Поверните направление рисования на 90 ° по часовой стрелке.
источник
J,
6056 байт-4 байта, изменив процесс сборки для спирали так, чтобы вычитать его из y ^ 2 было ненужно
Попробуйте онлайн!
Объяснение
скоро будет.Объяснение:
Примеры:
источник
Котлин ,
361355353334 байта6 байтов сохранено благодаря Джонатану
2 байта сохранены, изменившись на когда
19 байтов сохранены, переключаясь на лямбду и отслеживая внешние края
Попробуйте онлайн!
источник
==' '
может быть заменен<'*'
. Такжеd==0
сd<1
иd==3
сd>2
. Они кажутся довольно фундаментальными гольфами, так что, вероятно, есть и другие!Java 10,
284282281263 байтаВеселый вызов!
Попробуйте это онлайн здесь .
Спасибо Кевину Круйссену за игру в гольф 18 байтов.
Безголовая версия:
источник
var b
добавляется , так что вы только должны сделатьx>0?i<u:i>l
иy>0?j<u:j>l
один раз, а не два раза.JavaScript (Node.js) ,
167164163 байта,
вместо map (1 байт)Попробуйте онлайн!
источник
return a.join` `.split`,`.join``
..split
, `.join`` не выводит спираль« красиво »(с новыми строками), поэтому я думаю, что это проблема