В уже удаленном вопросе stackoverflow кто-то опубликовал следующее:
Напишите программу или функцию для печати чередующихся шаблонов *
и #
на основе заданного целого числа n
. Несколько примеров:
Вход: n=1
Выход:
*
Входной n=5
Выход:
*####
###**
***##
###**
*####
Вход: n=8
Выход:
*#######
######**
***#####
####****
****####
#####***
**######
#######*
Так как это выглядело довольно крутой задачей для игры в гольф, вот оно.
Как строятся эти шаблоны?
Первая строка начинается с единственного *
, сопровождаемого n-1
количеством трейлинга #
.
Вторая строка содержит две *
, с n-2
количеством ведущих #
.
Третья строка начинается с трех *
, за которыми следует n-3
количество трейлингов #
.
и т.п.
Как только мы достигли середины ( n/2
), мы производим обратный отсчет с количеством *
, которое можно увидеть в приведенных выше примерах.
ОБРАТИТЕ ВНИМАНИЕ, что для нечетных входных чисел обратная пара строк (первая и последняя; вторая и следующая за последней; и т. Д.) Абсолютно одинакова. В n=5
примере первые и последние строки являются *####
; вторая и следующая за последней строки ###**
.
Однако для четных входных чисел обратная пара линий перевернута. В n=8
примере первая и последняя строки - это *#######
и #######*
; вторая и следующая за последней строки являются ######**
и **######
; и т.п.
Правила вызова:
- Вы можете использовать любые два различных печатаемых символа вместо
*
и#
. Вы можете использоватьA
иB
;3
и7
;<
и>
; и т.д. Пожалуйста, укажите в ваших ответах, что вы использовали. - Вы можете предположить,
n
что будет положительным целым числом (>= 1
) - Вам разрешено выводить список / массив строк для каждой строки или двумерную матрицу символов вместо печати их в STDOUT.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Контрольные примеры (сначала n=1
через n=10
)
*
*#
#*
*##
#**
*##
*###
##**
**##
###*
*####
###**
***##
###**
*####
*#####
####**
***###
###***
**####
#####*
*######
#####**
***####
###****
***####
#####**
*######
*#######
######**
***#####
####****
****####
#####***
**######
#######*
*########
#######**
***######
#####****
*****####
#####****
***######
#######**
*########
*#########
########**
***#######
######****
*****#####
#####*****
****######
#######***
**########
#########*