एक पार वर्ग बनाना


23

एक पार वर्ग बनाना

आपको एक या एक से अधिक के पूर्णांक का इनपुट लेना है और केंद्र के माध्यम से विकर्ण क्रॉस के साथ अपनी पसंद के किसी भी मुद्रण योग्य चरित्र से बना एक वर्ग आउटपुट करना है।

सामान्य विचार आउटपुट के लिए एक खोखला वर्ग होता है जिसमें एक विकर्ण क्रॉस होता है:

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

उपरोक्त उदाहरण में '*' बाहरी बॉक्स का प्रतिनिधित्व करता है और '#' विकर्ण क्रॉस का प्रतिनिधित्व करता है।

ध्यान दें कि उपरोक्त उदाहरण दो अलग-अलग वर्णों का उपयोग करता है ताकि यह देखना आसान हो कि आउटपुट कैसा दिखता है, आपके प्रोग्राम को केवल एक वर्ण का उपयोग करना चाहिए।

इनपुट

1 या अधिक का पूर्णांक, विषम होने की गारंटी है।

उत्पादन

एक वर्ग जो मध्य के माध्यम से एक क्रॉस के साथ अपनी पसंद के चरित्र से बनता है।

  • क्रॉस विकर्ण होना चाहिए
  • फ़ंक्शन के माध्यम से वर्ग आउटपुट हो सकता है या आउटपुट पर लिखा जा सकता है
  • अनुगामी न्यूलाइन्स ठीक हैं
  • यदि आप चाहें तो एक ग्राफिक, आरेख या छवि के रूप में आउटपुट कर सकते हैं

उदाहरण

Input: 1
Output:
*

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

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

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

चश्मा

  • कार्य या पूर्ण कार्यक्रम की अनुमति है
  • आप अपने पसंदीदा माध्यमों से इनपुट प्राप्त कर सकते हैं
  • मानक खामियों को अस्वीकार कर दिया जाता है
  • कार्यक्रम किसी भी अतिरिक्त बयान यानी बिना काम करना चाहिए usingमें है C#, वे प्रविष्टि में शामिल किया जाना चाहिए
  • आप किसी फ़ंक्शन से आउटपुट कर सकते हैं या परिणाम प्रिंट कर सकते हैं

यह कोड गोल्फ है इसलिए सबसे छोटा समाधान जीतता है।


1
क्या हम भी इन आउटपुट को इंडेक्स कर सकते हैं 0,1,2,3,...?
11

@flawr मैं 100% निश्चित नहीं हूं कि आपका क्या मतलब है
TheLethalCoder

@TheLethalCoder वह पूछता है कि क्या वह इनपुट ले सकता है nऔर आकार का एक वर्ग प्रिंट कर सकता है 2n+1
मार्टिन एंडर

@MartinEnder ओह तो मेरे उदाहरण में इनपुट 1 देता है *लेकिन उसके लिए यह इनपुट 0 होगा?
TheLethalCoder

1
@ TheLethalCoder हाँ, और इनपुट के 1लिए आपका उदाहरण पेश करेगा 3
मार्टिन एंडर

जवाबों:


9

MATL , 20 19 17 बाइट्स

2-:XdtP!+~TTYa1YG

आप इसे ऑनलाइन MATL में आज़मा सकते हैं । यदि यह काम नहीं करता है तो आपको पृष्ठ को रीफ्रेश करने की आवश्यकता हो सकती है।

नमूना रन:

यहाँ छवि विवरण दर्ज करें

ASCII संस्करण: 19 बाइट्स

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

इसे ऑनलाइन आज़माएं!


लेकिन कम से कम यह सुनिश्चित करें कि लाइनें समानांतर और आयताकार हैं। : D
त्रुटी

@flawr हम्म? क्या मतलब?
लुइस मेंडो

कम से कम बीच में ऐसा लगता है जैसे कि चौराहों के किनारों को तिरछा किया गया है, लेकिन यह सिर्फ एक भ्रम है। या यह है? (मेरी स्क्रीन के पीछे एक ब्लैक होल भी हो सकता है, स्पेस टाइम
वार कर

@flawr या हो सकता है कि नेत्र चिकित्सक के पास जाएं :-P
लुइस मेंडो

MATL ऑनलाइन, संस्करण 19.0.0 पर काम नहीं करता है। हममम ...
एरिक Outgolfer

16

VBA एक्सेल, 168 बाइट्स

निर्देश:

मुझे लगता है कि VBA की मदद से एक्सेल इस चुनौती के लिए एक प्रभावी और पर्याप्त उपकरण है। निम्नलिखित की तरह एक्सेल की वर्कशीट सेट करें

यहाँ छवि विवरण दर्ज करें

हां, हम वर्कशीट में कोशिकाओं के रूप में पिक्सल के रूप में उपयोग करके पुराने, छोटे वर्ग के आकार के पिक्सेल का उपयोग करते हैं। हा-हा ...

यहां मैं इनपुट के रूप में सेल A1 का उपयोग करता हूं और मैं इसके फॉन्ट का रंग बदलकर लाल कर देता हूं। लाल क्यों? क्योंकि लाल तीन अक्षर का रंग है इसलिए यह गोल्फ के लिए फिट बैठता है। निम्नलिखित कोड को तत्काल विंडो में लिखें और चलाएँ:

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

यहाँ छवि विवरण दर्ज करें

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

यहाँ छवि विवरण दर्ज करें

रेंज कोशिकाओं के विकर्ण के माध्यम से लूपिंग: Cells(i, i).Interior.Color = vbRed

यहाँ छवि विवरण दर्ज करें

अंतिम चरण और आउटपुट: Cells(i, N + 1 - i).Interior.Color = vbRed

यहाँ छवि विवरण दर्ज करें


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
टेलर स्कॉट


7

पायथन 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 के लिए धन्यवाद

इसे आइडोन पर टेस्ट करें


पिछला पायथन 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)

इसे आइडोन पर टेस्ट करें


एक मेमने को परिवर्तित करके और-या अभिव्यक्ति का पुनर्गठन करके 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 आह, आप सही हैं - मुझे वास्तव में विचार को बाहर करने और सोने से पहले बिट ट्विडलिंग (मेरे मूल इरादे) के लिए नीचे जाना चाहिए: पी।
जोनाथन एलन

7

जावा 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 की बदौलत बच गए ।

Ungolfed और परीक्षण कोड:

इसे यहाँ आज़माएँ।

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 बाइट्स बचाए गए
लीक नुन्

@LeakyNun 3 वास्तव में। आपको अभी भी ;इनर-लूप के पीछे की आवश्यकता होगी ।
केविन क्रूज़सेन

1
सबसे पहले, मेरा मानना ​​है कि यह i-->0बजाय होना चाहिए n-->0और आप 2 बाइट्स के i*j<1बजाय भी उपयोग कर सकते हैंi<1|j<1
क्लिफरॉट

@cliffroot बेशक आपको कुछ खोजना था। हे, धन्यवाद, धन्यवाद! ;) मुझे याद है कि मैंने पहले भी ऐसा कुछ किया है, एक और उत्तर में, इतना बुरा मैं इसे यहाँ करना भूल गया ..: एस
केविन क्रूज़सेन

6

मतलाब, 68 66 64 58 बाइट्स

चूंकि ग्राफिकल आउटपुट की अनुमति है:

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

कौन सा उदाहरण उदा

यहाँ छवि विवरण दर्ज करें

एएससीआई केवल संस्करण होंगे:

यह अनुक्रमण का उपयोग कर रहा है 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,'']

अच्छा है, न केवल चित्रमय आउटपुट बेहतर imo दिखता है, यह अच्छा है कि यह बाइट्स के मामले में भी छोटा है। आमतौर पर सादे 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 बाइट्स: पी
जोनाथन एलन

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

आकार 7 का नमूना

... या सैंपलर प्लेटर आज़माएं, जो 5, 7, 9 और 11 के आकार में चार नमूने खींचता है, बीच में 90 डिग्री घूमता है:

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

कई आकारों का नमूना


4

आर, 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

हास्केल, 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 बाइट्स ने त्रुटिपूर्ण सुधार के संयोजन को बचायाany
  • 4 बाइट्स के anyसाथ बदलकर बचायाelem

Ungolfed संस्करण:

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=' '
सूदगी

1
आह ठीक है, लेकिन आप <$>[1..s]एक समारोह में पैक कर सकते हैं , है ना? जैसेc 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])
22

अच्छी बात है, यह वास्तव में काम करता है। :)
सूद

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

जावा, 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! मैं निर्दिष्ट करूंगा कि यह जावा 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 बाइट्स ) मेरे जावा 7 उत्तर की तुलना में थोड़ा छोटा है , इतना अच्छा तरीका!
केविन क्रूज़सेन

1
@KevinCruijssen मैं हमेशा एक छोटे से जवाब के साथ समाप्त होता हूं, लेकिन LMAO की तुलना में सुधार के लिए अधिक कमरे के साथ। खैर मेरे दोस्त गोल्फ।
शॉन वाइल्ड

हेहे। xD 116 बाइट संस्करण btw का उपयोग करने के लिए स्वतंत्र महसूस करें। यह आपका कोड है, बस नीचे कुछ और घूमा हुआ है। ;) मेरा जावा 7 उत्तर (जो दुर्भाग्य से लंबा है) थोड़ा अलग दृष्टिकोण का उपयोग करता है। अगर मैं इसे 116 बाइट संस्करण में संपादित करूंगा तो मैं मूल रूप से आपके उत्तर को चुरा लूंगा, जो मैं नहीं चाहता।
केविन क्रूज़सेन

आपके गोल्फ को कॉपी करने और पेस्ट करने का कोई मतलब नहीं है, मैं आमतौर पर एक त्वरित मॉक पोस्ट करता हूं और फिर बाद में यह देखने के लिए वापस आता हूं कि क्या मैंने कुछ भी याद किया है जो गोल्फ हो सकता है। लेकिन आपने मेरे लिए यह निर्धारित किया है :( haha ​​jk
Shaun Wild

आह क्षमा करें। मेरे द्वारा दिए गए अधिकांश सुझाव वास्तव में जावा में गोल्फ के लिए युक्तियों में मौजूद हैं । मुझे लगता है कि मैं सिर्फ 2quick4u हूं। ;)
केविन क्रूज़सेन

3

सी, 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);}

गोल्फ सुझाव का स्वागत करते हैं।


मैं सी में कभी भी कार्यक्रम नहीं करता, लेकिन क्या जावा जैसे पहले फॉर-लूप में इंट को जगह देना संभव नहीं है? यानी int i,j;for(i=0;करने के लिएfor(int i=0,j;
केविन Cruijssen

1
पिछली बार जब मैंने C का उपयोग किया था तो आप उसके int i,j;बाद भी नहीं डाल सकते थे scanf!
नील

कोशिश करें n+~i-jआदि
नील

जीसीसी #includeपूरी तरह से हटाने के साथ ठीक है ।
क्वेंटिन

@Neil तुम क्या मतलब है कि तुम उसके बाद नहीं डाल सकता है?
लीकी नून

3

पॉवरशेल (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

एसआईओएस , 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

इसे ऑनलाइन आज़माएं!


:) इस भाषा पर अधिक ध्यान लाने के लिए धन्यवाद
रोहन झुनझुनवाला

1
@ रोहन झुनझुनवाला ने इसमें प्रोग्रामिंग का आनंद लिया, ऐसी शानदार भाषा बनाने के लिए धन्यवाद।
लीकी नून

3

GNU सेड, 117 114 + 1 (आर झंडा) = 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

स्काला, 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

पायथन 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'th और i'th-to-last स्थान में डालने के लिए पंक्ति के वर्णों की एक सूची को संशोधित करता है। पहली और अंतिम पंक्ति सभी के रूप में शुरू होती है *, और बाकी सभी स्थानों के रूप में। बुराइयों के लिए भी काम करता है। एक lambdaअभिव्यक्ति शायद संशोधन से कम है, लेकिन मुझे यह तरीका पसंद है।



2

गणितज्ञ, 81 बाइट्स

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

केंद्र में उत्पत्ति के साथ एक समन्वय प्रणाली बनाता है, और गणना करता है कि *एस को कहां जाना चाहिए। स्ट्रिंग की एक सरणी आउटपुट करता है, प्रति पंक्ति एक।


2

जावास्क्रिप्ट ( 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}

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

संपादित करें: फिल फ्लेंकर को 19 बाइट्स धन्यवाद।


के बाद से पीछे चल नई पंक्तियां ठीक कर रहे हैं, मुझे लगता है कि आप के लिए चेक की जरूरत नहीं हैsize==1
फिलिप Flenker

1
@PhilippFlenker सही।
पॉल शमित्ज

1

पर्ल, 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 , फिर रिक्त स्थान का एक गुच्छा प्रिंट करता है जिसमें उपयुक्त स्लॉट्स को as से बदल दिया जाता है , फिर शीर्ष रेखा को फिर से प्रिंट करता है।

$\वेरिएबल को असाइनमेंट इंटरप्रेटर को प्रत्येक के बाद सामग्री (एक तारांकन चिह्न, एक नई रेखा और एक और तारांकन चिह्न) को प्रिंट करने के लिए कहता है print, लेकिन ए के बाद ऐसा नहीं होता है say


1

स्माइलबासिक, 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

शेल ( 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.