Напишите программу или функцию, которая принимает положительное целое число N и печатает или возвращает N × N художественную строку ASCII, верхняя половина которой представляет собой полукруг, состоящий из (
's, а нижняя половина представляет собой направленный вниз треугольник, состоящий из V
' s, с пробелы, используемые в качестве отступов.
Другими словами, сделайте конус мороженого ASCII: (вывод для N = 17)
(((((
(((((((((
(((((((((((((
(((((((((((((
(((((((((((((((
(((((((((((((((
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVV
VVVVVVVVVVVVV
VVVVVVVVVVV
VVVVVVVVV
VVVVVVV
VVVVV
VVV
V
Примеры
Вот выходные данные для N = 1 до 5. Обратите внимание, что для нечетного N треугольник всегда должен быть большей половиной.
V
((
VV
(((
VVV
V
((
((((
VVVV
VV
(((
(((((
VVVVV
VVV
V
А вот эталонная реализация Python 3 без поддержки:
N = int(input())
ic = [[' '] * N for _ in range(N)]
for y in range(N//2):
for x in range(N):
if (x - (N - 1) / 2)**2 + (y - (N - 1) / 2)**2 < (N / 2)**2:
ic[y][x] = '('
for y in range(N//2, N):
for x in range(y - N//2, N - (y - N//2)):
ic[y][x] = 'V'
for line in ic:
print(''.join(line))
Детали
- Получать ввод из стандартного ввода, командной строки или в качестве аргумента функции. Выведите на стандартный вывод или аналогичный, или вы можете вернуть строку, если напишите функцию.
- Часть конуса должна точно соответствовать эталонной реализации для всех N.
- Порция мороженого не обязательно должна точно соответствовать эталонной реализации, если она явно имеет форму полукруга для всех N. (Это позволяет не беспокоиться о небольших различиях в полукруге из-за ошибок округления .)
- Не должно быть лишних пробелов, но могут быть лишние пробелы.
- Выходные данные могут дополнительно содержать завершающий перевод строки.
- Вы можете дополнительно использовать любые 3 других различных печатаемые ASCII символы вместо
(
,V
и пространства.
счет
Самая короткая подача в байтах побеждает. Tiebreaker отправляется в самую старую подачу.
Ответы:
CJam, 46 байтов
Попробуйте онлайн.
Я считаю, что в настоящее время это точно соответствует оригинальной спецификации, что требовалось, когда я начал выпускать этот ответ. Может быть возможно сэкономить несколько байтов, делая математику менее точной по сравнению с исходной спецификацией, но пока я не увижу способ сохранить более одного или двух байтов, оставив все как есть.
объяснение
источник
2
«s и1
» с вместо(
«s иV
» s?inca2
129123121111107В основном это использует формулы из примера на python, но вместо двойных циклов используются jot-точки и iotas. В
i
функции выполняет круговой тест дляj
функции , которая вызывает йоту-точечную на него. Иk
функция выполняет проверку треугольника дляl
функции.c
Функция catenates результатыj
иl
и перестраивает его на N × N.редактировать: -6 объединить 2 карты в 1.
редактировать: -2 удалить бесполезные равнины.
редактировать: приятнее машинопись.
редактировать: -10 применить повторное выражение в массиве.
редактировать: -4 вынести повторное выражение как функцию.
редактировать: построчный комментарий.
Более подробно, точкой входа является
c
функция, которая принимает один аргумент с неявным именемy
.j
Функция принимает то же значение входного сигнала в качестве своегоy
параметра.Точка здесь делает двойную петлю. Он вызывает
i
функцию с каждой комбинацией элементов из левого и правого массивов (0..n / 2 и 0..n). Таким образом,i
функция получает вx
качестве индекса y таблицы, а получает вy
качестве индекса x . Имена здесь немного задом наперед :).где
q
делаетвернуться к
i
Пол не должен быть необходимым. Но, видимо, в интерпретаторе есть ошибка.
l
Функция работает аналогичноj
функции, используя йота-точка.k
Функция возвращает логическое значение масштабируется на 2 , так что значения можно отличить от значений мороженого в дальнейшем, в отображении.В действии (
tr
для удаления символов табуляции, которые являются подсказкой REPL):источник
Питон 2,
193192Не использует строки, только математика
s(L,U)
возвращает число вида «U
-значения с крайними правымиL
нулями, а остальные»f(N,m)
возвращает N-значное число с внутренним сечением,2
а граница шириной m1
на каждой сторонеg(N,m)
делает то же самое, но с использованием7
для «цвета» внутреннего сечения, так как он больше соответствует текстуре конусаВыход
источник
Perl 6, 175
Довольно простая реализация без особой игры в гольф, просто посторонние пробелы и знаки препинания:
источник