প্রদত্ত প্রস্থ সহ # টি ফাঁকা বর্গ আঁকুন


21

আমি কোডিংএমে থেকে এই চ্যালেঞ্জটি পেয়েছি এবং আমার থেকে আরও ভাল সমাধান সম্পর্কে আগ্রহী:

স্ট্যান্ডার্ড ইনপুট এর মাধ্যমে একটি প্রস্থ দেওয়া প্রদত্ত প্রস্থ এবং দৈর্ঘ্যে '#' এর ফাঁকা স্কোয়ার আঁকুন।

উদাহরণ:

5 ফলাফল

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

আমি এটি সমাধান করার জন্য পাইথন ব্যবহার করেছি তাই আমি অন্যান্য অজগর কোডটিতে বিশেষ আগ্রহী। তবে দয়া করে আপনার সমাধান যে কোনও ভাষায় আপনার সমাধান পোস্ট করতে দ্বিধা বোধ করবেন।


7
ইনপুট 0 বা 1 হলে কী হবে?
কার্ল ন্যাপফ

8
সম্পর্কিত , যদিও এটি ডুপ না হওয়ার পক্ষে যথেষ্ট আলাদা হতে পারে।
অ্যাডমবর্কবর্ক

3
পিপিসিজিতে আপনাকে স্বাগতম! ভবিষ্যতের প্রশ্নের জন্য, আমি আপনাকে স্যান্ডবক্স ব্যবহার করতে উত্সাহিত করি যেখানে আপনি মূল পৃষ্ঠায় পোস্ট করার আগে কোনও চ্যালেঞ্জের অর্থবহ প্রতিক্রিয়া পেতে পারেন।
অ্যাডমবর্কবর্ক

4
উত্তরগুলি পড়ে, আমি বিশ্বাস করি না যে এটি একটি দোপ। এখানে বেশিরভাগ উত্তর (গল্ফিং এবং নিয়মিত ভাষাগুলি) "প্রিন্ট এন স্কোয়ার্ড" এ উত্তরগুলির প্রায় অর্ধেক আকারের।
অ্যাডমবর্কবার্ক

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#
ডিএলস্ক

কাঠকয়লা কি নন-ইউটিএফ 8 চারসেট ব্যবহার করে?
OldBunny2800

এটি 6 বাইটের মতো 6 টি অক্ষরের মতো দেখায়। plenty বিকল্প 8-বিট চরিত্রের সেটগুলিতে প্রচুর পরিমাণে রয়েছে তবে আমি about সম্পর্কে সন্দেহজনক (যা এন নয়)
স্পার

3
@ স্পার চারকোল তার নিজস্ব কোডপেজ ব্যবহার করে।
কনর ও'ব্রায়েন

8

এমএটিএল , 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

কৌতূহলের বাইরে তিনটি কেন #দরকার?
কেভিন ক্রুইজসেন

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=এটি ব্যবহার না করে বলতে হবে না –– যা আপনি ব্যবহার করেন না।
ড্যানিয়েল

@ ডপঅ্যাপ আমি জানি, তবে আমি মনে করি এটি সেভাবে আরও সুষ্ঠু (সম্পূর্ণ ফাংশন / প্রোগ্রামগুলির তুলনায়)
রড

@ আপনার পছন্দমত রড করুন তবে বেনামী ফাংশনগুলির বিষয়ে আমাদের নীতি রয়েছে যা এগুলিকে অনুমতি দেয়।
এরিক আউটগল্ফার

5

COW , 426 405 348 330 বাইট

MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOmoOoomMMM
moOMMMMOOmOomOoMoomoOmoOMOomoomOoMMMmoOMMMMOoMOoMOOmOomOomOomOoMoo
moOmoOMoomoOMMMmoOmoOMMMMOoMOoMOOmOomOomOomOoMoomoOmoOmoOmoOMOomoo
mOomOomOoMoomoOmoOMOomoomOomOomOomOoMoomoOmoOmoOMOOmOoMoomoOMOomoo

এটি অনলাইন চেষ্টা করুন! আউটপুট পরিবর্তন করতে যে কোনও সংখ্যায় দ্বিতীয় লাইনের নম্বরটি পরিবর্তন করুন।

আমি এখানে যে সিওডাব্লু ইন্টারপ্রেটার ব্যবহার করছি তা পার্ল (এবং এই চ্যালেঞ্জের চেয়েও নতুন) লেখা ছিল, তবে আপনি এখানে কোড ইনপুট করে একই ফলাফল পেতে পারেন ।

ব্যাখ্যা

; 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 বাইট সংরক্ষণ করা হয়েছে

আমার ক্রসড স্কোয়ার উত্তর তৈরির ভিত্তিতে উত্পন্ন সমাধান ।

এখানে চেষ্টা করুন।


1
নিম্নলিখিতগুলি করে আপনি কি বাইট শেভ করতে পারেন for(int i=n,j;i-->0;r+="\n")? যেহেতু আমরা পাত্তা দিই না কোনটি নীচের লাইন বা উপরেরটি, তাই এই অর্ডারটি রাখার কোনও মানে হয় না, তাই না?
অলিভিয়ার গ্রাগোয়ার

1
@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ! আমি এটি আমার ক্রসড স্কয়ার উত্তর তৈরিতে সম্পাদনা করেছি , কারণ সেখানে একই কাজ করা যেতে পারে।
কেভিন ক্রুইজসেন

4

পাওয়ারশেল ভি 2 +, 48 47 বাইট

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

-1 বাইট জন জন বিভানকে ধন্যবাদ

ইনপুট নেয় $n, পোস্ট হ্রাস সহ হ্যাশমার্ক $zহিসাবে সেট করে । পাইপলাইনে একটি অনুলিপি প্যারেন্সগুলিতে রাখে Enc তারপরে , স্পেসেস, এর পূর্ব-হ্রাসিত লাইনের একটি অ্যারে তৈরি করতে কমা অপারেটর ব্যবহার করে । সেগুলি পাইপলাইনে ফেলে রাখা হয়েছে। তারপরে আবার পাইপলাইনে রাখুন। শেষে অন্তর্নিহিত মাধ্যমে আউটপুট উপাদানগুলির মধ্যে একটি নতুন লাইন প্রবর্তন করে, তাই আমরা এটি বিনামূল্যে পাই।$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
ছুঁড়ে

1
@ জনএলবেয়ান স্ক্রিপ্ট ব্লক সহ ভাল ধারণা। ধন্যবাদ!
অ্যাডমবর্কবার্ক



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

স্ট্রিংগুলি তৈরির fজন্য a এর পরিবর্তে -18 বাইট ব্যবহার করুন .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 বাইট

সংরক্ষিত 3 বাইট @lmis ধন্যবাদ !

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 থেকে n থেকে শূন্যে গুনুন এবং কয়েকটি বাইট সংরক্ষণ করুন ...

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

এর &&পরিবর্তে আপনার কি দরকার &?
করভাস_192

হ্যাঁ, এটি যৌক্তিক হওয়া দরকার। আমি বহুগুণ ব্যবহার করতে পারি তবে এটির জন্য অনেক বেশি বন্ধনী প্রয়োজন ...
ক্লাব্ল্যাঙ্ক


1

পিএইচপি, 81 69 বাইট

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

সাথে চালানো -r; যুক্তি হিসাবে ইনপুট সরবরাহ।

DivisionByZeroErrorইনপুট জন্য একটি নিক্ষেপ = 1


1

আর, 68 70 বাইট

এন> ১ এর জন্য কাজ করে। ম্যাট্রিক্সের জন্য অ্যারেটি অদলবদল করে কয়েক বাইটের জন্য @ বিলিওউবকে ধন্যবাদ Thanks

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

#এন -2 বর্গক্ষেত্রের ম্যাট্রিক্সের স্পেসের চারপাশে সারি এবং কলামগুলি সরাতে rbind এবং cbind ব্যবহার করে । নিউলাইনগুলি পাশাপাশি সারিতে আবদ্ধ bound উত্সে নতুন লাইনটি তাৎপর্যপূর্ণ। ইনপুটটি এসটিডিআইএন থেকে


নিস! আমার কোনও ধারণা ছিল না যে স্ট্রিংয়ের একটি নিউলাইন স্পষ্টভাবে যুক্ত করে \n। আপনি matrixপরিবর্তে ব্যবহার করে দুটি বাইট সংরক্ষণ করতে পারে array
বিলিওব

1

কমন লিস্প, 150 130 বাইট

-20 কুইস এবং @ অ্যালেক্সএলকে ধন্যবাদ।

(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উপরে এবং নীচের জন্য দু'বার এবং এর মধ্যে সারিগুলির জন্য একটি লুপ ব্যবহার করে। শীর্ষ এবং নীচের জন্য ফর্ম্যাট কলটি একটি লাইন শুরু করে #এবং #এস দিয়ে উপযুক্ত প্রস্থে প্যাড করবে । প্যাডিং ফাঁকা স্থান এবং ক এর মধ্যে সারিগুলির মধ্যে সারিগুলির জন্য বিন্যাস কল একইভাবে কাজ করে# লাইনের শেষে মুদ্রিত হওয়া ।

দ্রষ্টব্য: আমি লিস্পের পরিবর্তে নতুন এবং এর উন্নতির জন্য অনেক জায়গা রাখার প্রত্যাশা করছি।


নাম দিই না কেন s? বা বেনামে ফাংশন করছি?
সাইয়েস

আমি লিস্পকে চিনি না, তবে একটি শব্দ এবং একটি খোলা বন্ধনীর মধ্যে এর সমস্ত ফাঁকা স্থানের প্রয়োজনীয় কি? লাইক, এটি হতে হবে dotimes (h (- v 2))বা এটি হতে পারে dotimes(h(- v 2))?
হাইপারনিউটারিনো

@AlexL। হ্যাঁ, এখানে উন্নতির জন্য অনেক সুযোগ রয়েছে। বন্ধনী এবং অন্যান্য চিহ্নগুলির মধ্যে এক টন হোয়াইটস্পেস সরানো যেতে পারে। আমি শুধু যে সত্যিই দ্রুত চেষ্টা করবো
artificialnull

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 বাইট

15 বাইট কোডের, -nপতাকা জন্য +1 ।

(Y_Xa-2WR'#s)My

ইনপুট> = ২ এর জন্য কাজ করে online

কিছুটা দারোয়ান সংস্করণের ব্যাখ্যা

প্রথমত, আমরা একটি ফাংশন সংজ্ঞায়িত করি 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পতাকাটি এটিকে নতুন লাইনের সাথে পৃথক করে causing

গল্ফিং কৌশল

দালালদের থেকে গল্ফযুক্ত সংস্করণে পেতে:

  • স্পেসগুলি সরান।
  • 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

স্পেসবিএএস - 57 বাইট

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

?সংক্ষিপ্তসার জন্য PRINT, #13ক্যারেজ রিটার্ন যা +তাদের সাথে যোগ দেওয়ার জন্য কোনও প্রয়োজন ছাড়াই একটি স্ট্রিংয়ের শেষে টেক করা যায়।

অ্যাডাস্ট্রোফ মুদ্রণ কার্সারটিকে এক লাইনে নিয়ে যায়।


0

আটকে, 29 27 বাইট

একটি "গল্ফিং" ভাষার জন্য খুব সুন্দর রঙিন, তবে এটি কীভাবে কাজ করে তা আমি ভুলে গিয়েছি: পি

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

ব্যাখ্যা:

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

সি #, 154 152 বাইট

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: লুপ রেঞ্জ অপ্টিমাইজেশন।


0

লিথপ , 117 বাইট

পাঠযোগ্যতার জন্য লাইন দুটি বিভক্ত:

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

নমুনা ব্যবহার:

% 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
##########
#        #
#        #
#        #
#        #
#        #
#        #
#        #
#        #
##########
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.