У видаленому запитанні 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
) - Вам дозволяється виводити список / масив рядків для кожного рядка або 2D матрицю символів, замість того, щоб друкувати їх у STDOUT.
Загальні правила:
- Це код-гольф , тому найкоротша відповідь у байтах виграє.
Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування. - Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу повернення. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду.
- Також настійно рекомендується додавати пояснення до своєї відповіді.
Тестові приклади (спочатку n=1
до n=10
)
*
*#
#*
*##
#**
*##
*###
##**
**##
###*
*####
###**
***##
###**
*####
*#####
####**
***###
###***
**####
#####*
*######
#####**
***####
###****
***####
#####**
*######
*#######
######**
***#####
####****
****####
#####***
**######
#######*
*########
#######**
***######
#####****
*****####
#####****
***######
#######**
*########
*#########
########**
***#######
######****
*****#####
#####*****
****######
#######***
**########
#########*