Tworzenie skrzyżowanego kwadratu


23

Tworzenie skrzyżowanego kwadratu

Musisz wprowadzić liczbę całkowitą jednego lub więcej i wyprowadzić kwadrat wykonany z dowolnego wybranego przez Ciebie znaku do wydrukowania z ukośnym krzyżem przez środek.

Ogólną ideą jest, aby wyjście było pustym kwadratem, który ma przekątną:

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

W powyższym przykładzie „*” oznaczają zewnętrzną ramkę, a „#” oznaczają przekątny krzyż.

Zauważ, że powyższy przykład używa dwóch różnych znaków, aby łatwiej było zobaczyć, jak wygląda wynik, twój program powinien używać tylko jednego znaku.

Wkład

Liczba całkowita równa 1 lub więcej, na pewno jest nieparzysta.

Wydajność

Kwadrat, na który składa się wybrana postać, z krzyżem pośrodku.

  • Krzyż musi być ukośny
  • Kwadrat może być wyprowadzany za pomocą funkcji lub zapisywany w wyniku
  • Końcowe znaki nowej linii są w porządku
  • Może również wyświetlać jako grafikę, diagram lub obraz

Przykłady

Input: 1
Output:
*

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

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

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

Okular

  • Funkcje lub pełne programy są dozwolone
  • Możesz uzyskać wkład w preferowany sposób
  • Standardowe luki są niedozwolone
  • Programy muszą działać bez żadnych dodatkowych instrukcji, tj. usingW C#, muszą być zawarte we wpisie
  • Możesz wyprowadzić dane z funkcji lub wydrukować wynik

To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie.


1
Czy możemy również indeksować te wyniki 0,1,2,3,...?
— flawr

@flawr Nie jestem w 100% pewien, co masz na myśli
— TheLethalCoder

@TheLethalCoder Pyta, czy może wziąć dane wejściowe ni wydrukować kwadrat wielkości 2n+1.
— Martin Ender,

@MartinEnder Och, więc w moich przykładach dane wejściowe 1 dają, *ale dla niego będą to dane wejściowe 0?
— TheLethalCoder

1
@TheLethalCoder Tak, a dane wejściowe 1dadzą przykład 3.
— Martin Ender,

Odpowiedzi:


9

MATL , 20 19 17 bajtów

2-:XdtP!+~TTYa1YG

Możesz spróbować eksperymentalnie w MATL online . Może być konieczne odświeżenie strony, jeśli nie działa.

Przykładowy przebieg:

enter image description here

Wersja ASCII: 19 bajtów

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

Wypróbuj online!


Ale przynajmniej upewnij się, że linie są równoległe i prostokątne. : D
— wada

@flawr Hm? Co masz na myśli?
— Luis Mendo,

Przynajmniej na środku wygląda tak, jakby boki kwadratów były nachylone, ale to tylko złudzenie. Albo to jest? (Może być również czarną dziurą za moim ekranem, wypaczającą czasoprzestrzeń.)
— flawr

@flawr A może pójść do okulisty :-P
— Luis Mendo

Nie działa w trybie MATL online, wersja 19.0.0. Hmmm ...
— Erik the Outgolfer

16

VBA Excel, 168 bajtów

Instrukcja:

Uważam, że Excel za pomocą VBA jest skutecznym i wystarczającym narzędziem do tego wyzwania. Ustaw arkusz roboczy programu Excel w następujący sposób

enter image description here

Tak, używamy małych, klasycznych kwadratowych pikseli jak za dawnych czasów, używając komórek w arkuszu jako pikseli. Ha ha...

Tutaj używam komórki A1 jako danych wejściowych i zmieniam kolor czcionki na czerwony. Dlaczego czerwony Ponieważ czerwony ma trzyliterowy kolor, więc pasuje do gry w golfa. Napisz i uruchom następujący kod w oknie natychmiastowym:

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

Ungolfed kod:

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

Objaśnienie krok po kroku:

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

Pętla po przekątnej komórek zakresu: Cells(i, i).Interior.Color = vbRed

enter image description here

Ostatni krok i wynik: 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
— Taylor Scott

8

JavaScript (ES6), 96 bajtów

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 bajtów

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

Wykorzystuje pomysł Jonathana Allana wyprowadzania liczb binarnych, takich jak:

11111
11011
10101
11011
11111

Wiersze są tworzone za pomocą arytmetyki bitów i wyświetlane w postaci binarnej. Każda część to lub reszta. Części są wytwarzane przez moce 2 n(ustalone) i i(spadające) przez

  1. Lewa strona 1
  2. Prawa strona n
  3. Przekątne iin/i
  4. Góra i dół według n-1terminu i==1lub i==n.

W rzeczywistości, (1) i (4) są łączone przez wytwarzanie, 1kiedy 1<i<ni n-1inaczej.


7

Python, 114 110 96 90 bajtów

Całkowicie zmieniony:

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)]

Zwraca listę ciągów znaków, znaków używających 1i 0.
-6 bajtów dzięki TheBikingViking

Przetestuj to w ideone


Poprzedni 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)

Przetestuj na ideonie


Zaoszczędzić 6 bajtów przez przekształcenie lambda i restrukturyzacji i albo wzoru: 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 Ach, masz rację - naprawdę powinienem był zagrać w golfa, aby trochę się zakręcić (mój pierwotny zamiar), zanim przedstawię ten pomysł i przespać: str.
— Jonathan Allan

7

Java 7, 131 130 128 125 124 122 bajtów

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 bajty zapisane dzięki @LeakyNun ;
1 bajt zapisany dzięki @ OliverGrégoire w mojej odpowiedzi na losowanie pustego kwadratu # przy danym wyzwaniu szerokości ;
2 bajty zapisane dzięki @cliffroot .

Kod niepoznany i testowy:

Wypróbuj tutaj.

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));
  }
}

Wydajność:

*

***
***
***

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

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

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;}Zapisano 4 bajty
— Leaky Nun

@LeakyNun 3 faktycznie. Nadal potrzebujesz ;wewnętrznej pętli for.
— Kevin Cruijssen

1
po pierwsze, uważam, że tak powinno być, i-->0a zamiast 2 bajtów n-->0można również użyći*j<1i<1|j<1
— cliffroot

@cliffroot Oczywiście pan miał coś znaleźć. Hehe, jk, dzięki! ;) Pamiętam, że zrobiłem już coś takiego w innej odpowiedzi, więc całkiem źle, że zapomniałem to zrobić tutaj: S
— Kevin Cruijssen

6

Matlab, 68 66 64 58 bajtów

Ponieważ dozwolone są również dane graficzne:

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

Które wyjścia np

enter image description here

Wersje tylko ascii to:

To używa indeksowania 0,1,2,3,...

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

Alternatywnie z indeksowaniem 1,3,7,...:

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

Fajnie, wyjście graficzne nie tylko wygląda lepiej imo, ale fajnie, że jest również krótsze pod względem bajtów. Zwykle zrobienie czegoś bardziej graficznego zamiast zwykłego ASCII zwiększyłoby tylko liczbę bajtów (zwykle o wiele).
— Kevin Cruijssen

6

C #, 112 101 bajtów

Dzięki TheLethalCoder za przypomnienie mi, że te anonimowe wyrażenia ani wyrażenie lambda są dozwolone w języku 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;};

Kto powiedział, że C # nie jest fajnym językiem golfa?



5

Logo, 155 bajtów

Rozwiązanie graficzne, zaimplementowane jako funkcja

Zmodyfikowałem swoją odpowiedź dla Alphabet Triangle i nieco zmieniłem kąty. Tak jak poprzednio, rrysuje linię znaków. Tym razem bfunkcja rysuje ramkę, rysując jedną prostą krawędź i jedną ukośną, obracając i powtarzając cztery razy. Powoduje to, że przekątne są rysowane dwa razy (jeden na drugim), ale było mniej kodu niż osobne obchodzenie się z nim. Ta odpowiedź również poprawnie obsługuje liczby parzyste. Musiałem dodać specjalną obsługę dla danych wejściowych, 1aby zapobiec dalszemu rozwojowi.

Zaimplementowałem go jako funkcję, bktóra przyjmuje wielkość jako argument:

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

Wypróbuj to na interpreterze logo Calormen.com . Aby go wywołać, dodaj linię i zadzwoń bw następującym formacie:

b 7

Sample of size 7

... lub wypróbuj talerz samplera, który pobiera cztery próbki w rozmiarach 5, 7, 9 i 11, obracając się o 90 stopni pomiędzy:

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

Sample of multiple sizes


4

R, 102 bajty

    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")}

Zauważ, że bardziej wydajne jest wyrażenie warunku przy użyciu% w% niż i == 1 | j == 1 | ...


Możliwe jest 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")}
— zagranie


4

Haskell, 102 100 96 91 87 bajtów

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=' '
  • Oszczędność 2 bajtów dzięki flawr .
  • Zaoszczędzono jeszcze 4 bajty, używając wyrażeń listowych.
  • 5 bajtów zaoszczędzonych łącząc ulepszenie flawr zany
  • 4 bajty zapisane zastępując anyzelem

Wersja bez golfa:

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 = ' '

Jestem pewien, że można to jeszcze poprawić, ale na to właśnie wpadłem.

Stara wersja:

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
Używasz [1..s]dwa razy, myślę, że możesz to zdefiniować where.
— flawr

Spowodowałoby to również 102 bajty, ponieważ musielibyśmy dodać dodatkową spację przed słowem kluczowym where. 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
Ach tak, ale możesz spakować <$>[1..s]do funkcji, prawda? 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

Dobrze, że to naprawdę działa. :)
— 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=' '
— flawr

3

Java, 130 bajtów

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":"*":" ");};

Program testowy

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! Podałbym, że jest to Java 8, btw. Możesz też trochę zagrać w golfa, usuwając int przedtem ji int i=0,j;zamiast tego użyj . Można też wymienić wszystkie ||z |i usuń nawiasy w potrójnym-check. Używasz także s-1cztery razy, więc umieściłbym to w zmiennej. Można także zmienić ==0się <1. Więc w sumie staje się 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 bajtów ) Dość trochę krótszy niż moja odpowiedź Java 7 , więc fajne podejście!
— Kevin Cruijssen

1
@KevinCruijssen Zawsze kończę na krótszej odpowiedzi, ale mam więcej miejsca na ulepszenia niż ty LMAO. Dobrze grał mój przyjaciel.
— Shaun Wild,

Hehe xD Możesz użyć 116-bajtowej wersji btw. To twój kod, po prostu grałem w golfa. ;) Moja odpowiedź na Javę 7 (która jest niestety dłuższa) używa nieco innego podejścia. Gdybym go edytował do wersji 116-bajtowej, po prostu ukradłbym twoją odpowiedź, czego nie chcę.
— Kevin Cruijssen

Nie ma sensu po prostu kopiować i wklejać twoich golfów, zwykle wysyłam szybką makietę, a następnie wracam do niej później, aby sprawdzić, czy coś przegapiłem. Ale ZRININOWAŁEŚ TO DLA MNIE :( haha ​​jk
— Shaun Wild,

O przepraszam. Większość podanych przeze mnie wskazówek znajduje się w Poradach dotyczących gry w golfa w Javie . Chyba jestem tylko 2quick4u. ;)
— Kevin Cruijssen

3

C, 140 121 114 bajtów

19 bajtów dzięki Quentin.

7 bajtów zapisanych przez przejście z podwójnie zagnieżdżonej pętli do jednej pętli.

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);}

Sugestie dotyczące gry w golfa mile widziane.


Nigdy nie programuję w C, ale czy nie jest możliwe umieszczenie int w pierwszej pętli for, jak w Javie? Czyli int i,j;for(i=0;dofor(int i=0,j;
— Kevin Cruijssen

1
Ostatni raz użyłem C nie można nawet umieścić int i,j;po scanf!
— Neil,

Spróbuj n+~i-jitd.
— Neil,

GCC jest w porządku z #includecałkowitym usunięciem .
— Quentin,

@Neil Co masz na myśli mówiąc, że nie możesz tego po tym wyrazić?
— Leaky Nun

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}}

Clunky, ale działa wystarczająco dobrze.

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

Sugestie dotyczące gry w golfa są mile widziane, minęło już dużo czasu, odkąd mam PowerShell'd.


3

SILOS , 212 bajtów

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

Wypróbuj online!


:) dzięki za zwrócenie większej uwagi na ten język
— Rohan Jhunjhunwala

1
@RohanJhunjhunwala Podobało mi się programowanie w nim, dziękuję za stworzenie tak wspaniałego języka.
— Leaky Nun

3

GNU sed, 117 114 + 1 (flaga r) = 115 bajtów

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

Ponieważ sed nie ma natywnego wsparcia dla liczb, dane wejściowe są podawane w formie jedności w oparciu o ten konsensus . Druga połowa kwadratu to pierwsza połowa, która była przechowywana w odwrotnej kolejności w miejscu do przechowywania.

Biegać:

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

Wydajność:

00000
00 00
0 0 0
00 00
00000

3

Python, 89 bajtów

To był powrót! Użyłem modułu żółwia pytona.

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

Oto wynik, gdy n = 200:

enter image description here


1
+1 za kreatywność
— mbx

2

Scala, 141 137 bajtów

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)

Biegać:

$ scala cross.scala 10

Technicznie rzecz biorąc, mógłbym usunąć wydruk i przejść do czegoś podobnego

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}

To sprawi, że będzie to 135 lub 121 bajtów w zależności od tego, czy policzysz składnię funkcji.

Wersja do odczytu:

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 bajty

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

Zmienia listę znaków wiersza, tak aby umieściła a *na pierwszym, ostatnim, i-tym i i-tym do ostatniego miejsca. Pierwszy i ostatni rząd zaczynają się jak wszystkie *, a reszta jak wszystkie spacje. Działa również na równi. lambdaEkspresja prawdopodobnie mniejsza niż zmiany, ale jak to metody.



2

Mathematica, 81 bajtów

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

Tworzy układ współrzędnych z punktem początkowym w środku i oblicza, gdzie *powinien się znaleźć s. Zwraca tablicę ciągów, po jednym na wiersz.


2

JavaScript ( 289 270 bajtów)

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}

Nie golfowany:

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;
}

EDYCJA: Zaoszczędź 19 bajtów dzięki Philippowi Flenkerowi.


Ponieważ końcowe znaki nowej linii są w porządku, myślę, że nie potrzebujesz czekusize==1
— Philipp Flenker,

1
@PhilippFlenker Correct.
— Paul Schmitz,

1

Perl, 83 +1 = 84 bajtów

Uruchom z -nflagą.

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

Dosłowna nowa linia oszczędza 1 bajt nad \nlub $/.

Czytelny:

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

Kod drukuje górną linię i zapisuje ją $c, następnie drukuje wiązkę spacji z odpowiednimi szczelinami zamienionymi na as, a następnie drukuje ponownie górną linię.

Przypisanie do $\zmiennej każe interpreterowi drukować zawartość (gwiazdka, nowa linia i kolejna gwiazdka) po każdym print, ale NIE następuje to po say.


1

SmileBASIC, 46 bajtów

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

(Nie, SB NIE używa grafiki 1-indeksowanej ...)


1

Węgiel drzewny, 8 bajtów (niekonkurencyjny; wyzwanie dotyczące postdatacji języka)

GH+↘↑↙N*

Wypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: Gdy zostanie użyty jako parametr PolygonHollowpolecenia, +rysuje ramkę, a następnie strzałki tworzą przekątne. Istnieje kilka innych znaków skrótu, ale oni muszą być na nowo może być przydatna np Yodpowiada ↖↗↓, ale jeśli to było eqivalent aby ↗↓↖potem Y+wystarczy.


1

SHELL ( 135 bajtów ):

 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';}

testy:

 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

1

Kotlin , 123 116 bajtów

zmień, jeśli za pomocą \ n, aby wydrukować

{s:Int->val n=s-1
for(r in 0..n){for(c in 0..n)print(if(n-r==c||r==c||r<1||c<1||r==n||c==n)"#"
else " ")
println()}}

Wypróbuj online!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.