Вступление
Идея состоит в том, чтобы использовать символ звездочки (звездочка), *
чтобы отобразить звезду ascii-art в указанном измерении. Измерение - это входное число, большее или равное которое определяет высоту в линиях верхней точки звезды. Звезды здесь должны быть шестиконечными звездами с большими размерами, которые выглядят лучше с точки зрения изображения.
Во всех случаях ascii-art представление звезд должно появиться в виде двух треугольников, которые перекрываются, как показано в следующих примерах.
параметрика
На следующем рисунке и в таблице данных описаны атрибуты первых семи размеров звезды. Каждый из параметров растет в арифметической прогрессии увеличением N , за исключением того, что отличается .
Примеры
Для ввода 1 (вырожденный случай) вывод программы должен быть следующим:
*
*****
*****
*
Ввод 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Вызов
Ваша задача - создать функцию или программу, которая будет принимать число N в качестве входных данных, а затем выводить звездочку соответствующего размера, используя только символы и
*
символ.
- Вы можете предположить, что входное значение всегда является положительным целым числом.
- Конечный пробел в выходных строках в порядке.
- Алгоритм программы должен быть достаточно общим, чтобы любой вход создавал вывод звездного искусства. Конечно, существуют практические ограничения из-за размера выводимого изображения.
- Вывод должен печатать в STDOUT.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф.
счет
Это код-гольф, поэтому выигрывает код с наименьшим количеством байтов!
Ответы:
05AB1E , 21 байт
Попробуйте онлайн! или как тестовый набор
объяснение
источник
3*s≠-L·<
лайков6*s≠·-ÅÉ
или≠3/-6*ÅÉ
, но, к сожалению, ни один не короче .. Хороший ответ, как всегда! :)xs3*<ŸRsLì'*×.º.C.∊
за 19 :). Я солгал, это не работает для 1. Оставляя это для вдохновения.Haskell , 114 байт
Создает функцию,
g
которая принимает число и производитIO
монаду, которая печатает звезду в STDOUT. Я думаю, что это нормально.Попробуйте онлайн!
объяснение
Сначала поговорим о лямбде.
Это занимает число,
n
чтобы быть нарисованным как звезды. Мы печатаем вдвое больше звездочек, а затем еще 1 и добавляем их справа к размеру изображения. Мы добавим это справаa
пробелами, чтобы отцентрировать линию звезд. Мы можем использовать эту лямбду, чтобы нарисовать каждую линию.Из этой лямбды мы создаем
(%)
.(%)
начинается сmapM_
нашей лямбды, чтобы превратить профиль в форму.Теперь все, что нам нужно сделать, это составить список профиля для звезды. Мы можем сделать это, сделав сначала треугольник
[1..a]
, а затем добавив его к нулям++replicate b 0
. Если мы возьмем профиль треугольника и перевернем его, мы получим вторую половину звезды. Чтобы наложить их супер, мы просто создаем новый профиль, где каждая запись является максимумом двух треугольников. ЭтоzipWith max
.Затем мы вызываем это одним из двух способов: как
3%1
для ввода, так1
и с помощью(3*a-1)%a
другого.Отсюда мы немного поиграемся с некоторыми значениями, чтобы сбрить несколько байтов. Так как
3*a-1
это довольно долго, мы смещаем некоторые другие наши значения на 1, так что все отменяется, и3*a
вместо этого мы получаем намеченное поведение . А именно, мы начинаем наш список2
вместо1
и делаем2*n-3
вместо того,2*n-1
чтобы компенсировать изменения.Альтернативная версия, 114 байт
Этот строит бессмысленную функцию
(%)<*>min 2
Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
источник
R ,
125107101 байтПопробуйте онлайн!
Предыдущий (другой) подход:
R ,
150148136135130128 байтовПопробуйте онлайн!
источник
Python 2 ,
1019997 байтПопробуйте онлайн!
-2 байта, благодаря Линн
источник
i+x>n*6or
экономит два байта.i+x>~i/n/2%2*6*n
или что-то вродеi+x>3*n*(~i/n&2)
(оба 96 байтов.)JavaScript (V8) ,
101108 байтРЕДАКТИРОВАТЬ: +7 байт для печати на STDOUT
Попробуйте онлайн!
Прокомментировал (без
print
)источник
Желе , 21 байт
Полная программа, принимающая положительное целое число, которое печатает в STDOUT.
Попробуйте онлайн! Или посмотрите тестовый набор .
Как?
источник
Холст ,
2523 байтаПопробуй это здесь!
15 байт без обработки
1
источник
Желе , 21 байт
Попробуйте онлайн!
Монадическая ссылка, принимающая единственное целое число в качестве левого аргумента и возвращающая разделенную строкой Jelly строку со звездой в качестве вывода. При запуске в качестве полной программы неявно печатает звезду в STDOUT.
объяснение
источник
×3’»3
и такой же длины ^ _ ^ɓ
это, это не имело значения, но я сохранил это, потому что мне все еще нравилось это!Древесный уголь , 25 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нарисуйте неправильный пятиугольник, представляющий верхнюю правую четверть звезды, но в специальном корпусе,
1
чтобы сделать ряд дополнительной колонкой шире.Подумайте, чтобы завершить звезду.
Более специальный корпус, чтобы сделать звезду на
1
дополнительный ряд выше.Альтернативное решение, также 25 байтов:
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Распечатать дополнительный
*
для случая1
.Нарисуйте левую половину треугольника соответствующего размера.
Подумайте, чтобы завершить треугольник.
Перекрыть его с его отражением, за исключением случая
1
, в этом случае просто отразить его.14 байтов без специального кожуха для
1
:Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нарисуйте треугольник соответствующего размера.
Перекрыть его своим отражением.
источник
Perl 6 , 74 байта
Попробуйте онлайн!
Буквально создает треугольник с правильными пропорциями и перекрывает его перевернутой копией, используя строку или оператор (
~|
). Выводится в виде списка строк с пробелом в начале и в конце строки.Объяснение:
источник
J ,
5350 байтПопробуйте онлайн!
ungolfed
как
Используйте таблицу функций (например, таблицу времен 3-го класса), чтобы построить половину треугольника, используя
>:
(больше или равно) в качестве функции. Затем переверните каждую строку, отрежьте последний столбец и соедините две стороны вместе, чтобы получить полный треугольник (но состоящий из 1 и 0). Добавьтеn
ряды нулей внизу. Наконец, полностью измените все это и наложите его на оригинал, используя boolean или,+.
чтобы получить результат. Затем поверните 1 к*
и 0 к пробелам.источник
T-SQL, 194 байта
@
это входное значение@c
обрабатывает ширину верхнего треугольника@d
обрабатывает ширину нижнего треугольника@e
содержит вывод либо@c
или@d
- это экономит несколько байтов@f
обрабатывает особый случай 1 в качестве ввода.@c*@=3
определяет, когда использовать@f
. На 5 байт дешевле, чем запись@c=3and @=1
Попробуйте онлайн
источник
Japt
-R
, 25 байт+5 байт для
n=1
: \Попытайся
источник