Çapraz Kare Oluşturma


23

Çapraz Kare Oluşturma

Bir veya daha fazla bir tamsayı girişini almak ve merkezde çapraz bir çaprazla seçtiğiniz herhangi bir basılabilir karakterden yapılmış bir kare çıkarmanız gerekir.

Genel fikir, çıkışın üzerinde çapraz bir çapraz olan içi boş bir kare olması.

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

Yukarıdaki örnekte '*' dış kutuyu ve '#' ise çapraz çaprazı temsil eder.

Yukarıdaki örnekte, iki farklı karakter kullanıldığına dikkat edin; böylece çıktının nasıl göründüğünü görmek daha kolaydır, programınız yalnızca bir karakter kullanmalıdır.

Giriş

1 veya daha büyük bir tam sayı, tek olması garanti edilir.

Çıktı

Ortada bir çarpı işareti ile seçtiğiniz bir karakterden oluşan bir kare.

  • Haç köşegen olmalı
  • Kare işlevi aracılığıyla çıktısı alınabilir veya çıktıya yazılabilir.
  • Son satırlar tamam
  • İsterseniz grafik, diyagram veya resim olarak çıktı alabilir

Örnekler

Input: 1
Output:
*

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

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

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

gözlük

  • İşlevlere veya tam programlara izin verilir
  • Tercih ettiğiniz yöntemle girdi alabilirsiniz
  • Standart boşluklara izin verilmez
  • Programlar yani herhangi bir ek tablolar olmadan çalışmalıdır usingiçinde s C#onlar girişi dahil edilmelidir,
  • Bir işlevden çıktı alabilir veya sonucu yazdırabilirsiniz.

Bu kod golf yani en kısa çözüm kazanır.


1
Bu çıktıları da endeksleyebilir miyiz 0,1,2,3,...?
kusur,

@flawr Ne demek istediğine emin değilim% 100
TheLethalCoder

@TheLethalCoder Girdi alıp nboyut karesi basıp yazdıramayacağını sorar 2n+1.
Martin Ender

@MartinEnder Oh öyleyse benim örneklerimde girdi 1 verir *ama onun için girdi 0 olur mu?
TheLethalCoder

1
@ TheLethalCoder Evet, ve giriş 1için örnek verim 3.
Martin Ender

Yanıtlar:


9

MATL , 20 19 17 bayt

2-:XdtP!+~TTYa1YG

MATL'de deneysel olarak deneyebilirsiniz . Çalışmıyorsa sayfayı yenilemeniz gerekebilir.

Örnek çalışma:

enter image description here

ASCII versiyonu: 19 bayt

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

Çevrimiçi deneyin!


Ancak en azından çizgilerin paralel ve dikdörtgen olduğundan emin olun. : D
kusur

@flawr Hm? Ne demek istiyorsun?
Luis Mendo

En azından ortada, karelerin kenarları eğikmiş gibi görünüyor, ama bu sadece bir yanılsama. Yoksa öyle mi? (
Ekranımın

@flawr Veya belki göz doktoruna gitmek :-P
Luis Mendo

Çevrimiçi olarak MATL üzerinden çalışmaz, sürüm 19.0.0. Hmmm ...
Outgolfer Erik,

16

VBA Excel, 168 bayt

Talimat:

Excel'i VBA'nın yardımı ile buluyorum bu sorun için etkili ve yeterli bir araç. Excel'in çalışma sayfasını aşağıdaki gibi ayarlayın

enter image description here

Evet, çalışma sayfasındaki hücreleri piksel olarak kullanarak eski zamanlardaki gibi kare şeklindeki küçük klasik pikselleri kullanıyoruz. Ha-ha ...

Burada girdi olarak A1 hücresini kullanıyorum ve yazı tipi rengini kırmızıya çeviriyorum. Neden kırmızı? Kırmızı, üç harfli renkli olduğundan, golf oynamak için uygundur. Komut Penceresinde aşağıdaki kodu yazın ve çalıştırın:

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 kodu:

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

Adım Adım Açıklama:

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

Menzil hücrelerinin köşegeni boyunca döngü: Cells(i, i).Interior.Color = vbRed

enter image description here

Son adım ve çıktı: 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 bayt

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 bayt

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

Jonathan Allan'ın aşağıdaki gibi ikili sayıların çıktısını alma fikrini kullanır :

11111
11011
10101
11011
11111

Satırlar bit aritmetik ile oluşturulur ve ikili olarak görüntülenir. Her kısmı geri kalanına girdi. Parça, 2 n(sabit) ve i(düşme) güçleri vasıtasıyla üretilir.

  1. Sol taraf 1
  2. Sağ taraf n
  3. Köşegen iven/i
  4. Üst ve alt tarafından n-1ne zaman i==1ya i==n.

Aslında, (1) ve (4) 1ne zaman 1<i<nve n-1başka şekilde üreterek birleştirilir .


7

Python, 114 110 96 90 bayt

Tamamen değiştirildi:

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

Dizeleri listesini döndürür, karakterler kullanarak 1ve 0.
-BitingViking sayesinde 6 bayt

İdeone'da test et


Önceki 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)

İdeone üzerinde test et


Bir lambda dönüştürme ve ve-veya ekspresyonunu yeniden 6 bayt kaydedin: 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

@BikingViking Ah, haklısın - Fikrini ortaya koymadan ve uyumadan önce gerçekten biraz titriyordum (asıl amacım).
Jonathan Allan

7

Java 7, 131 130 128 125 124 122 bayt

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

@LeakyNun sayesinde 3 bayt kaydedildi ;
1 bayt , OliverGrégoire sayesinde , verilen genişlik meydan okuması olan oyuk bir kare çizime cevabım sayesinde ; @Cliffroot
sayesinde 2 bayt kaydedildi .

Ungolfed ve test kodu:

Burada dene.

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

Çıktı:

*

***
***
***

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

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

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 bayt kaydedildi
Leaky Nun

@LeakyNun 3 aslında. Yine ;de iç döngü için arkasına ihtiyacınız olacak .
Kevin Cruijssen

1
İlk önce, bunun i-->0yerine olması gerektiğine inanıyorum n-->0ve 2 bayt i*j<1yerine de kullanabilirsinizi<1|j<1
cliffroot

Tabii @cliffroot Eğer bir şey bulmak zorunda kaldı. Hehe, teşekkür ederim! ;) Başka bir cevapta daha önce böyle bir şey yaptığımı hatırlıyorum, çok kötü, burada yapmayı unuttum ..: S
Kevin Cruijssen

6

Matlab, 68 66 64 58 bayt

Grafik çıktıya da izin verildiğinden:

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

Hangi çıktılar örneğin

enter image description here

Sadece ascii sürümleri olacaktır:

Bu indeksleme kullanıyor 0,1,2,3,...

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

Alternatif olarak, indeksleme ile 1,3,7,...:

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

Güzel, sadece grafik çıktısı daha iyi görünmekle kalmaz, bayt cinsinden de kısa olması iyidir. Genellikle düz ASCII yerine daha grafik bir şey yapmak, yalnızca bayt sayısını artırır (genellikle çok fazla).
Kevin Cruijssen

6

C #, 112 101 bayt

Bu isimsiz lambda deyimi-ifadesi-işlerine C # ile izin verildiğini hatırlattığım için TheLethalCoder'a teşekkürler.

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

Kim C # eğlenceli bir golf dili olmadığını söyledi?


Doğruyu biliyorum? 27591 bytes: p
Jonathan Allan

5

Logo, 155 bayt

Bir fonksiyon olarak uygulanan grafiksel çözüm

Alfabe Üçgeni için cevabımı düzeltip , açıları biraz değiştirdim. Daha önce olduğu gibi, rbir karakter satırı çizer. Bu kez, bişlev bir düz kenar ve bir çapraz çizerek, dört kez döndürerek ve tekrarlayarak bir kutu çizer. Bu, köşegenlerin iki kez (birbirinin üstüne) çizilmesine neden olur, ancak ayrı olarak ele almaktan daha az kod vardı. Bu cevap ayrıca sayıları bile doğru şekilde ele alır. Bir giriş için özel işleme eklemek zorunda kaldım1İleri gitmesini engellemek .

Bunu b, boyutu argüman olarak alan bir işlev olarak uyguladım :

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

Üzerinde deneyin Calormen.com Logosunu tercüman . Aramak için bir satır ekleyin ve başağıdaki biçimde arayın :

b 7

Sample of size 7

... veya 5, 7, 9 ve 11 boyutlarında dört numune çeken ve aralarında 90 derece dönen örnekleyici plakasını deneyin:

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

Sample of multiple sizes


4

R, 102 bayt

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

% Kullanarak% cinsinden koşulu ifade etmenin i == 1 | j == 1 | ... öğesinden daha verimli olduğunu unutmayın.


Girişin birden fazla olması garanti edilirse, bir karakteri 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")}
atlatmak mümkündür


4

Haskell, 102 100 96 91 87 bayt

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=' '
  • Kusur sayesinde 2 bayt kaydedildi .
  • Liste anlamalarını kullanarak 4 bayt daha kaydedildi.
  • Kusurun iyileştirilmesi ile birleştirilen 5 baytany
  • 4 bayt değiştirerek kurtardı anyileelem

Ungolfed versiyonu:

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

Bunun hala geliştirilebileceğinden eminim, ama şimdilik bununla karşılaştım.

Eski versiyon:

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]İki kere kullanıyorsun , bunu tanımlayabileceğini düşünüyorum where.
kusur

Where anahtar sözcüğünden önce fazladan boşluk eklemek zorunda kalacağımız için 102 byte ile sonuçlanacaktır. 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
Ah doğru, ama <$>[1..s]bir işleve girebilirsin, değil mi? Gibic 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])
kusur

İyi nokta, bu gerçekten işe yarıyor. :)
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=' '
kusur

3

Java, 130 bayt

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

Test programı

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 olduğunu belirtirim. Ayrıca, golf can o kaldırarak biraz int önce jve kullanım int i=0,j;yerine. Ayrıca tüm yerini alabilir ||ile |ve üçlü-çek parantez kaldırın. Ayrıca, s-1dört kez kullanıyorsunuz, bu yüzden bunu bir değişkene koyardım. Ayrıca, değiştirebilir ==0için <1. Yani toplamda 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 bayt ) Java 7 cevabımdan biraz daha kısa , çok hoş bir yaklaşım!
Kevin Cruijssen

1
@KevinCruijssen Her zaman daha kısa bir cevapla bitirdim, ancak LMAO'dan daha fazla iyileştirme için yer var. İyi arkadaşım golf.
Shaun Wild,

Hehe. xD 116 byte btw versiyonunu kullanmaktan çekinmeyin. Bu senin kodun, sadece biraz daha golf oynadım. ;) Java 7 cevabım (maalesef daha uzun olan) biraz farklı bir yaklaşım kullanıyor. Bunu 116 baytlık bir versiyonda düzenlersem temelde cevabını çalmak istemezdim.
Kevin Cruijssen

Golfleri kopyalayıp yapıştırmanın bir anlamı yok, normalde hızlı bir alay gönderiyorum ve sonra golf oynayabilecek herhangi bir şeyi kaçırıp kaçırmadığımı görmek için daha sonra tekrar geleceğim. Ama sen MEE İÇİN ÇIKTI :( haha ​​jk
Shaun Wild

Ah Üzgünüm. Verdiğim ipuçlarının çoğu aslında Java'da golf oynamak için İpuçları bölümünde mevcut . Sanırım sadece 2quick4u. ;)
Kevin Cruijssen

3

C, 140 121 114 bayt

Quentin sayesinde 19 bayt.

Çift yuvalanmış bir döngüden bir döngüye geçerek 7 bayt kaydedilir.

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

Golf önerileri kabul edilir.


Asla C dilinde programlamam, ancak int'yi Java'daki gibi ilk forma yerleştirmek mümkün değil mi? Yani int i,j;for(i=0;içinfor(int i=0,j;
Kevin Cruijssen

1
En son C kullandığımda int i,j;peşinden bile koyamadınız scanf!
Neil

Deneyin n+~i-jvs.
Neil

GCC #includetamamen çıkarmadan iyidir .
Quentin

@Neil Bundan sonra ne koyamayacağınız derken neyi kastediyorsunuz?
Sızdıran Rahibe

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, ama yeterince iyi çalışıyor.

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

Golf önerileri kesinlikle hoş geldiniz, PowerShell'düğümden bu yana çok uzun zaman geçti.


3

SILOS , 212 bayt

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

Çevrimiçi deneyin!


:) bu dile daha fazla dikkatinizi çektiğiniz için teşekkür ederiz
Rohan Jhunjhunwala

1
@RohanJhunjhunwala İçinde programlama yapmaktan keyif aldım, böylesine mükemmel bir dil oluşturduğunuz için teşekkür ederim.
Sızdıran Rahibe,

3

GNU sed, 117 114 + 1 (r bayrağı) = 115 bayt

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, sayılar için yerel desteğe sahip olmadığı için, girdi buna dayalı olarak unary olarak verilir. oybirliğine . Karenin ikinci yarısı, tutma alanında ters sırayla depolanan ilk yarısıdır.

Koşmak:

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

Çıktı:

00000
00 00
0 0 0
00 00
00000

3

Python, 89 bayt

Bu bir gerileme oldu! Python'un kaplumbağa modülünü kullandım.

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

İşte n = 200 olduğunda sonuç:

enter image description here


1
Yaratıcılık için +1
mbx

2

Scala, 141 137 bayt

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)

Koşmak:

$ scala cross.scala 10

Teknik olarak basılı materyalleri kaldırabilir ve şöyle bir şeye gidebilirdim

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}

Bu işlev sözdizimi sayfalarını sayıp saymadığınıza bağlı olarak 135 veya 121 bayt yapar.

Okunabilir sürüm:

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 bayt

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

*İlk, son, en son ve en son sıraya koymak için satırın karakter listesini değiştirir . İlk ve son satır hepsi ile başlar *, gerisi tüm alanlar ile başlar. Ayrıca, eşler için de işe yarıyor. Bir lambdaifade muhtemelen değişiklikten daha kısadır, ancak bu yöntemi seviyorum.



2

Mathematica, 81 bayt

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

Merkezde orijinli bir koordinat sistemi oluşturur ve *s nin nereye gideceğini hesaplar . Her satırda bir tane olmak üzere bir dizi dizgi çıkarır.


2

Javascript ( 289 270 bayt)

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}

Ungolfed:

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: Philipp Flenker sayesinde 19 byte kurtarıldı.


Sondaki yeni size==1
hatlar

1
@PhilippFlenker Doğru.
Paul Schmitz

1

Perl, 83 + 1 = 84 bayt

-nBayrakla koş .

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

Değişmez yeni satır 1 bayttan fazla tasarruf sağlar \n veya$/ .

Okunabilir:

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

Kod üst satırı yazdırır ve içine kaydeder. $c , ardından uygun yuvalarla değiştirilen bir sürü boşluk yazdırır.a s yazdırır, sonra üst satırı tekrar yazdırır.

İçin atama $\değişkeni her sonrasında içeriğini (yıldız işareti, bir satır ve başka yıldız) yazdırmak için tercüman söyler print, ama bu bir sonra ortaya DEĞİLDİR say.


1

SmileBASIC, 46 bayt

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

(Hayır, SB 1 indeksli grafikler KULLANMAYIN ...)


1

Kömür, 8 bayt (rekabet etmeyen; dil sonrası sorgulama işlemi)

GH+↘↑↙N*

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama: PolygonHollowKomuta parametre olarak kullanıldığında +bir kutu çizer ve ardından oklar köşegen oluşturur. Orada bazı diğer kısayol karakterlerdir ancak kullanışlı örneğin olmaya yeniden tanımlanması gerekir Yeşdeğerdir ↖↗↓ancak eqivalent için olsaydı ↗↓↖o zaman Y+yeterli olacaktır.


1

KABUK ( 135 Bayt ):

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

testler:

 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 bayt

println \ n ile eğer değiştirmek

{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()}}

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.