Створення перехрещеної площі


23

Створення перехрещеної площі

Вам слід ввести ціле число одного або декількох і вивести квадрат, зроблений будь-яким друкованим символом на ваш вибір, діагональним хрестом через центр.

Загальна ідея полягає у тому, щоб вихід був порожнистим квадратом, який має діагональний хрест через нього:

Input: 7
Output:
*******
*#   #*
* # # *
*  #  *
* # # *
*#   #*
*******

У наведеному вище прикладі '*' представляють зовнішню коробку, а '#' - діагональний хрест.

Зауважте, що у наведеному вище прикладі використовуються два різних символи, щоб було легше побачити, як виглядає вихід, ваша програма повинна використовувати лише один символ.

Вхідні дані

Ціле число 1 або більше, воно гарантовано буде непарним.

Вихід

Квадрат, який складається із обраного вами персонажа із хрестом через середину.

  • Хрест повинен бути діагональним
  • Квадрат може бути виведений за допомогою функції або записаний для виведення
  • Нові рядки в порядку
  • Ви можете виводити у вигляді графіки, діаграми чи зображення, якщо бажаєте

Приклади

Input: 1
Output:
*

Input: 3
Output:
***
***
***

Input: 5
Output:
*****
** **
* * *
** **
*****

Input: 7
Output:
*******
**   **
* * * *
*  *  *
* * * *
**   **
*******

Технічні характеристики

  • Дозволені функції або повні програми
  • Ви можете отримати вхід за допомогою бажаних способів
  • Стандартні лазівки заборонені
  • Програми повинні працювати без додаткових висловлювань, тобто usingв C#, вони повинні бути включені у запис
  • Ви можете виводити з функції або друкувати результат

Це кодовий гольф, тому найкоротше рішення виграє.


1
Чи могли б ми також індексувати ці результати 0,1,2,3,...?
flawr

@flawr Я не на 100% впевнений, що ти маєш на увазі
TheLethalCoder

@TheLethalCoder Він запитує, чи може він взяти введення nта надрукувати квадрат за розміром 2n+1.
Мартін Ендер

@MartinEnder О, так у моїх прикладах введення 1 дає, *але для нього це буде введення 0?
TheLethalCoder

1
@TheLethalCoder Так, і введення 1дасть ваш приклад для 3.
Мартін Ендер

Відповіді:


9

MATL , 20 19 17 байт

2-:XdtP!+~TTYa1YG

Ви можете спробувати експериментально в мережі MATL . Можливо, вам доведеться оновити сторінку, якщо вона не працює.

Проба зразка:

enter image description here

Версія ASCII: 19 байт

2-:XdtP!+~TTYa~42*c

Спробуйте в Інтернеті!


Але принаймні переконайтесь, що лінії паралельні та прямокутні. : D
недолік

@flawr Гм? Що ви маєте на увазі?
Луїс Мендо

Принаймні посередині виглядає так, ніби сторони квадратів нахилені, але це просто ілюзії. Або це? (Можливо, також буде чорна діра за моїм екраном, викривляючи космічний час.)
недолік

@flawr Або, можливо, піти до очного лікаря :-P
Луїс Мендо

Не працює над MATL в Інтернеті, версія 19.0.0.
Гммм

16

VBA Excel, 168 байт

Інструкція:

Я вважаю, що Excel за допомогою VBA є ефективним і достатнім інструментом для цього завдання. Встановіть робочий аркуш Excel наступним чином

enter image description here

Так, ми використовуємо маленькі класичні пікселі квадратної форми, як у старі часи, використовуючи комірки на робочому аркуші як пікселі. Ха-ха ...

Тут я використовую комірку А1 як вхідний і змінюю її колір шрифту на червоний. Чому червоний? Оскільки червоний колір має три літери, то він підходить для гри в гольф. Напишіть та запустіть такий код у Негайне вікно:

N=[A1]:Range("A1",Cells(N,N)).Interior.Color=vbRed:Range("B2",Cells(N-1,N-1)).Clear:For i=1To N:Cells(i,i).Interior.Color=vbRed:Cells(i,N+1-i).Interior.Color=vbRed:Next

Невикористаний код:

Sub A()
    N = [A1]
    Range("A1", Cells(N, N)).Interior.Color = vbRed
    Range("B2", Cells(N - 1, N - 1)).Clear

    For i = 1 To N
        Cells(i, i).Interior.Color = vbRed
        Cells(i, N + 1 - i).Interior.Color = vbRed
    Next
End Sub

Покрокове пояснення:

N = [A1]: Range("A1", Cells(N, N)).Interior.Color = vbRed

enter image description here

Range("B2", Cells(N - 1, N - 1)).Clear

enter image description here

Прокручування по діагоналі комірок діапазону: Cells(i, i).Interior.Color = vbRed

enter image description here

Заключний крок та вихід: Cells(i, N + 1 - i).Interior.Color = vbRed

enter image description here


Cells.RowHeight=48:set r=[A1]:r.Resize(r,r).Interior.Color=0:[B2].Resize(r-2,r-2).Clear:For i=1To[A1]:set r=Union(r,Cells(i,i),Cells(i,r-i+1)):Next:r.Interior.Color=0
Тейлор Скотт

8

JavaScript (ES6), 96 байт

f=
n=>[...Array(n--)].map((_,i,a)=>a.map((_,j)=>i&&j&&n-i&&n-j&&i-j&&n-i-j?' ':'*').join``).join`
`
;
<input type=number min=1 step=2 oninput=  o.textContent=f(this.value)><pre id=o>


7

Python 2, 65 байт

i=n=2**input()/2
while i:print bin((n>i>1or~-n)|n|i|n/i)[2:];i/=2

Використовує ідею Джонатана Аллана про виведення двійкових чисел, таких як:

11111
11011
10101
11011
11111

Рядки створюються з бітною арифметикою та відображаються у двійковій формі. Кожну частину вона вводила в решту. Частина виробляється потужністю 2 n(фіксованої) і i(падаючої) через

  1. Ліва сторона 1
  2. Права сторона n
  3. Діагоналі iтаn/i
  4. Вгорі та внизу, n-1коли i==1або i==n.

Насправді, (1) і (4) поєднуються, виробляючи 1коли 1<i<nі в n-1іншому випадку.


7

Пітона, 114 110 96 90 байт

Повна зміна:

lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)]

Повертає список рядків, символів за допомогою 1та 0.
-6 байт завдяки TheBikingViking

Перевірте це на ideone


Попередній Python 2 @ 110

def f(n):g=range(n);n-=1;print'\n'.join(''.join((c in(r,n-r,0,n)or r in(0,n))and'#'or' 'for c in g)for r in g)

Перевірте це на ideone


Зберегти 6 байт шляхом перетворення в лямбда і реструктуризації і чи вираз: lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)].
TheBikingViking

@TheBikingViking Ах, ти маєш рацію - я справді мав би покататися на гольфі, щоб трохи пожовкнути (мій початковий намір), перш ніж ставити ідею там і спати: p.
Джонатан Аллан

7

Java 7, 131 130 128 125 124 122 байт

String c(int n){String r="";for(int i=n,j;n-->0;r+="\n")for(j=0;j<n;r+=i*j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ");return r;}

3 байти збережено завдяки @LeakyNun ;
1 байт збережено завдяки @ OliverGrégoire у моїй відповіді за « Намалюй порожнистий квадрат» з заданою шириною ;
2 байти збережено завдяки @cliffroot .

Невикористаний і тестовий код

Спробуйте тут.

class M{
  static String c(int n){
    String r = "";
    for(int i = n, j; n-- > 0; r += "\n"){
      for(j = 0; j < n;
            r += i < 1      // Responsible for the first horizontal line
               | j < 1      // Responsible for the first vertical line
               | n-i < 2    // Responsible for the last horizontal line
               | n-j < 2    // Responsible for the last vertical line
               | i == j     // Responsible for the top-left to bottom-right diagonal line
               | i == n-++j // Responsible for the top-right to bottom-left diagonal line (and increasing j)
             ? "*"
             : " ");
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(1));
    System.out.println(c(3));
    System.out.println(c(5));
    System.out.println(c(7));
  }
}

Вихід:

*

***
***
***

*****
** **
* * *
** **
*****

*******
**   **
* * * *
*  *  *
* * * *
**   **
*******

1
String c(int n){String r="";for(int i=-1,j;++i<n;r+="\n")for(j=0;j<n;r+=i<1|j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ")return r;}4 байти збережено
Leaky Nun

@LeakyNun 3 насправді. Вам все одно знадобиться ;позаду внутрішньої петлі.
Kevin Cruijssen

1
по-перше, я вважаю, що це має бути i-->0замість цього, n-->0і ви можете також використовувати i*j<1замість i<1|j<1 2 байт
cliffroot

@cliffroot Звичайно, потрібно було щось знайти. Hehe, jk, дякую! ;) Я пам’ятаю, що я щось подібне робив раніше в іншій відповіді, так досить погано, що я забув це зробити тут ..: S
Кевін Круїссен

6

Матлаб, 68 66 64 58 байт

Оскільки графічний вихід також дозволений:

k=input('');[x,y]=ndgrid(abs(-k:k));spy(~(max(x,y)<k&x-y))

Які результати, наприклад

enter image description here

Тільки версії ascii були б:

Для цього використовується індексація 0,1,2,3,...

k=input('');[x,y]=ndgrid(abs(-k:k));[(max(x,y)==k|~(x-y))*42,'']

Як варіант з індексуванням 1,3,7,...:

n=input('');k=1:n;m=eye(n);m([k,end-k+1])=1;[(m|flip(m'))*42,'']

Приємно, що графічний вихід не тільки виглядає краще, а й здорово, що він також коротший в байтах. Зазвичай створення чогось більш графічного замість простого ASCII тільки збільшить кількість байтів (як правило, на багато).
Кевін Кройсейсен

6

C #, 112 101 байт

Дякую TheLethalCoder за те, що він нагадав мені, що ці анонімні висловлювання лямбда-висловлювання і виразу дозволені в C #

n=>{var r="";for(int y=n--,x;y-->0;r+="*\n")for(x=0;x<n;r+=y%n*x<1|y==x|y==n-x++?"*":" ");return r;};

Хто сказав, що C # не є цікавою мовою для гольфу?


Я знаю, правда? 27591 байт: p
Джонатан Аллан

5

Логотип, 155 байт

Графічне рішення, реалізоване як функція

Я переробив свою відповідь на трикутник з алфавітом і трохи змінив кути. Як і раніше, rмалює лінію символів. Цього разу bфункція малює поле, малюючи один прямий край і одну діагональ, обертаючись і повторюючи чотири рази. Це призводить до того, що діагоналі малюються двічі (один на одного), але це було менше коду, ніж обробляти його окремо. Ця відповідь також належним чином обробляє парні числа. Мені довелося додати спеціальну обробку для введення1 щоб не допустити її руху вперед.

Я реалізував це як функцію, b яка приймає розмір як аргумент:

pu
to r:n:b:l repeat:n[rt:b label "A lt:b if repcount>1[fd:l]] end
to b:s
repeat 4[rt 90
r:s 90-heading 20 rt 135
r:s 90-heading 20*sqrt 2 rt 45]
end

Спробуйте це на інтерпретаторі логотипів Calormen.com . Щоб зателефонувати, додайте рядок та зателефонуйте bу такому форматі:

b 7

Sample of size 7

... або спробуйте блюдо для пробовідбору, яке малює чотири зразки розмірами 5, 7, 9 та 11, обертаючись на 90 градусів між ними:

repeat 4[
  b repcount*2+3
  rt 90
]

Sample of multiple sizes


4

R, 102 байти

    n=scan();for(i in 1:n){for(j in 1:n){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(1,i,n))z="*";cat(z)};cat("\n")}

Зверніть увагу, що умову виразити ефективніше, використовуючи% у%, ніж i == 1 | j == 1 | ...


Можна відіграти один символ, якщо гарантовано, що вхід буде більше одного: n=scan();for(i in n:1){for(j in n:2){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(i,n))z="*";cat(z)};cat("*\n")}
JDL


4

Haskell, 102 100 96 91 87 байт

c s=unlines.f$f.(#)where f=(<$>[1..s]);x#y|elem y[1,s,x]||elem x[1,s,s-y+1]='*'|1>0=' '
  • Збережено 2 байти, завдяки недостатності .
  • Збережено ще 4 байти за допомогою розуміння списку.
  • Збережено 5 байт, поєднуючи поліпшення flawr іany
  • 4 байти, збережені заміною anyнаelem

Негольована версія:

cross :: Int -> String
cross s = unlines $ map line [1..s]
    where line y = map (pos y) [1..s]
          pos y x | x == y = '*'
                  | x == s - y + 1 = '*'
                  | y `elem` [1, s] = '*'
                  | x `elem` [1, s] = '*'
                  | otherwise = ' '

Я впевнений, що це все ще можна вдосконалити, але ось що я придумав зараз.

Стара версія:

c s=unlines.f$f.(#)where f=(<$>[1..s]);x#y|any(==y)[1,s,x]||any(==x)[1,s,s-y+1]='*'|1>0=' '

2
Ви використовуєте [1..s]двічі, я думаю, ви могли це визначити where.
недолік

Це також призведе до 102 байтів, оскільки нам доведеться додати додаткове місце перед ключовим словом де. c s=unlines$(\m->(m#)<$>z)<$>z where z=[1..s];m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
sudee

1
Ага так, але ви можете спакувати <$>[1..s]функцію, правда? Likec s=unlines$f(\m->f(m#))where m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' ';f=(<$>[1..s])
flawr

Добре, що це дійсно працює. :)
sudee

1
PS:c s=unlines$f$f.(#)where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
недолік

3

Java, 130 байт

s->{for(int i=0;i<s;i++)for(int j=0;j<s;j++)System.out.print((s-1-i==j||i==j||i==0||j==0||i==s-1||j==s-1)?j==s-1?"*\n":"*":" ");};

Тестова програма

Consumer<Integer> consumer = s -> {
        for (int i = 0; i < s; i++) {
            for (int j = 0; j < s; j++) {
                System.out.print((s - 1 - i == j || i == j || i == 0 || j == 0 || i == s - 1 || j == s - 1) ? j == s - 1 ? "*\n" : "*" : " ");
            }
        }
    };

    consumer.accept(20);

+1! Я б зазначив, що це Java 8, btw. Крім того, ви можете трохи пограти в гольф, видаливши int попередньо jі int i=0,j;замість цього використати . Ви також можете замінити всі ||з |і видалити дужки в потрійний-чеку. Також ви використовуєте s-1чотири рази, тому я би поставив це в змінну. Також ви можете змінити ==0на<1 . Таким чином, це загалом стає s->{for(int i=0,j,x=s-1;i<s;i++)for(j=0;j<s;j++)System.out.print(x-i==j|i==j|i<1|j<1|i==x|j==x?j==x?"*\n":"*":" ");}( 116 байт ) Зовсім коротше, ніж моя відповідь на Java 7 , такий приємний підхід!
Kevin Cruijssen

1
@KevinCruijssen Я завжди закінчуюсь коротшою відповіддю, але більше можливостей для вдосконалення, ніж ти, LMAO. Добре гольф мій друг.
Шон Уайлд

Хе-хе. xD Не соромтеся використовувати версію 116 байт btw. Це ваш код, просто вигравши ще трохи. ;) У моїй відповіді Java 7 (яка, на жаль, довша) використовується дещо інший підхід. Якби я відредагував його у 116-байтній версії, я б в основному вкрав вашу відповідь, чого я не хочу.
Kevin Cruijssen

Немає сенсу просто копіювати та вставляти ваші гольфи, я зазвичай розміщую швидкий макет, а потім повертаюся до нього пізніше, щоб побачити, чи не пропустив я щось, що могло б стати в гольф. Але ти РІЗНУЄТЬСЯ ДЛЯ МЕЕ :(
Shaun Wild

Ах вибачте. Більшість порад, які я дав, насправді є в Порадках щодо гольфу на Яві . Я думаю, що я просто 2quick4u. ;)
Кевін Круїссен

3

C, 140 121 114 байт

19 байт завдяки Квентіну.

7 байтів, збережених шляхом переходу з двовкладеного циклу в один цикл.

main(a){scanf("%d",&a);for(int i=0;i<a*a;i++,i%a||puts(""))putchar(i/a&&i/a^a-1&&i%a&&-~i%a&&i%-~a&&i%~-a?32:42);}

Пропозиції з гольфу вітаються.


Я ніколи не програмую на C, але чи не можливо розмістити Int в першому циклі, як у Java? Тобто int i,j;for(i=0;доfor(int i=0,j;
Kevin Cruijssen

1
Востаннє, коли я використовував C, ви навіть не могли поставити int i,j;після scanf!
Ніл

Спробуйте n+~i-jі т.д.
Ніл

GCC чудово видаляється #includeповністю.
Квентін

@Neil Що ти маєш на увазі під тим, що ти не зміг цього поставити після цього?
Лина монашка

3

PowerShell (133)

filter s($x){1..$x|%{$o="";$r=$_;1..$x|%{if($_-eq1-or$r-eq1-or$_-eq$x-or$r-eq$x-or$r-eq$_-or$r-1-eq$x-$_){$o+="*"}else{$o+="_"}};$o}}

Клункі, але він працює досить добре.

s(11)
***********
**_______**
*_*_____*_*
*__*___*__*
*___*_*___*
*____*____*
*___*_*___*
*__*___*__*
*_*_____*_*
**_______**
***********

Пропозиції з гольфу, безумовно, вітаються, тому що я вже задовго пройшов PowerShell'd.


3

SILOS , 212 байт

readIO 
a = i
lbla
a - 1
t = a
t + 1
t % i
t * a
b = i
lblb
b - 1
u = b
u + 1
u % i
u * b
u * t
v = a
v - b
u * v
v = a
v + b
v + 1
v % i
u * v
u |
if u c
print #
GOTO d
lblc
print .
lbld
if b b
printLine 
if a a

Спробуйте в Інтернеті!


:) дякую, що привернули більше уваги до цієї мови
Rohan Jhunjhunwala

1
@RohanJhunjhunwala Мені подобалось програмувати в ньому, дякую за те, що створив таку блискучу мову.
Leaky Nun

3

GNU sed, 117 114 + 1 (r прапор) = 115 байт

p;/^0$/Q;/^000$/{p;q}
h;s/./ /3g;s/  $/00/
:f;/ 00 /!{G;h;s/\n.*//p;t;:}
s/^(0 *)0  ?( *)0/\1 0\20 /
tf;s/00/0/p;g

Оскільки sed не має вбудованої підтримки чисел, вхід наводиться одинаково на основі цього консенсусу . Друга половина квадрата - це перша половина, яка зберігалася у зворотному порядку у просторі утримування.

Виконати:

sed -rf crossed_square.sed <<< "00000"

Вихід:

00000
00 00
0 0 0
00 00
00000

3

Пітон, 89 байт

Це був відкат! Я використовував модуль черепахи пітона.

from turtle import*
n=input()
for i in[(n,n),(n,0),(0,n),(0,0),(n,0),(0,n),(n,n)]:goto(i)

Ось результат, коли n = 200:

enter image description here


1
+1 для творчості
mbx

2

Scala, 141 137 байт

val s=args(0).toInt-1;val t=0 to s;print(t.map{x=>t.map{y=>if(x==0||x==s||y==0||y==s||x==y||x==s-y)"*" else " "}.mkString+"\n"}.mkString)

Виконати:

$ scala cross.scala 10

Технічно я міг видалити друкований матеріал і перейти до чогось подібного

def c(n:Int)={val (s,t)=(n-1,0 to n-1);t.map{x=>t.map{y=>if(x==0||x==s||y==0||y==s||x==y||x==s-y)"*" else " "}.mkString+"\n"}.mkString}

Це зробило б це 135 або 121 байт залежно від того, чи будете ви рахувати вміст синтаксису функції.

Читаема версія:

def cross(n: Int) = {
   // Declares both s and t as variables with tuple expansion
   // s is the zero-based size and t is a range from 0 to s
   val (s,t) = (n-1, 0 to n-1)

   // Maps all rows by mapping the columns to a star or a space
   t.map { x =>
      t.map { y =>
        if (x == 0 || x == s || y == 0 || y == s || x == y || x == s-y) "*" 
        else " "
      }.mkString+"\n" // Concatenate the stars and spaces and add a newline
   }.mkString         // Concatenate the created strings
 }


2

Python 2, 83 байти

i=n=input()
while i:l=['* '[1<i<n]]*n;i-=1;l[0]=l[~0]=l[i]=l[~i]='*';print`l`[2::5]

Модифікує список символів рядка, щоб поставити *на перше, останнє, i-е та останнє місце. Перший і останній ряд починаються як усі *, а решта - як усі пробіли. Працює і для евенів. lambdaВираз, ймовірно , коротше , ніж модифікації, але мені подобається цей метод.



2

Математика, 81 байт

""<>#&/@Table[If[i^2==j^2||i^2==#^2||j^2==#^2,"*"," "],{i,-#,#},{j,-#,#}]&[(#-1)/2]&

Створює систему координат з початком у центрі та обчислює, куди *слід перейти s. Виводить масив рядків, по одному на рядок.


2

Javascript ( 289 270 байт)

function s(a){b=[];for(i=0;i<a;i++)if(b.push([]),0==i||i==a-1)for(j=0;j<a;j++)b[i].push("*");else for(j=0;j<a;j++)0==j||j==a-1?b[i].push("*"):j==i||a-1-j==i?b[i].push("*"):b[i].push(" ");c="";for(i=0;i<b.length;i++){for(j=0;j<b[i].length;j++)c+=b[i][j];c+="\n"}return c}

Безголівки:

function square(size){
str=[];

for(i=0;i<size;i++){
    str.push([]);
    if(i==0||i==size-1){
        for(j=0;j<size;j++){
            str[i].push("*");
        }
    }else{
        for(j=0;j<size;j++){
            if(j==0||j==size-1){
                str[i].push("*");
            }else if(j==i||size-1-j==i){
                str[i].push("*");
            }else{
                str[i].push(" ");
            }
        }
    }
}

out="";
for(i=0;i<str.length;i++){
    for(j=0;j<str[i].length;j++){
        out+=str[i][j];
    }
    out+="\n";
}
return out;
}

EDIT: Збережено 19 байт завдяки Філіпу Фленкеру.


Оскільки введення нових рядків у порядку, я думаю, вам не потрібно чекsize==1
Філіп Фленкер

1
@PhilippFlenker Правильно.
Пол Шмітц

1

Perl, 83 +1 = 84 байти

Біжи з -nпрапором.

$\="*
*";print$c="*"x($_+1);for$b(1..$_){@a=($")x$_;@a[$b-1,-$b]=(a,a);print@a}say$c

Буквальний новий рядок економить 1 байт над \nабо $/.

Читає:

$\="*\n*";
print$c="*"x($_+1);
for$b(1..$_){
    @a=($")x$_;
    @a[$b-1,-$b]=(a,a);
    print@a
}
say$c

Код роздруковує верхню лінію та зберігає її $c, а потім друкує купу пробілів із відповідними слотами, заміненими наa s, після чого знову надрукує верхню лінію.

Призначення $\змінної вказує інтерпретатору друкувати вміст (зірочку, новий рядок та іншу зірочку) після кожного print, але це НЕ відбувається після a say.


1

SmileBASIC, 46 байт

INPUT I
GBOX I,I,1,1GLINE 1,I,I,1GLINE 1,1,I,I

(Ні, SB не використовує 1-індексовану графіку ...)


1

Вугілля деревне вугілля, 8 байт (неконкуренто; виклик мовних публікацій)

GH+↘↑↙N*

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення: Якщо використовується як параметр PolygonHollowкоманди, +малює поле, а стрілки потім створюють діагоналі. Є деякі інші символи ярликів, але їх потрібно буде переосмислити, щоб бути корисними, наприклад, Yце еквівалентно, ↖↗↓але якщо це було б еквівалентно, ↗↓↖то Y+було б достатньо.


1

SHELL ( 135 байт ):

 C(){ j=$(($1-1));for i in $(seq 0 $j);do dc<<<2o10i`echo $((1|2**$i|2**($j-$i)|2**$j|(($i==0||$i==$j))*(2**$j-1)))`p;done|tr 01 ' X';}

тести:

 C 1
 X

 C 3
 XXX
 XXX
 XXX

 C 5
 XXXXX
 XX XX
 X X X
 XX XX
 XXXXX

 C 7
 XXXXXXX
 XX   XX
 X X X X
 X  X  X
 X X X X
 XX   XX
 XXXXXXX

 C 9
 XXXXXXXXX
 XX     XX
 X X   X X
 X  X X  X
 X   X   X
 X  X X  X
 X X   X X
 XX     XX
 XXXXXXXXX

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.