दी गई चौड़ाई के साथ # का एक खोखला वर्ग बनाएँ


21

मुझे कोडिंग से यह चुनौती मिली और मैं इससे बेहतर समाधान के बारे में उत्सुक हूं:

मानक इनपुट के माध्यम से चौड़ाई को देखते हुए दिए गए चौड़ाई और लंबाई में '#' का एक खोखला वर्ग बनाते हैं।

उदाहरण:

में 5 परिणाम

#####
#   #
#   #
#   #
#####

मैंने इसे हल करने के लिए अजगर का इस्तेमाल किया इसलिए मैं अन्य अजगर कोड में दिलचस्पी रखने वाला कण हूं। लेकिन कृपया किसी भी भाषा में अपना समाधान पोस्ट करने के लिए स्वतंत्र महसूस करें।


7
यदि इनपुट 0 या 1 है तो क्या होगा?
कार्ल नैप

8
संबंधित है, हालांकि यह अलग पर्याप्त नहीं करने के लिए एक शिकार हो हो सकता है।
AdmBorkBork

3
PPCG में आपका स्वागत है! भविष्य के सवालों के लिए, मैं आपको सैंडबॉक्स का उपयोग करने के लिए प्रोत्साहित करता हूं जहां आप इसे मुख्य पृष्ठ पर पोस्ट करने से पहले एक चुनौती पर सार्थक प्रतिक्रिया प्राप्त कर सकते हैं।
AdmBorkBork

4
उत्तरों के माध्यम से पढ़ना, मुझे यकीन नहीं है कि यह एक डुबकी है। यहां अधिकांश उत्तर (गोल्फ और नियमित भाषा) "एन प्रिंटेड स्क्वेयर" के उत्तरों के आकार के लगभग आधे हैं।
AdmBorkBork

1
यह बिल्कुल डुप्लिकेट है। दूसरी चुनौती के समाधान को यहां मान्य और प्रतिस्पर्धी होने के लिए तुच्छ रूप से संशोधित किया जा सकता है।
मेगो

जवाबों:



12

चारकोल , 6 बाइट्स

कोड:

NβBββ#

स्पष्टीकरण:

Nβ        # Get input from the command line and store into β
   B      # Draw a hollow box with...
     β     #  Width β
      β    #  Height β
       #   #  Filled with the character '#'
           # Implicitly output the box

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


1
मैं यह जानने की कोशिश कर रहा था कि चारकोल में इनपुट कैसे पढ़ें। अब मुझे पता है :)
Emigna

1
@ ईमनिगा नोट जिसे एक अभिव्यक्ति में भी इस्तेमाल किया जा सकता है, जैसे int(input())पायथन में। यदि यह चुनौती "दी गई चौड़ाई और ऊंचाई के साथ एक खोखली आयत खींचना" थी, तो समाधान हो सकता है BNN#
DLosc

क्या चारकोल एक गैर-यूटीएफ 8 चार्ट का उपयोग करता है?
OldBunny2800

यह 6 अक्षरों की तरह दिखता है, न कि 6 बाइट्स का।
-वैकल्पिक

3
@ शेपर चारकोल अपने स्वयं के कोडपेज का उपयोग करता है।
कॉनर ओ'ब्रायन

8

MATL , 12 बाइट्स

:G\1>&*~35*c

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

व्याख्या

:     % Input n implicitly. Push range [1 2 ... n]
      % STACK: [1 2 3 4 5]
G     % Push n again
      % STACK: [1 2 3 4 5], 5
\     % Modulo
      % STACK: [1 2 3 4 0]
1>    % Does each entry exceed 1?
      % STACK: [0 1 1 1 0]
&*    % Matrix with all pair-wise products
      % STACK: [0 0 0 0 0;
                0 1 1 1 0;
                0 1 1 1 0;
                0 1 1 1 0;
                0 0 0 0 0]
~     % Negate
      % STACK: [1 1 1 1 1;
                1 0 0 0 1;
                1 0 0 0 1;
                1 0 0 0 1;
                1 1 1 1 1]
35*   % Multiply by 35
      % STACK: [35 35 35 35 35;
                35  0  0  0 35;
                35  0  0  0 35;
                35  0  0  0 35;
                35 35 35 35 35]
c     % Convert to char. 0 is interpreted as space. Display implicitly
      % STACK: ['#####';
                '#   #';
                '#   #';
                '#   #';
                '#####']

6

जोल्फ, 8 बाइट्स

,ajj"###
,ajj      draw a box with height (input) and width (input)
    "###  with a hash border

नौकरी के लिए सही उपकरण :)
Emigna

जिज्ञासा से बाहर, तीन की #आवश्यकता क्यों है?
केविन क्रूज़सेन 15

3
@ केविनक्रूजसेन प्रत्येक में क्षैतिज स्ट्रट्स, वर्टिकल स्ट्रट्स और कोने के टुकड़े निर्दिष्ट होते हैं।
कॉनर ओ'ब्रायन

6

पायथन 2, 62 54 बाइट्स

f=lambda n:'#'*n+'\n#%s#'%(' '*(n-2))*(n-2)+'\n'+'#'*n

#\n#जब इनपुट होता है तब वापस लौटता है1

55 बाइट्स संस्करण जो प्रिंट करता है

def f(n):a=n-2;print'#'*n,'\n#%s#'%(' '*a)*a,'\n'+'#'*n

62 बाइट्स संस्करण जो किसी भी इनपुट के लिए काम करता है:

f=lambda n:'#'*n+'\n#%s#'%(' '*(n-2))*(n-2)+('\n'+'#'*n)*(n>1)

2
f=जब तक आप इसका उपयोग नहीं करते हैं, तब तक आपको यह कहने की ज़रूरत नहीं है -जो आप नहीं करते हैं।
डैनियल

@ मुझे पता है, लेकिन मुझे लगता है कि यह अधिक उचित (पूर्ण कार्यों / कार्यक्रमों की तुलना में) तरीका है
रॉड 25

@ आपकी पसंद, लेकिन हमारे पास अनाम कार्यों के बारे में एक नीति है जो उन्हें अनुमति देती है।
आउटगोल्फर

5

गाय , 426 405 348 330 बाइट्स

MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOmoOoomMMM
moOMMMMOOmOomOoMoomoOmoOMOomoomOoMMMmoOMMMMOoMOoMOOmOomOomOomOoMoo
moOmoOMoomoOMMMmoOmoOMMMMOoMOoMOOmOomOomOomOoMoomoOmoOmoOmoOMOomoo
mOomOomOoMoomoOmoOMOomoomOomOomOomOoMoomoOmoOmoOMOOmOoMoomoOMOomoo

इसे ऑनलाइन आज़माएं! आउटपुट को बदलने के लिए दूसरी पंक्ति में संख्या को किसी भी संख्या में बदलें।

गाय दुभाषिया है कि मैं यहाँ का उपयोग कर रहा हूँ पर्ल (और इस चुनौती से नया है) में लिखा था, लेकिन आप अभी भी यहाँ कोड inputting द्वारा एक ही परिणाम प्राप्त कर सकते हैं

व्याख्या

; Note: [n] means "value stored in the nth block of memory".
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoO                                                  ;Stores 10 in [0].  10 is the code point for carriage return
MMMmoOMMMMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoO     ;Stores 32 in [1].  32 is the code point for whitespace
MMMmoOMMMMoOMoOMoO                                                              ;Stores 35 in [2].  35 is the code point for #
moOoom                                                                          ;Reads STDIN for an integer, and stores it in [3]
MMMmoOMMM                                                                       ;Copies [3] into [4] 
MOO                                                                             ;Loop as long as [4] is non-zero
    mOomOoMoo                                                                   ;Navigate to [2] and print the character with that code point
    moOmoOMOo                                                                   ;Navigate to [4] and decrement
moo                                                                             ;End loop
mOoMMMmoOMMMMOoMOo                                                              ;Copy [3] into [4] and decrement [4] twice
MOO                                                                             ;Loop as long as [4] is non-zero
    mOomOomOomOoMoo                                                             ;Navigate to [0] and print the character with that code point
    moOmoOMoo                                                                   ;Navigate to [2] and print the character with that code point
    moOMMMmoOmoOMMMMOoMOo                                                       ;Navigate to [3] and copy it into [5], then decrement [5] twice
    MOO                                                                         ;Loop as long as [5] is non-zero
        mOomOomOomOoMoo                                                         ;Navigate to [1] and print the character with that code point
        moOmoOmoOmoOMOo                                                         ;Navigate to [5] and decrement
    moo                                                                         ;End loop
    mOomOomOoMoo                                                                ;Navigate to [2] and print the character with that code point
    moOmoOMOo                                                                   ;Navigate to [4] and decrement
moo                                                                             ;End loop
mOomOomOomOoMoo                                                                 ;Navigate to [0] and print the character with that code point
moOmoOmoO                                                                       ;Navigate to [3]
MOO                                                                             ;Loop as long as [3] is non-zero
    mOoMoo                                                                      ;Navigate to [2] and print the character with that code point
    moOMOo                                                                      ;Navigate to [3] and decrement
moo                                                                             ;End loop

4

पायथन 2, 59 58 बाइट्स

n=i=input()
while i:print'#%s#'%((' #'[i%n<2])*(n-2));i-=1

repl.it

नोट: इनपुट का 1उत्पादन करने के लिए एक इनपुट ##, लेकिन एक खोखले वर्ग से कम इनपुट के लिए कभी भी उत्पादन नहीं किया जाएगा 3, इसलिए मुझे लगता है कि यह ठीक है।


4

जावा 7, 113 112 110 बाइट्स

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

1 बाइट @ ओलिवियरग्रेयर के लिए धन्यवाद बचा लिया गया ;
2 बाइट्स @cliffroot की बदौलत बच गए ।

मेरे क्रॉस्ड स्क्वायर क्रॉस उत्तर के आधार पर व्युत्पन्न समाधान

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


1
क्या आप निम्नलिखित कार्य करके एक बाइट दाढ़ी बना सकते हैं for(int i=n,j;i-->0;r+="\n")? चूंकि हमें परवाह नहीं है कि नीचे की रेखा या शीर्ष एक है, यह उस आदेश को रखने के लिए कोई मतलब नहीं है, है ना?
ओलिवियर ग्रेजायर

1
@ OlivierGrégoire धन्यवाद! मैंने इसे अपने क्रिएटिंग क्रॉस्ड स्क्वायर उत्तर में भी संपादित किया है , क्योंकि वहां भी ऐसा ही किया जा सकता है।
केविन क्रूज़सेन

4

PowerShell v2 +, 48 47 बाइट्स

param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z

-1 जॉन जॉनबरन को धन्यवाद

इनपुट लेता है $n, हश्र के $zरूप में सेट करता है $n, $nपोस्ट- डिक्रिप्ट के साथ । पाइप लाइन पर एक कॉपी रखने के लिए पार्सन्स में एनकैप्सुलेट करता है। फिर , रिक्त स्थान की पूर्व-अस्वीकृत $nलाइनों की एक सरणी बनाने के लिए अल्पविराम ऑपरेटर का उपयोग करता है । जिन्हें पाइप लाइन पर छोड़ दिया गया है। फिर पाइपलाइन पर फिर से जगह । अंत में निहित के माध्यम से आउटपुट तत्वों के बीच एक नई रेखा का परिचय देता है, इसलिए हमें वह मुफ्त में मिलता है।##$zWrite-Output

के बाद से ओपी का कोड इनपुट के लिए काम नहीं करता है n <= 1, मुझे लगता है कि हमें इनपुट का समर्थन करने की आवश्यकता नहीं है1

उदाहरण

PS C:\Tools\Scripts\golfing> 2..6|%{"$_";.\draw-a-hollow-square.ps1 $_;""}
2
##
##

3
###
# #
###

4
####
#  #
#  #
####

5
#####
#   #
#   #
#   #
#####

6
######
#    #
#    #
#    #
#    #
######

आप एक और बाइट को बंद कर सकते हैं:param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
JohnLBevan

1
@JohnLBevan स्क्रिप्ट ब्लॉक के साथ अच्छा विचार है। धन्यवाद!
AdmBorkBork



3

WinDbg, 206 200 182 170 बाइट्स

.if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}

-6 बाइट्स दूसरे के बजाय से पार्न्स को हटाने .ifऔर उपयोग jकरने से.if

-18 बाइट्स का उपयोग fकरने के बजाय .forस्ट्रिंग्स के निर्माण के लिए।

-12 बाइट्स नॉट-टर्मिनेटिंग स्ट्रिंग्स, इसके बजाय लंबाई पास करने के लिए da

इनपुट को छद्म रजिस्टर $t0(जैसे) के माध्यम से पारित किया जाता हैr $t0 = 5; {above-code} ) के ।

स्पष्टीकरण:

.if @$t0                                                *Verify width($t0) at least 1 
{                                                       *(registers have unsigned values) 
    r $t3 = 2000000;                                    *Set $t3 to address where the 
                                                        *string will be constructed
    f @$t3 L@$t0 23;                                    *Put width($t0) '#' at 2000000($t3)
    f 2 * @$t3 L@$t0 20;                                *Put width($t0) ' ' at 4000000(2*$t3)
    eb 2 * @$t3 23;                                     *Put '#' on left of ' ' string
    eb 2 * @$t3 + @$t0 - 1 23;                          *Put '#' on right of ' ' string
    da @$t3 L@$t0;                                      *Print the top of the box
    j 1 < @$t0                                          *If width($t1) at least 2
    '
        .for (r $t1 = @$t0 - 2; @$t1; r $t1 = @$t1 - 1) *Loop width($t0)-2 times to...
        {
            da 2 * @$t3 L@$t0                           *...print the sides of the box
        };
        da @$t3 L@$t0                                   *Print the bottom of the box
    '
}

नमूना उत्पादन:

0:000> r$t0=0
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}

0:000> r$t0=1
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}
Filled 0x1 bytes
Filled 0x1 bytes
02000000  "#"

0:000> r$t0=2
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}
Filled 0x2 bytes
Filled 0x2 bytes
02000000  "##"
02000000  "##"

0:000> r$t0=5
0:000> .if@$t0{r$t3=2000000;f@$t3 L@$t0 23;f2*@$t3 L@$t0 20;eb2*@$t3 23;eb2*@$t3+@$t0-1 23;da@$t3 L@$t0;j1<@$t0'.for(r$t1=@$t0-2;@$t1;r$t1=@$t1-1){da2*@$t3 L@$t0};da@$t3 L@$t0'}
Filled 0x5 bytes
Filled 0x5 bytes
02000000  "#####"
04000000  "#   #"
04000000  "#   #"
04000000  "#   #"
02000000  "#####"

3

जावास्क्रिप्ट, 61 58 बाइट्स

@Lmis की बदौलत 3 बाइट्स बचाए !

n=>(b='#'[r='repeat'](n))+`
#${' '[r](n-=2)}#`[r](n)+`
`+b

(नहीं संभालती 0या 1)

13 अतिरिक्त बाइट्स के लिए ( 71 बाइट्स पर ), आप कर सकते हैं!

n=>n?n-1?(b='#'[r='repeat'](n))+`
#${' '[r](n-=2)}#`[r](n)+`
`+b:'#':''

ये समाधान काफी सरल हैं: वे कुछ बाइट्स को बचाने के लिए खुद को दोहराने के लिए बहुत अधिक भंडारण करते हैं । वैरिएबल के बिना अकुशल ऐसा लगेगा जैसे:

n => // Anonymous function definition (Param `n` is the size)
    '#'.repeat(n) +      // # `n` times to form the top
    `
#${' '.repeat(n - 2)}#`  // Followed by a newline followed by a hash and `n` - 2 spaces and
                         // another hash to make one of the middle lines
    .repeat(n - 2) +     // The above middle lines repeated `n` - 2 times
    '#'.repeat(n)        // Followed by the top line again

कोशिश करो!

<script type="text/babel">var f=n=>n?n-1?(b='#'[r='repeat'](n))+`\n#${' '[r](n-=2)}#`[r](n)+`\n`+b:'#':'',b,r;function c(){document.getElementById('pre').textContent = f(+document.getElementById('input').value);}</script><input id="input" onkeydown="c();" onkeyup="c();" onchange="c();" onclick="c();" placeholder="Size"><pre id="pre"></pre>


जोड़कर !n?'':n==1?'#':, फ़ंक्शन बॉडी की शुरुआत में एक अतिरिक्त 15 बाइट्स, आप इनपुट 0और संभाल सकते हैं 1
कायला

1
n=>(b='#'[r='repeat'](n))और फिर #${" "[r](n-=2)}आदि आपको दोहराने से बचने के लिए 3 बाइट्स बचाता है repeat:)
लमिस

2

अजगर, 109 बाइट्स

n=int(input())
for x in range(n):
 r=list(' '*n);r[0]=r[-1]='#'
 if x%(n-1)==0:r='#'*n
 print("".join(r))

1
आप बदल सकते हैं list(' '*n)के साथ [' ']*n। तुम भी जगह ले सकता है x%(n-1)के साथx%~-n
गेहूं जादूगर

इसके अलावा, यदि आप forब्लॉक को सूची बोध में बदल देते हैं तो आप 20 बाइट्स बचा सकते हैं
रॉड

इसके अलावा, पायथन 2, ड्रॉप int()और ब्रैकेट के चारों ओर स्वाइप करें print
आर्टी

के <1बजाय का उपयोग करें ==0
mbomb007

2

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

->n{puts a=?#*n,[?#+' '*(n-=2)+?#]*n,a}

मेरे द्वारा कोशिश की जा रही सभी फैंसी सामानों की तुलना में इस तरह छोटा हो जाता है। यह सलाह दी जाती है कि यह 0 या 1 को बिल्कुल भी हैंडल नहीं करता है।


2

अजगर 2, 50 बाइट्स

m=input()-2
for c in'#'+' '*m+'#':print'#'+m*c+'#'

के लिए काम करता है n>=2। पाउंड चिह्न के साथ प्रत्येक पंक्ति प्रिंट करता है,n-2 उपयुक्त चिन्ह का, फिर एक और पाउंड चिन्ह के ।

पाउंड के प्रतीक को अलियास करना समान लंबाई देता है:

m=input()-2;p='#'
for c in p+' '*m+p:print p+m*c+p

अन्य प्रयास:

lambda n:'#'*n+('\n#'+' '*(n-2)+'#')*(n-2)+'\n'+'#'*n

lambda n:'#'*n+'\n#%s#'%((n-2)*' ')*(n-2)+'\n'+'#'*n

lambda n:'\n'.join(['#'*n]+['#'+' '*(n-2)+'#']*(n-2)+['#'*n])

n=input();s='#'+' '*(n-2)+'#'
for c in s:print[s,'#'*n][c>' ']

s='##'+' #'*(input()-2)+'##'
for c in s[::2]:print s[c>' '::2]

s='#'+' '*(input()-2)+'#'
for c in s:print s.replace(' ',c)

2

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

n%b='#':(b<$[3..n])++"#\n"
f n=(n%)=<<init(n%' ')

के लिए काम करता है n>=2। इनचैकर न्यूलाइन-टर्मिनेटेड स्ट्रिंग के #लिए एक चरित्र को सैंडविच के संचालन को परिभाषित करता है n, फिर इसे 2 डी ग्रिड बनाने के लिए दो बार लागू होता है।

जैसे कॉल करें:

*Main> putStrLn$ f 5
#####
#   #
#   #
#   #
#####

2

सी, 83 82 80 78 77 बाइट्स

i,j;f(n){for(i=n;i--;puts(""))for(j=n;j--;putchar(i*j&&i^n-1&&j^n-1?32:35));}

एक बहु में चुपके और एक बाइट बचाने के लिए ...

i,j;f(n){for(i=n;i--;puts(""))for(j=n;j--;putchar(i&&j&&i^n-1&&j^n-1?32:35));}

इसके अलावा जम्मू नीचे गिनती और कुछ और बचाओ ...

i,j;f(n){for(i=n;i--;puts(""))for(j=0;j++<n;putchar(i&&j^1&&i^n-1&&j^n?32:35));}

नीचे से शून्य तक गिनें और कुछ बाइट्स बचाएं ...

i,j;f(n){for(i=0;i++<n;puts(""))for(j=0;j++<n;putchar(i^1&&j^1&&i^n&&j^n?32:35));}

समझने में थोड़ा आसान और 1 बाइट अधिक

i,j;f(n){for(i=0;i++<n;puts(""))for(j=0;j++<n;putchar(i==1|i==n|j==1|j==n?35:32));}

क्या आपको &&इसके बदले की आवश्यकता है &?
corvus_192

हां, इसे तार्किक और बनाने की आवश्यकता है। मैं कई गुना उपयोग कर सकता हूं लेकिन इसके लिए बहुत अधिक कोष्ठक की आवश्यकता होती है ...
क्लेब्लैंक


1

PHP, 81 69 बाइट्स

for($n=-1+$i=$argv[1];$i--;)echo str_pad("#",$n," #"[$i%$n<1]),"#\n";

के साथ भागो -r; तर्क के रूप में इनपुट प्रदान करें।

DivisionByZeroErrorइनपुट के लिए फेंकता है = 1


1

आर, ६० 68० बाइट्स

N> के लिए काम करता है। 1. मैट्रिक्स के लिए सरणी को स्वैप करते हुए बाइट्स के एक जोड़े के लिए @ बिलीवोब का धन्यवाद।

cat(rbind(b<-'#',cbind(b,matrix(' ',n<-scan()-2,n),b),b,'
'),sep='')

#रिक्त स्थान के n-2 वर्ग मैट्रिक्स के आस-पास की पंक्तियों और स्तंभों को लगाने के लिए rbind और cbind का उपयोग करता है । नई पंक्तियों के साथ-साथ पंक्तियों के लिए बाध्य हैं। स्रोत में नई रूपरेखा महत्वपूर्ण है। इनपुट STDIN से है


अच्छा! मुझे नहीं पता था कि एक स्ट्रिंग में एक नई रूपरेखा निहित है \n। हालांकि आप matrixइसके बजाय का उपयोग करके दो बाइट्स बचा सकता है array
बिलीवॉब

1

आम लिस्प, 150 130 बाइट्स

-20 @Cyoce और @AlexL को धन्यवाद।

(defun s(v)(format t"~v,,,vA~%"v #\# #\#)(dotimes(h(- v 2))(format t"~v,,,vA~A~%"(- v 1)#\  #\# #\#))(format t"~v,,,vA"v #\# #\#))

उपयोग:

* (s 5)
#####
#   #
#   #
#   #
#####

मूल रूप formatसे ऊपर और नीचे के लिए दो बार और बीच में पंक्तियों के लिए एक लूप का उपयोग करता है । ऊपर और नीचे के लिए प्रारूप कॉल एस के #साथ उपयुक्त चौड़ाई के साथ शुरू और गद्देदार एक रेखा को आउटपुट करता है #। इसी तरह से पंक्तियों के बीच की पंक्तियों के लिए प्रारूप कॉल, पैडिंग रिक्त स्थान को छोड़कर और #पंक्ति के अंत में मुद्रित हो जाता है।

नोट: मैं Lisp के लिए नया हूँ और इस पर सुधार के लिए बहुत जगह की उम्मीद है।


इसका नाम क्यों नहीं s? या अनाम फ़ंक्शन है?
साइकोस

मैं लिस्प को नहीं जानता, लेकिन एक शब्द और एक खुले ब्रैकेट के बीच रिक्त स्थान के सभी आवश्यक हैं? जैसे, क्या यह होना चाहिए dotimes (h (- v 2))या यह हो सकता है dotimes(h(- v 2))?
हाइपरन्यूट्रिनो

@AlexL। हाँ, यहाँ सुधार के लिए बहुत सारे अवसर हैं। कोष्ठक और अन्य प्रतीकों के बीच एक टन व्हाट्सएप को हटाया जा सकता है। मैं सिर्फ इतनी जल्दी करूँगा
कृत्रिम

0

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

l#n=l<$[1..n]
f n=unlines$'#'#n:('#':' '#(n-2)++"#")#(n-2)++['#'#n]

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

Prelude> putStrLn $ f 4
####
#  #
#  #
####

यह काम किस प्रकार करता है:

l#n=l<$[1..n]                      -- helper function that makes n copies of l

   '#'#n                           -- make a string of n copies of #, followed by
                        #(n-2)     -- n-2 copies of
     '#':' '#(n-2)++"#"            -- # followed by n-2 times spaces, followed by #
                           ['#'#n] -- and a final string with n copies of #
unlines                            -- join with newlines in-between

0

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

,þ%µỊṀ€€ị⁾# Y

TryItOnline! या कोशिश करें 0 से 15

कैसे?

,þ%µỊṀ€€ị⁾# Y - Main link: n
 þ            - outer product with
,             -    pair:   [[[1,1],[2,1],...,[n,1]],[[1,2],[2,2],...,[n,2]], ... ,[[1,n],[2,n],...,[n,n]]]
  %           - mod n:     [[[1,1],[2,1],...,[0,1]],[[1,2],[2,2],...,[0,2]], ... ,[[1,0],[2,0],...,[0,0]]]
   µ          - monadic chain separation
    Ị         - abs(z)<=1: [[[1,1],[0,1],...,[1,1]],[[1,0],[0,0],...,[1,0]], ... ,[[1,1],[0,1],...,[1,1]]]
      €€      - for each for each
     Ṁ        - maximum:   [[1,    1,    ...,1],    [1,    0,    ..., 1],    ... ,[1,    1,    ..., 1]   ]
        ị     - index into (1 based)
         ⁾#   - "# ":      ["##...#","# ...#", ...,"##...#"]
           Y  - join with line feeds

0

रंज , 16 बाइट्स

-nझंडे के लिए कोड के 15 बाइट्स, +1 ।

(Y_Xa-2WR'#s)My

इनपुट> = 2 के लिए काम करता है। इसे ऑनलाइन आज़माएं!

कुछ हद तक अनछुए संस्करण की व्याख्या

सबसे पहले, हम एक फ़ंक्शन को परिभाषित करते हैं yजो एक स्ट्रिंग तर्क लेता है, इसे a-2कई बार दोहराता है (जहां aपहली कमांड-लाइन इनपुट है), और परिणाम को लपेटता है #

Y _ X a-2 WR '#
  _              Identity function
    X a-2        String-repeated by a-2
          WR '#  Wrapped in #
Y                Yank the resulting function into y

अगला, हम इस फ़ंक्शन को दो बार लागू करते हैं - एक बार सामान्य रूप से, फिर मानचित्र के साथ - वर्ग को तार की सूची के रूप में प्राप्त करने के लिए:

y M (y s)
    (y s)  Call function y with s (preinitialized to " ") as argument
y M        Map y to each character of the resulting string

के इनपुट के लिए 4, (y s)में परिणाम "# #"और y M (y s)में ["####"; "# #"; "# #"; "####"]। यह बाद वाला मान मुद्रित होता है, के साथ-n जिसके कारण ध्वज को न्यूलाइन-अलग किया जाता है।

गोल्फ की चाल

गोल्फ के संस्करण के लिए अनगुल्ड से प्राप्त करने के लिए:

  • रिक्त स्थान निकालें।
  • Yएक ऑपरेटर है, जिसका अर्थ है कि हम इसे एक अभिव्यक्ति में उपयोग कर सकते हैं। इसके बजाय Y...के बाद (ys), हम बस कर सकते हैं (Y...s)
  • समस्या यह है कि, हमें फ़ंक्शन को फिर से चलाने से पहले इसे फिर से संदर्भित करना होगा y; इसलिए yM(Y_Xa-2WR'#s)काम नहीं करेगा। समाधान: Mएपी ऑपरेटर के ऑपरेंड को स्वैप करें । जब तक उनमें से एक एक कार्य है और दूसरा एक चलने योग्य प्रकार है, इससे कोई फर्क नहीं पड़ता कि वे किस क्रम में आते हैं।

0

रैकेट 113 बाइट्स

(let*((d display)(g(λ()(for((i n))(d"#")))))(g)(d"\n")(for((i(- n 2)))(d"#")(for((i(- n 2)))(d" "))(d"#\n"))(g))

Ungolfed:

(define (f n)
  (let* ((d display)
         (g (λ () 
              (for ((i n))
                (d "#"))
              (d "\n"))))
    (g)
    (for ((i (- n 2)))
      (d "#")
      (for ((i (- n 2)))
        (d " ") )
      (d "#\n"))
    (g)))

परिक्षण:

(f 5)

आउटपुट:

#####
#   #
#   #
#   #
#####

0

SpecBAS - 57 बाइट्स

1 INPUT n: a$="#"*n,n-=2,b$="#"+" "*n+"#"#13: ?a$'b$*n;a$

?के लिए आशुलिपि है PRINT, #13कैरिज रिटर्न है, जिसमें +शामिल होने के लिए उन्हें आवश्यकता के बिना एक स्ट्रिंग के अंत तक निपटा जा सकता है।

एपोस्ट्रोफ प्रिंट कर्सर को एक पंक्ति नीचे ले जाता है।


0

Stuck, 29 27 Bytes

Pretty darn long for a "golfing" language, but I have forgotten how a lot of it works :P

i_2-_u'#*N+_'#' u*'#N+++u*u

Explanation:

i_2-_u                           # take input and triplicate, subtracting 2 (5 -> [3,3,5])
      '#*N+_                     # create the top and bottom rows
            '#' u*'#N+++u*       # create input - 2 copies of middle rows
                          u      # rotate left 1 to get correct order, implicit output

0

C#, 154 152 bytes

Golfed:

void F(int n){Console.Write($"{new string('#',n)}\n");for(int i=2;i<n;i++)Console.Write($"#{new string(' ',n-2)}#\n");Console.Write(new string('#',n));}

Ungolfed:

    void F(int n)
    {
        Console.Write($"{new string('#', n)}\n");

        for (int i = 2; i < n; i++)
            Console.Write($"#{new string(' ', n - 2)}#\n");

        Console.Write(new string('#', n));
    }

EDIT1: Loop range optimization.


0

Lithp, 117 bytes

Line split in two for readability:

#N::((var X (repeat "#" N))(print X)(each (seq 3 N) (scope #X::((print (+ "#" 
     (repeat " " (- N 2)) "#")))))(print X))

Sample usage:

% square.lithp
(
    (import "lists")
    (def s #N::((var X (repeat "#" N))(print X)(each (seq 3 N) (scope #X::((print (+ "#" (repeat " " (- N 2)) "#")))))(print X)))
    (s 10)
)

Output:
$ ./run square.lithp
##########
#        #
#        #
#        #
#        #
#        #
#        #
#        #
#        #
##########
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.