У видаленому запитанні 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)
*
*#
#*
*##
#**
*##
*###
##**
**##
###*
*####
###**
***##
###**
*####
*#####
####**
***###
###***
**####
#####*
*######
#####**
***####
###****
***####
#####**
*######
*#######
######**
***#####
####****
****####
#####***
**######
#######*
*########
#######**
***######
#####****
*****####
#####****
***######
#######**
*########
*#########
########**
***#######
######****
*****#####
#####*****
****######
#######***
**########
#########*