प्रिंट एन स्क्वायर


57

एक प्रोग्राम या फ़ंक्शन लिखिए जो एक गैर-नकारात्मक पूर्णांक N में स्टड से या फ़ंक्शन तर्क के रूप में लेता है। इसे एक खोखले ASCII- कला वर्ग की एक स्ट्रिंग को प्रिंट या वापस करना होगा, जिसके किनारे प्रत्येक संख्या N की N प्रतियों के साथ बनाए गए हैं।

विशेष रूप से:

यदि एन है 0, तो एन की कोई भी प्रतियां उपयोग नहीं की जाती हैं, इसलिए कोई आउटपुट नहीं होना चाहिए (या केवल एक अनुगामी न्यूलाइन)।

यदि N है 1, तो आउटपुट है:

1

यदि N है 2:

22
22

यदि N है 3:

333
3 3
333

यदि N है 4:

4444
4  4
4  4
4444

यदि N है 5:

55555
5   5
5   5
5   5
55555

पैटर्न के 6माध्यम से जारी है 9

यदि N है 10, तो आउटपुट है:

10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010

ध्यान दें कि यह वास्तव में वर्गाकार नहीं है। यह 10 पंक्तियों वाला लंबा है लेकिन 20 स्तंभ चौड़ा है क्योंकि 10यह दो वर्ण लंबा है। यह इरादा है। मुद्दा यह है कि "स्क्वायर" के प्रत्येक पक्ष में एन की एन प्रतियां शामिल हैं। इसलिए परे सभी इनपुट 9तकनीकी रूप से एएससीआईआई आयत होंगे।

उदाहरण के लिए, यदि N है 23, तो आउटपुट है:

2323232323232323232323232323232323232323232323
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
23                                          23
2323232323232323232323232323232323232323232323

यहाँ के लिए आवश्यक निर्गम की Pastebins हैं 99, 100, 111, और 123(वे एक ब्राउज़र में गलत लग सकता है लेकिन किसी पाठ संपादक में वे सही लग रही होगी)। 1000Pastebin के लिए आउटपुट बड़ा है, लेकिन इसमें 1000 पंक्तियाँ और 4000 स्तंभ होंगे। 4 या अधिक अंकों वाले नंबरों को छोटे नंबरों की तरह काम करना चाहिए।

विवरण:

  • N को सामान्य दशमलव संख्या प्रतिनिधित्व में लिखा जाना चाहिए, जिसमें कोई +संकेत या अन्य गैर-अंक नहीं हैं।
  • खोखले क्षेत्र को केवल रिक्त स्थान से भरा होना चाहिए।
  • किसी भी लाइन में अग्रणी या अनुगामी स्थान नहीं होना चाहिए।
  • वर्गों की अंतिम पंक्ति वैकल्पिक रूप से अनुमत होने के बाद एक नई रूपरेखा।
  • इस चुनौती के बाद लिखी गई भाषाओं का स्वागत है, वे सिर्फ जीतने के योग्य नहीं हैं
  • बाइट्स में सबसे छोटा कोड जीतता है!

18
N = 10 के लिए वर्ग n = 5 से अधिक वर्ग दिखता है। हुर्रे, गैर-स्क्वायर फोंट!
nnonneo

क्या हम पूर्णांक को एक स्ट्रिंग के रूप में ले सकते हैं?
आदम

1
@ N @ हाँ आप हो सकते हैं
केल्विन के

जवाबों:


6

जोल्फ, 31 27 25 23 बाइट्स

?=1i1ρρ,aii+*3έέi*li

यह ISO-8859-7 एन्कोडिंग में एन्कोड किया गया है और इसमें unprintables हैं, इसलिए यहाँ एक हेक्सडंप है:

0000000: 3f3d 3169 31f1 f12c 6169 692b 2a33 dd05  ?=1i1..,aii+*3..
0000010: dd69 052a 056c 69                        .i.*.li

इस फिडेल को ऑनलाइन आज़माएं या एक बार में सभी परीक्षण मामलों को सत्यापित करें (पूर्ण रन बटन का उपयोग करें)

यह n = 0 के लिए एक त्रुटि के साथ बाहर निकलता है, जिसे डिफ़ॉल्ट रूप से अनुमति दी जाती है।

4 6 से दूर गोल्फिंग के लिए कोनोर को बहुत धन्यवाद ! बाइट्स। inb4 ने चार को पार किया फिर भी चार टिप्पणी की तरह दिखता है

व्याख्या

?=1i1ρρ,aii+*3έ\x05έi\x05*\x05li

?=1i1                             if input is 1 return 1, otherwise...
       ,aii+*3έ\x05               draw an input x input hollow box of tabs
      ρ            έi             replace all tabs with input
     ρ               \x05*\x05li  replace all spaces with spaces * length of input

आपने हेक्सडंप कैसे उत्पन्न किया?
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ मैंने xxd का उपयोग किया। आप इसके साथ उल्टा कर सकते हैं xxd -r
एक

16

Shtriped , 317 बाइट्स

जब मैं सवाल कर रहा हूं, मैं अपनी नई "शुद्धतावादी" भाषा दिखा सकता हूं।

@ f x
 d x
 f
 @ f x
+ x y
 +
  i x
 @ + y
 h x
} x y
 e 1
 i 1
 d y
 d 1
 d x
 } x y
e 0
e 2
i 2
i 2
e 6
+ 2 2 6
+ 2 6 6
e T
+ 2 2 T
+ 6 T T
e N
t N
e P
+ T 0 P
e L
i L
*
 e x
 *
  + P x x
 @ * T
 h x
~
 } N P 0
 d 0
 i L
 * P
 ~
~
#
 p N
-
 s 6
_
 @ - L
$
 #
 @ _ n
 #
 s 2
@ # N
e n
+ N 0 n
d n
d n
s 2
@ $ n
@ # N

(निश्चित रूप से v1.0.0 में काम करता है )

वेतन वृद्धि और वेतन वृद्धि को छोड़कर किसी भी तरह का गणित संचालन नहीं किया गया है। कोई भी लूपिंग या सशर्त नहीं है, इसलिए इन सभी चीजों को हर कार्यक्रम में खरोंच से बनाया जाना चाहिए।

यही मेरा कार्यक्रम करता है, जैसे @अनिवार्य रूप से एक लूप के लिए है, +एक अतिरिक्त कार्य है, }है >=। वास्तविक आउटपुट केवल प्रोग्राम की अंतिम 8 लाइनों में निर्मित होता है।

Shtriped में कोई तार नहीं हैं। आप स्ट्रिंग्स को अंदर ले जा सकते हैं और प्रिंट कर सकते हैं, लेकिन वे सभी आंतरिक रूप से मनमाने ढंग से सटीक पूर्णांकों के रूप में प्रस्तुत किए जाते हैं जिन्हें केवल बढ़ाया और घटाया जा सकता है। तो वहाँ कोई आसान तरीका 10है रिक्त स्थान की सही मात्रा के साथ वर्ग केंद्र में भरने के लिए स्ट्रिंग की लंबाई प्राप्त करें । मुझे फंक्शन को एक साथ करना था, जो दशमलव में एन की लंबाई को खोजने के लिए ~प्रभावी रूप से गणना करता floor(log10(N)) + 1है।

यह शायद उलटफेर कहाँ और कैसे जो चर उपयोग किया जाता है द्वारा थोड़ा अधिक golfed किया जा सकता है, लेकिन नहीं है कि बहुत कुछ। Shtriped की अंतर्निहित सीमाओं के आसपास कोई नहीं मिल रहा है। (यह वैसे भी एक गोल्फ भाषा होने के लिए कभी नहीं था।)

टिप्पणी कोड (एक बैकस्लैश एक टिप्पणी है):

@ f x \ function that calls f() x times, returns 0
 d x
 f
 @ f x
+ x y \ returns x + y
 +
  i x
 @ + y
 h x
} x y \ returns 1 if x >= y, else 0
 e 1
 i 1
 d y
 d 1
 d x
 } x y

\ declare and set up variables for the numbers 0, 2, 6, 10
e 0 \ 0 is used to help copy values via +
e 2 \ 2 is used for printing newlines
i 2
i 2
e 6 \ 6 is used for printing spaces
+ 2 2 6
+ 2 6 6
e T \ 10 is used for finding the string length of N
+ 2 2 T
+ 6 T T

e N \ declare N
t N \ and set it to what the user inputs

\ all the code from here to the last ~ is for finding the length of N as a string

e P \ P is the current power of 10 (10, 100, 1000...), starting with 10
+ T 0 P
e L \ L will be the length of N in decimal digits
i L

* \ function that returns P times 10 by adding P to itself 10 times
 e x
 *
  + P x x
 @ * T
 h x

~ \ function that increments L and multiplies P by 10 until N < P, at which point L will be the string length of N
 } N P 0 \ the 0 variable can be used as a dummy now since we don't need it anymore
 d 0
 i L
 * P \ multiply P by 10 to 
 ~
~

\ helper functions for displaying the output
# \ simply prints N as a decimal integer
 p N
- \ prints a single space
 s 6
_ \ prints L spaces (L = digit length of N)
 @ - L
$ \ prints one of the central N-2 lines of the square
 #
 @ _ n
 #
 s 2

\ finally, call these functions to display the output
@ # N \ print N copies of N (top line of square)
e n \ declare n and set it to N - 2
+ N 0 n
d n
d n \ if N was 0 or 1 the program will end here, having printed nothing if 0 or just the top line if 1
s 2 \ print a newline
@ $ n \ print the central line of the square N-2 times
@ # N \ print N copies of N (bottom line of square)

\ the output always prints without a trailing newline

8

गंभीरता से, 32 31 30 29 बाइट्स

╩╜ó$╝╜Dbu╜╛*n╜¬;╛l*' *╛+╛@+n(

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

स्पष्टीकरण:

╩╜ó$╝╜Dbu╜╛*n╜¬;╛l*' *╛+╛@+n(
╩                              push each input to its own register
                                 (we'll call register 0 "n")
 ╜                             push n to the stack
  ó                            terminate if 0
   $╝                          push str(n) to register 1
                                 (we'll call register 1 "s")
     ╜Dbu╜╛*n                  make min(2,n) copies of s*n (the top and bottom)
                                 (this avoids an extra copy if n is 1)
             ╜¬;               push n-2 twice
                ╛l*' *         push (n-2)*len(s) spaces
                      ╛+╛@+    put s on the front and end of the string (a middle piece)
                           n   push (n-2) total copies of the middle piece
                            (  bring the top piece to the top

5

जावास्क्रिप्ट (ईएस 6), 73 82 78 बाइट्स

@ उपयोगकर्ता81655 के लिए a4 बाइट्स धन्यवाद सहेजा गया

n=>(a=n[r='repeat'](n),n<2?a:a+`
${n+' '[r](n.length*(n-2))+n}`[r](n-2)+`
`+a)

एक स्ट्रिंग लेता है, इनपुट के लिए नंबर नहीं।

इसे ऑनलाइन आज़माएं (सभी ब्राउज़र काम करते हैं)


आप एक बाइट को बचाने के *(n-2)साथ बदल सकते हैं *~-~-n
नील

@ user81655 धन्यवाद, कि यह तय
18

5
@ धन्यवाद, लेकिन यह दुर्भाग्य से किसी भी बाइट को बचाने के लिए प्रकट नहीं होता है
डाउनग्रेड

क्षमा करें, मेरा गर्भपात हो गया होगा।
नील

5

MATL , 34 29 26 बाइट्स

:G\2<t!+gQ"@!2GVYX1GVnZ"YX

यह भाषा / संकलक के वर्तमान रिलीज (13.0.0) के साथ काम करता है

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

:            % array [1,2,...,N], where N is input, taken implicitly
G\           % modulo N. Gives [1,2,...,N-1,0]
2<           % smaller than 2? Gives [1,0,...,0,1]
t!           % duplicate, transpose
+            % addition with broadcast. Gives 2D array with nonzeros in the border 
             % and zeros in the interior
gQ           % convert to logical, add 1: twos in the border, ones in the interior
"            % for each column of that array (note the array is a symmetric matrix,
             % so columns and rows are the same)
  @!         %   push column. Transpose into a row        
  2GVYX      %   replace twos by the string representation of N, via regexp
  1GVnZ"YX   %   replace ones by as many spaces as length of that string, via regexp
             % end for each, implicitly
             % display stack contents, implicitly

5

टी-एसक्यूएल / एसक्यूएल सर्वर 2012+, 167 161 बाइट्स

DECLARE @ INT = 6;

SELECT IIF(u IN(1,s),REPLICATE(s,s),CONCAT(s,REPLICATE(' ',s-2*LEN(s)),s))
FROM(SELECT @ s)z CROSS APPLY(SELECT TOP(s)ROW_NUMBER()OVER(ORDER BY 1/0)u FROM sys.messages)v

आउटपुट:

666666 
6    6 
6    6  
6    6  
6    6 
666666 

LiveDemo

वांछित आकार दर्ज करें और Run queryपाठ प्रतिनिधित्व प्राप्त करने के लिए क्लिक करें ।

कृपया ध्यान दें कि यह डेमो निश्चित-चौड़ाई वाले फ़ॉन्ट को प्रदर्शित नहीं करता है । तो 7से मोटा है 1


संपादित करें:

यदि हम इनपुट को स्ट्रिंग के रूप में मानते हैं:

DECLARE @ VARCHAR(10) = '7';

SELECT IIF(u IN(1,s),REPLICATE(s,s),s+REPLICATE(' ',s-2*LEN(s))+s)
FROM(SELECT @ s)z CROSS APPLY(SELECT TOP(s+0)ROW_NUMBER()OVER(ORDER BY 1/0)u FROM sys.messages)v

LiveDemo2


यह बहुत अच्छा है, मैंने सीखा कि मेरी कुछ अन्य लिपियों को थोड़ा छोटा कैसे किया जाए। 1/0 और sys.messages द्वारा आदेश नहीं पता था
t-clausen.dk

एक साइड नोट पर। क्या इनपुट पैरामीटर की घोषणा वास्तव में बाइट्स की गिनती करते समय शामिल होगी?
t-clausen.dk

@ t-clausen.dk जब मुझे एसक्यूएल लागू किया जाता है तो मैं नियमों की गिनती के बारे में निश्चित नहीं हूं, लेकिन मैं मेटा पर पूछूंगा और आपको बता दूंगा।
लाड २०२५

1
आप s varchar (जैसे यह '6') बनाकर कुछ बाइट्स बचा सकते हैं, फिर आप concat को + से बदल सकते हैं।
t-clausen.dk

1
लगता है कि आपको कुछ रिक्त स्थान याद आ रहे हैं। मेरा मानना ​​है कि आप इसे लिख सकते हैं (s-2)
t-clausen.dk

4

जूलिया, 78 बाइट्स

n->(s="$n";(p=println)(s^n);[p(s*" "^(n-2)endof(s)*s)for i=2:n-1];n>1&&p(s^n))

यह एक अनाम फ़ंक्शन है जो पूर्णांक को स्वीकार करता है और ASCII आयत को STDOUT में प्रिंट करता है। इसे कॉल करने के लिए, इसे किसी वैरिएबल पर असाइन करें।

Ungolfed:

function f(n)
    # Save a string version of n
    s = "$n"

    # Print the top line
    println(s^n)

    # Print each middle line
    [println(s * " "^(n-2)endof(s) * s) for i = 2:n-1]

    # Print the last line if there is one
    n > 1 && println(s^n)
end

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


4

रूबी, 100 बाइट्स

->n{s="";n.times{|i|s+=(i<1||i>n-2?"#{n}"*n :"#{n}#{' '*[(n-2)*n.to_s.size,0].max}#{n}")+$/};puts s}

बहुत बुरा मैं जेएस को हरा भी नहीं सकता था। किसी भी आगे इसे नीचे गोल्फ की मदद की सराहना की जाएगी।

यहाँ अधिक या कम ungolfed संस्करण है:

def f(n)
    n.times{|num|
        if num == 0 || num == n-1
            s += "#{n}" * n
        else
            s += "#{n}"+" "*[(n-2)*n.to_s.length,0].max+"#{n}"
        end
        s += "\n"
    }
    puts s
end

1
आप एक चर असाइन करना चाह सकते हैं n.to_sक्योंकि आप इसका उपयोग करते हैं, इसलिए आपको m*nपहले भाग के m+" "*[(n-2)*m.length,0].max+mलिए और दूसरे भाग के लिए।
मूल्य इंक

मैंने इस उत्तर पर 75-बाइट संस्करण आधारित किया। (जावास्क्रिप्ट वर्तमान में 78 बाइट्स पर है) इसे ऑनलाइन आज़माएं!
बेंज़ 2240

4

रेटिना, 76 बाइट्स

.+
$0$*n$0
n(?=n*(\d+))|.
$1_
\d+_
$_¶
T`d` `(?<=¶.*_.*).(?=.*_\d.*¶\d)
\`_
[empty line]

स्पष्टीकरण शायद कल आता है।

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


7
कल से अब तक का समय है।
कैलक्यूलेटरफेलीन

यह कल से पूरे एक साल से ज्यादा हो गया है।
लीक नून

4

सी ++ 14, 156 चार्ट

मैंने सोचा कि यह एक बहुत अच्छा समाधान था, हालांकि स्पष्ट रूप से यहां अन्य प्रविष्टियों को हरा नहीं सकते।

#define f for(i=0;i++<n;c<<t);
[](string t){auto&c=cout;int n=stoi(t),i;f c<<'\n';for(i=0;++i<n-1;c<<t,c.width(~-n*size(t)+1),c.fill(0),c<<t+'\n');if(n-1)f}

Ungolfed:

#define f for ( i = 0; i++ < n; c << t ); // print top/bot row
[](string t) {
  auto& c = cout;
  int n = stoi(t), i;
  f // print first row
  c << '\n'; // kind of annoying but no way to get rid of (yes I tried
             // c << '\n'+t instead of c << t+'\n')
  for ( i = 0; ++i < n - 1; ) {
    c << t; // output the number
    // then we we get the width of necessary spaces
    c.width(~-n*size(t)+1); // Equivalent to (n-1)*size(t) + 1, but we save
                            // two bytes since ~- takes precedence over
                            // multiplication
    c.fill(0); // fill with spaces, ' ' == 0
    c << t+'\n';
   }
   if ( n-1 ) f // This if statement is dissapointing 
}

और हमेशा की तरह, फ़ंक्शन उपयोग को कॉल करने के लिए [](string t) { ... }("10");


4

TSQL, 112 104 बाइट्स

DECLARE @ varchar(10)='12'

PRINT REPLICATE(@,@)+ISNULL('
'+REPLICATE(@+ISNULL(SPACE((@-2)*len(@))+@,'')+'
',@-2)+REPLICATE(@,@),'')
1. generating first line
2. adding hollow lines + line breaks
3. adding last line(when needed)

क्या आप हम में से उन लोगों के लिए स्पष्टीकरण जोड़ सकते हैं जो T-SQL नहीं जानते हैं?
बिल्ली

@cat ने एक छोटी व्याख्या लिखी, और
फिडेल

दिलचस्प है, धन्यवाद! ऐसा लगता है कि आपकी बाइट की गिनती बंद हो सकती है: यहाँ चेक करें
बिल्ली

@ धन्यवाद मैं उसके लिए एक लिंक की तलाश में था। हालाँकि, FROM के साथ अंतिम पंक्ति केवल X को मान देने और असाइन करने की है, मैंने सुना है कि मान असाइन करना और चर घोषित करना गिनती नहीं है। यदि मैं गलत हूं तो मुझे बताएं। मैंने चर के इस असाइनमेंट के साथ कुछ बाइट्स को बचाने की कोशिश की। सामान्य चर @ के साथ उपसर्ग किए जाते हैं , प्रत्येक बार इसका उपयोग करने के लिए 1 अतिरिक्त बाइट की लागत होती है
t-clausen.dk

1
@mazzy हाँ यह करता है - 3. अंतिम लाइन जोड़ना (जब जरूरत हो)
t-clausen.dk

3

मिंकोलंग 0.15 , 57 बाइट्स

nd?.d1-2&N.$z01FlOz2-[lz6Z" "I2-z2-*Dz6Z$O]01F.
z[z6Z]$Of

यहाँ यह कोशिश करो!

व्याख्या

n                Read number from input
 d?.             Stop if n=0, continue otherwise
    d1-2&N.      Print 1 and stop if n=1, continue otherwise
           $z    Store top of stack in register (z, which is n)

01F                                   Gosub to second line
   lO                                 Print newline
     z2-                              Push value from register and subtract 2
        [                             Pop k and run body of for loop k times
                                      (Does not run if k <= 0)
         l                            Push a newline
          z6Z                         Push z and convert to string
             " "                      Push a space
                I2-                   Push length of stack minus 2
                   z2-                Push z minus 2
                      *               Pop b,a and push a,b
                       D              Pop k and duplicate top of stack k times
                        z6Z           Push z and convert to string
                           $O         Output whole stack as characters
                             ]        Close for loop
                              01F.    Gosub to second line and stop after returning.


z[   ]       For loop that runs z times
  z6Z        Push z and convert to string
      $O     Output whole stack as characters
        f    Return to position called from

3

पर्ल, 79 76 74 बाइट्स

$_=$.=pop;s/./ /g;print$.x$.,$/,($.,$_ x($.-2),$.,$/)x($.-2),$.>1?$.x$.:''

बहुत सीधा। पहले कमांडलाइन तर्क को संख्या के रूप में लिया जाता है। स्क्रिप्ट को किसी फ़ाइल में रखें और साथ रखें perl file.pl 1


shiftसे बदला जा सकता है pop
ओलेग वी। वोल्कोव

3

पर्ल, 62 60 58 + 2 = 60 बाइट्स

for$.(1..$_){say$.>1&$.<$_?$_.$"x(y...c*($_-2)).$_:$_ x$_}

-nlEझंडे की आवश्यकता है :

$ perl -nlE'for$.(1..$_){say$.>1&$.<$_?$_.$"x(y...c*($_-2)).$_:$_ x$_}' <<< 5
55555
5   5
5   5
5   5
55555

जोड़े गए स्थानों के साथ:

for$.(1..$_) {
  say(
    $. > 1 & $. < $_
      ? $_ . $"x(length$_*($_-2)) . $_
      : $_ x $_
  )
}

3

आर, 90 बाइट्स

x=scan();m=matrix(x,x,x);k=2:(x-1)*(x>2);m[k,k]=format("",w=nchar(x));write(m,"",n=x,s="")

यह x*xआकार का एक मैट्रिक्स बनाता है और फिर आकार के रिक्त स्थान से भर जाता है nchar(x)। यदि x2 से छोटा है, तो कुछ भी नहीं भरा जा रहा है।


मैं जानता हूँ कि यह एक साल बाद है, लेकिन ... x=scan();m=matrix(x,x,x);m[k<--c(1,x),k]=format("",w=nchar(x));write(m,"",x,,"")10 बाइट्स नकारात्मक अनुक्रमण का उपयोग कर से बदलकर इसे कम है n=x,s=''साथ x,,'' tio.run/nexus/r#DYpBCsAgDAT/...
ग्यूसेप

@Giuseppe और अब पूरी तरह से बिना पढ़े कुछ के लिए ... एक और बाइट बचाएं।
JayCe

write("[<-"(matrix(x<-scan(),x,x),k<--c(1,x),k,gsub("."," ",x)),1,x,,"")72 बाइट्स के लिए।
जे डी ओक्ट


3

पिप -l , 21 बाइट्स

प्रश्न की तुलना में भाषा सुविधाओं का उपयोग करता है, जिसे वर्तमान नीति के अनुसार अनुमति दी जाती है; यदि प्रश्न के शब्दों में कहा गया है कि नीति को ओवरराइड करने के लिए व्याख्या की गई है, तो नीचे दिए गए 25-बाइट उत्तर देखें।

Yq{MN++g%y>1?sMyy}MCy

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

चाल के लिए लुइस मेंडो के MATL जवाब के लिए धन्यवाद (a+1)%n<2

व्याख्या

Yqस्टड से एक लाइन पढ़ता है और इसमें yanks करता है y। फिर:

{              }MCy  Map this function to each coordinate pair in a y-by-y grid
                     (Inside the function, the list of both coords is g)
   ++g                Increment both coordinates
      %y              Take them mod y
 MN     >1?           Test whether the min of the resulting list is 2 or greater
           sMy         If so, it's in the center; use len(y) spaces
              y        If not, it's an edge; use the number y
                     Print result with newlines between rows (implicit, -l flag)

मूल 2016 का उत्तर, 25 बाइट्स (प्लस -lफ्लैग):

Yq{MN++*a%y<2?ysX#y}MMCGy

बदलाव का:

  • MCहाल ही में जोड़ा गया था; उस समय, मैंने उपयोग किया MMCG(मानचित्र-मानचित्र + समन्वय-ग्रिड)।
  • वर्तमान दुभाषिया में एक बग था जो ++सूचियों का उपयोग करने से रोकता था, इसलिए मुझे इसके बजाय ++*( ++प्रत्येक तत्व पर लागू ) करना था।
  • Mएपी को बढ़ा दिया गया है: अब <string1> M <string2>की len(<string2>)प्रतियों की एक सूची लौटाता है <string1>; उस समय, मैंने प्रयोग किया sX#y, स्ट्रिंग-रिपीटिंग स्पेस len(y)

2

पायथ, 37 30 बाइट्स

J*K`QQI>Q1JV-Q2++Q*d-lJ*2lKQ;J

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

J*K`QQ                          set K to repr(input); that is, stringified
                                  set J to K repeated (input) times
      I>Q1                  ;   if input is greater than 1...
          J                     output J (stringified input times input)
           V-Q2                 do this (input - 2) times...
               ++               output the following on one line:
                 Q              the input number
                  *d-lJ*2lK     n spaces, where n = len(J) - 2*len(K)
                           Q    the input number again
                            ;   break out of everything
                             J  output J (str(input)*input) one last time,
                                  regardless of whether input > 1

2

90, रेटिना

फिर से, मुझे पूरा यकीन है कि यह विशेषज्ञों द्वारा बहुत गोल्फ होगा:

.+
$&$&$*:$&$*;
+`(\d+:):
$1$1
+`([\d+:]+;);
$1$1
T`d` `(?<=;\d+:)[^;]+(?=:\d+:;\d)
:

;
¶

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


1
मैंने रेटिना का उत्तर भी पोस्ट किया है, लेकिन यह बहुत छोटा नहीं है। (क्या आप अंतिम चरण से छुटकारा पाने के बजाय उपयोग कर सकते हैं ;?)
यादृच्छिक

@randomra खैर 80 <90 तो मुझसे कोई तर्क नहीं :)
डिजिटल ट्रॉमा

और अगर आप पायलट [^¶]+का उपयोग करते हैं, तो यह आसान है .+
22

2

जेली, 28 बाइट्स

जीआर, यह नहीं बता सकता है कि जेली तार में खराब है, या अगर मैं जेली पर बुरा हूं।

ŒṘ©L⁶xWẋWẋ$®W¤1¦€U'Z$$4¡j⁷ȯ⁷

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


मैं अनुकूलन करने की कोशिश कर रहा है यह /: एक उत्तर के लिए है, लेकिन बहुत किस्मत के बिना,
Sp3000

2

पाइके , 33 बाइट्स (गैर-समरूप)

QD`i*Djli2*lR-k*iRi]3J"bR+2Q-*jR+

स्पष्टीकरण:

                                  - autoassign Q = eval_or_not(input())
QD`i*                             - Get the input multiplied by itself
Q                                 - [Q]
 D                                - [Q, Q]
  `                               - [repr(Q), Q]
   i                              - i = stack[0]
    *                             - [stack[0]*stack[1]]

     Djli2*lR-                    - Get number of spaces
     D                            - [^,^]
      j                           - j = stack[0]
       l                          - len(stack[0])
        i2*                       - i*2
           l                      - len(stack[0])
            R                     - rotate_2()
             -                    - stack[0]-stack[1]

              k*iRi               - Get middle line
              k*                  - " "*^
                iRi               - [i,^,i]

                   ]3J"bR+        - Join middle line together
                   ]3             - list(stack[:3])
                     J"           - "".join(stack[0])
                       bR+        - ^+"\n"

                          2Q-     - Get middle lines
                          2Q-*    - Q-2

                              jR+ - Add end line
                              jR+ - ^+j

2

सीजेएम, 27 बाइट्स

ri:X,_ff{a+[0X(]&XXs,S*?}N*

सुझाव देने के लिए @ मार्टिनबटनर का धन्यवाद ffa+[0X(]&अच्छी तरह से बहुत गड़बड़ है, लेकिन ओह।

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

ri:X              Read input integer and save as variable X
,_                Range, i.e. [0 1 ... X-1] and make a copy
ff{...}           Map with extra parameter, twice. This is like doing a Cartesian product
                  between two 1D arrays, but we get a nice X by X array at the end

                  For each coordinate pair,
a+                Put the two coordinates into an array
[0X(]&            Set intersection with the array [0 X-1]
X                 Push X
Xs,S*             Push a number of spaces equal to the length of X
?                 Ternary: choose one of the previous two depending on the set intersection

N*                Join X by X array with newlines

2

पायथन 2, 70 अक्षर

def p(i):
 k=`i`;j=i-2;h=k*i;print h+'\n'+(k+' '*j*len(k)+k+'\n')*j+h

3
I = 1 के लिए काम नहीं करता है।
बुकऑल

2

हास्केल, 78 बाइट्स

i x=unlines$take x$1#s:3#[s++(3#s>>" ")++s]++[1#s]where s=show x;z#s=[z..x]>>s

उपयोग उदाहरण:

*Main> putStr $ i 4
4444
4  4
4  4
4444

फ़ंक्शन >>काम में आता है: की प्रतियां <list> >> <string>बनाता length <list>है <string>, जैसे ऊपर और नीचे की पंक्तियाँ x=10हैं [1..10] >> "10"->"10101010101010101010"



1
@MaxYekhlakov: धन्यवाद, लेकिन दुर्भाग्य से आपका संस्करण 1एक एकल आउटपुट के लिए काम नहीं करता है 1। इसके अलावा, आप स्ट्रिंग्स की एक सूची लौटाते हैं, जबकि चुनौती एकल स्ट्रिंग के लिए पूछती है। हमारे पास दिनों में बहुत कड़े आईओ नियम थे, लचीले आईओ नियम एक और हाल की बात है।
nimi

2

पर्ल, 72 बाइट्स

$_=($.=pop)-2;say for($.x$.,($..($.x$_)=~s/./ /rg.$.)x$_,$.x$.)[0..$.-1]

आधुनिक पर्ल सुविधाओं पर निर्भर करता है:

कहना'कुछ'

पर्ल 5.10 के बाद से स्वचालित रूप से उपलब्ध है (बस v5.10 या बाद के संस्करण का उपयोग करें)।

str_expr = ~ s /..//../ आर

प्रारंभिक रूप से str_expr को बदले बिना r esult ( regex के अंत में ' r ' विकल्प ) उत्पन्न करने के लिए खुशी से एक प्रतिद्वंद्विता (एक str_expr जरूरी नहीं कि एक स्केलर चर में कम) पर काम करना स्वीकार करता है ।


2

PHP, 151 बाइट्स

function s($n){for($r=0;$r<$n;$r++){for($c=0;$c<$n;$c++){if($r*$c&&$r!=$n-1&&$c!=$n-1){for($d=0;$d<=log10($n);$d++){echo' ';}}else{echo$n;}}echo"\n";}}

पूर्ण गड़बड़, अनुकूलन के लिए अधिक समय की आवश्यकता है। s(Number)आपको आउटपुट देता है।


2

जावा 8, 280 बाइट्स

interface A{static<T>void p(T o){System.out.print(o);}static void main(String[]a){long n=new Long(a[0]),l=a[0].length();for(long i=0;i<n;i++,p(a[0]));p("\n"+(n>1?a[0]:""));for(long j=2;j<n;j++,p(a[0])){for(long i=l*2;i<n*l;i++,p(' '));p(a[0]+"\n");}for(long i=1;i<n;i++)p(a[0]);}}

यह केवल 10 बार सबसे छोटा जवाब है, जो वास्तव में जावा के लिए अच्छा है!

उदाहरण रन:

$ java A 10
10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010

2

पायथन 3, 108 96 148 बाइट्स

a=input()
b=c=int(a)-2 if a!="1" else 0
print(a*int(a))
while b:print(a+" "*int(len(a))*c+a);b-=1
if a!="1":print(a*int(a))

Ungolfed / विस्तार से बताया:

number = input() # Gets a number as input
iterator = var = int(number) - 2 if number != "1" else 0 # Assigns two variables, one of them an iterator, to the number minus 2 (the amount of middle rows in the square) if the number isn't 1. If it is, it sets the vars to 0 so the while doesn't trigger.
print(number * int(number)) # Prints the top row of the square.
while iterator != 0: # Loops for the middle rows
    print(number + " " * int(len(number)) * var + number) # Prints the number, then as many spaces as needed, and the number.
    iterator -= 1 # De-increments the iterator.
if number != 1: # Makes sure the number isn't 1, because 1 should return 1.
    print(a * int(a)) # Same as the first row, it prints the bottom row.

जैसा कि यह मेरा पहला उत्तर है, कुछ रचनात्मक आलोचना और / या सुझाव मददगार होंगे!


1
कुछ बाइट्स को शेव करने के लिए इंडेंटेशन के लिए सिंगल स्पेस का उपयोग करें। वास्तव में, आपके पूरे लूप को इनलाइन किया जा सकता है while b!=0:print(a+" "*int(len(a))*c+1);b-=1:। इसके अलावा, while b:के बराबर है while b!=0, इसलिए कि 3 और बाइट्स चले गए हैं।
मीगो

बगफिक्स: इनपुट 1 अब 1 प्रिंट करता है, इनफिनिटेलोप नहीं (मेरा ब्राउज़र वास्तव में मुझे कुछ दुःख देता है)। यह अब टन अधिक बाइट्स थो लेता है।
OldBunny2800

2

जंग, १४१ 137 बाइट्स

कुछ स्वरूपण सामग्री का दुरुपयोग किया, अन्यथा यह बहुत लंबा होता।

|i|{let f=||{for _ in 0..i{print!("{}",i)}println!("")};f();if i>1{for _ in 0..i-2{println!("{}{0:1$}",i,i.to_string().len()*(i-1))}f()}}

पैक नहीं किया गया:

|i| {
    let f = || {
        for _ in 0..i {
            print!("{}",i)
        }
        println!("")
    };

    f();

    if i>1 {
        for _ in 0..i-2 {
            println!("{}{0:1$}",i,i.to_string().len()*(i-1))
        }
        f()
    }
}

खेल का मैदान लिंक


जब मैं इसे यहाँ आज़माता हूँ तो यह काम नहीं करता है । मैं इसका परीक्षण कैसे कर सकता हूं?
R

यहां एक खेल का मैदान लिंक दिया गया है ताकि आप इसका परीक्षण कर सकें , मैंने एक क्लोजर का उपयोग किया है ताकि आप इसे पहले एक वैरिएबल को असाइन कर दें।
ऐसरी

ओह बढ़िया। वास्तव में जंग नहीं पता, लेकिन महान जवाब!
R

2

पॉवर्सशेल, 98 96 95 83 82 75 बाइट्स

param($n)($l="$n"*$n)
if(($m=$n-2)-ge0){,"$n$(' '*"$n".Length*$m)$n"*$m
$l}

Ungolfed और समझाया गया परीक्षण स्क्रिप्ट:

$f = {

    param($n)
    ($l="$n"*$n)                #   let $l is a string contains N only and return this value as a first line
    $m=$n-2
    if($m-ge0){                 # if(N>1)
        $s=' '*"$n".Length*$m   #   let $s is spaces inside repeated (length of string represented of n * m)
        ,"$n$s$n"*$m            #   return $m strings contains: N, spaces and N
        $l                      #   retrun the first line again
    }

}

&$f 1
&$f 2
&$f 3
&$f 4
&$f 10

आउटपुट:

1
22
22
333
3 3
333
4444
4  4
4  4
4444
10101010101010101010
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10                10
10101010101010101010
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.