Disegna un quadrato vuoto di # con la larghezza data


21

Ho ricevuto questa sfida da Codingame e sono curioso di trovare soluzioni migliori delle mie:

Data una larghezza tramite input standard, disegna un quadrato vuoto di '#' in una data larghezza e lunghezza.

Esempio:

5 risultati in

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

Ho usato Python per risolvere questo, quindi sono particolarmente interessato ad altri codici Python. Non esitate a pubblicare la soluzione in qualsiasi lingua desiderata.


7
Cosa succede se l'ingresso è 0 o 1?
Karl Napf,

8
Correlati , anche se questo potrebbe essere abbastanza diverso da non essere un duplicato.
AdmBorkBork,

3
Benvenuti in PPCG! Per domande future, ti incoraggio a utilizzare il Sandbox in cui è possibile ottenere un feedback significativo su una sfida prima di pubblicarlo sulla pagina principale.
AdmBorkBork,

4
Leggendo le risposte, non sono convinto che sia un imbecille. La maggior parte delle risposte qui (golf e lingue normali) sono circa la metà delle risposte su "Print N Squared".
AdmBorkBork,

1
Questo è assolutamente un duplicato. Le soluzioni dell'altra sfida possono essere banalmente modificate per essere valide e competitive qui.
Mego

Risposte:


1

Pyke, 11 byte

ttDd*n+*.X#

Provalo qui!

ttDd*n+*    - a square of spaces n-2*n-2 big
        .X# - surround in `#`

12

Carbone , 6 byte

Codice:

NβBββ#

Spiegazione:

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

Provalo online!


1
Stavo cercando di capire come leggere gli input in Charcoal. Ora lo so :)
Emigna,

1
@Emigna Nota che può essere utilizzato anche in un'espressione, come int(input())in Python. Se questa sfida fosse "disegnare un rettangolo vuoto con una data larghezza e altezza", la soluzione potrebbe essere BNN#.
DLosc

Charcoal utilizza un set di caratteri non UTF8?
OldBunny2800,

Sembra 6 caratteri, non 6 byte. β è in molti set di caratteri alternativi a 8 bit, ma sono dubbioso su N (che non è N)
Sparr

3
@Sparr Charcoal utilizza una propria tabella codici.
Conor O'Brien,

8

MATL , 12 byte

:G\1>&*~35*c

Provalo online!

Spiegazione

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

Jolf, 8 byte

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

Lo strumento giusto per il lavoro :)
Emigna,

Per curiosità, perché sono #richiesti tre ?
Kevin Cruijssen,

3
@KevinCruijssen Ciascuno specifica i montanti orizzontali, verticali e angolari.
Conor O'Brien,

6

Python 2, 62 54 byte

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

Ritorna #\n#quando l'ingresso è1

Versione da 55 byte che stampa

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

62 byte versione che funziona per qualsiasi input:

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

2
Non devi dire f=se non lo usi –– che non lo fai.
Daniel,

@Dopapp Lo so, ma penso che sia più giusto in questo modo (rispetto alle funzioni / ai programmi completi)
Rod

@Rod La tua scelta, ma abbiamo una politica sulle funzioni anonime che li consente.
Erik the Outgolfer

5

MUCCA , 426 405 348 330 byte

MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOMoOMoOMoOMoOMoOMoO
MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMoOMoOMoOmoOoomMMM
moOMMMMOOmOomOoMoomoOmoOMOomoomOoMMMmoOMMMMOoMOoMOOmOomOomOomOoMoo
moOmoOMoomoOMMMmoOmoOMMMMOoMOoMOOmOomOomOomOoMoomoOmoOmoOmoOMOomoo
mOomOomOoMoomoOmoOMOomoomOomOomOomOoMoomoOmoOmoOMOOmOoMoomoOMOomoo

Provalo online! Modificare il numero nella seconda riga in qualsiasi numero per modificare l'output.

L'interprete COW che sto usando qui è stato scritto in Perl (ed è più recente di questa sfida), ma puoi comunque ottenere lo stesso risultato inserendo il codice qui .

Spiegazione

; 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

Python 2, 59 58 byte

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

repl.it

Nota: un input di 1produce un output di ##, ma un quadrato vuoto non verrebbe mai prodotto per un input inferiore a 3, quindi immagino che vada bene.


4

Java 7, 113 112 110 byte

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 byte salvato grazie a @ OlivierGrégoire ;
2 byte salvati grazie a @cliffroot .

Soluzione derivata basata sulla mia risposta Creazione di un quadrato incrociato .

Provalo qui.


1
Potresti radere un byte nel modo seguente for(int i=n,j;i-->0;r+="\n")? Dal momento che non ci interessa quale sia la linea di fondo o quella in alto, non ha senso mantenere quell'ordine, giusto?
Olivier Grégoire,

1
@ OlivierGrégoire Grazie! L'ho anche modificato nella mia risposta Creazione di un quadrato incrociato , dal momento che lo stesso potrebbe essere fatto.
Kevin Cruijssen,

4

PowerShell v2 +, 48 47 byte

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

-1 byte grazie a JohnLBevan

Accetta input $n, imposta $zcome $nhashmark, con $npost-decrementato. Incapsula quello in parentesi per posizionare una copia sulla pipeline. Poi utilizza l'operatore virgola per creare una matrice di pre-decrementato $nlinee di #spazi, #. Quelli sono rimasti in cantiere. Quindi posiziona $znuovamente sulla tubazione. L'output tramite implicito Write-Outputalla fine introduce una nuova riga tra gli elementi, quindi lo otteniamo gratuitamente.

Poiché il codice del PO non funziona per l'input n <= 1, ho pensato che significa che non è necessario supportare l'input 1.

Esempi

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

3
###
# #
###

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

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

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

Puoi cancellare un altro byte:param($n)($z='#'*$n--);,("#$(' '*--$n)#")*$n;$z
JohnLBevan l'

1
@JohnLBevan Buona idea con il blocco di script. Grazie!
AdmBorkBork,

3

C, 98 byte

f(n,i){i=n*(n+1);while(i--){putchar(i%(n+1)==n?10:i<n||i>n*n-1||i%(n+1)==0||i%(n+1)==n-1?35:32);}}

Uso:

f(5)


3

WinDbg, 206 200 182 170 byte

.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 byte dalla rimozione delle parentesi .ife dall'uso jinvece del secondo.if

-18 byte usando finvece di a .forper costruire le stringhe.

-12 byte per stringhe che non terminano con NULL, passando invece la lunghezza a da

L'ingresso viene passato attraverso lo pseudo-registro $t0(ad es r $t0 = 5; {above-code}.).

Spiegazione:

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

Uscita campione:

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

JavaScript, 61 58 byte

Salvato 3 byte grazie a @lmis !

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

(Non gestisce 0o 1)

Per 13 byte extra (a 71 byte ), è possibile!

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

Queste soluzioni sono abbastanza semplici: fanno un sacco di spazio per non ripetersi per risparmiare qualche byte. Non minimizzato senza il variablsm sembrerebbe:

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

Provalo!

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


Aggiungendo !n?'':n==1?'#':altri 15 byte all'inizio del corpo della funzione, è possibile gestire input 0e 1.
Kayla,

1
n=>(b='#'[r='repeat'](n))e poi #${" "[r](n-=2)}ecc. ti salva 3 byte evitando di ripetere repeat:)
Lmis

2

Python, 109 byte

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
È possibile sostituire list(' '*n)con [' ']*n. Puoi anche sostituirlo x%(n-1)conx%~-n
Wheat Wizard

inoltre, se trasformi il forblocco in una comprensione dell'elenco, puoi salvare più di 20 byte
Rod,

Inoltre, passa a Python 2, rilascia int()e le parentesi intorno print.
Artyer,

Usa <1invece di ==0.
mbomb007,

2

Rubino, 39 byte

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

Si rivela più breve in questo modo di tutte le cose fantasiose che stavo provando. Si noti che questo non gestisce affatto 0 o 1.


2

Python 2, 50 byte

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

Funziona per n>=2. Stampa ogni riga con un cancelletto,n-2 del simbolo appropriato, quindi un altro cancelletto.

Alias ​​il simbolo della sterlina dà la stessa lunghezza:

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

Altri tentativi:

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

Haskell, 49 byte

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

Funziona per n>=2. Definisce l'operazione di sandwich tra un personaggio #per unn stringa terminata nuova riga di carattere, quindi la applica due volte per creare una griglia 2D.

Chiama come:

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

2

C, 83 82 80 78 77 byte

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

Entra di soppiatto in una moltiplicazione e salva un byte ...

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

Conto alla rovescia anche j e salvane un altro ...

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

Conto alla rovescia i da n a zero e salva qualche byte ...

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

Un po 'più facile da capire e 1 byte in più

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

Hai bisogno &&invece di &?
corvus_192,

Sì, deve essere logico e. Posso usare moltiplicare ma richiede troppe parentesi ...
Cleblanc,


1

PHP, 81 69 byte

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

Corri con -r ; fornire input come argomento.

Genera a DivisionByZeroErrorper input = 1.


1

R, 68 70 byte

Funziona per n> 1. Grazie a @Billywob per un paio di byte scambiando l'array con una matrice.

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

Usa rbind e cbind per mettere righe e colonne di #'s attorno a una matrice quadrata di spazi n-2. Anche i newline sono associati alle righe. La nuova riga nella fonte è significativa. L'ingresso è da STDIN


Bello! Non avevo idea che una nuova riga in una stringa si aggiungesse implicitamente \n. È possibile salvare due byte utilizzando matrixinvece di arrayperò.
Billywob,

1

Lisp comune, 150 130 byte

-20 grazie a @Cyoce e @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 #\# #\#))

Uso:

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

Fondamentalmente usa formatdue volte per la parte superiore e inferiore e un ciclo per le righe in mezzo. Il formato call per la parte superiore e inferiore genera una riga che inizia con #e riempita con la larghezza appropriata con #s. La chiamata di formato per le righe tra funziona in modo simile, tranne che per il riempimento sono gli spazi e a# viene stampato alla fine della riga.

Nota: sono piuttosto nuovo in Lisp e mi aspetto di avere molto margine di miglioramento al riguardo.


Perché non chiamarlo s? O sono una funzione anonima?
Cyoce,

Non conosco Lisp, ma sono necessari tutti gli spazi tra una parola e una parentesi aperta alla sua destra? Ad esempio, deve essere dotimes (h (- v 2))o potrebbe essere dotimes(h(- v 2))?
HyperNeutrino

@AlexL. sì, ci sono molte opportunità di miglioramento qui. È possibile rimuovere una tonnellata di spazi bianchi tra parentesi e altri simboli. Lo farò molto velocemente
artificialnull il

0

Haskell, 67 byte

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

Esempio di utilizzo:

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

Come funziona:

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

Jelly , 13, byte

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

TryItOnline! oppure prova da 0 a 15

Come?

,þ%µỊṀ€€ị⁾# 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

Pip , 16 byte

15 byte di codice, +1 per la -nbandiera.

(Y_Xa-2WR'#s)My

Funziona con input> = 2. Provalo online!

Spiegazione della versione un po 'non golfata

Innanzitutto, definiamo una funzione yche accetta un argomento stringa, lo ripete a-2volte (dove si atrova il primo input della riga di comando) e racchiude il risultato #.

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

Successivamente, applichiamo questa funzione due volte - una volta normalmente, poi di nuovo con la mappa - per ottenere il quadrato come un elenco di stringhe:

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

Per input di 4, (y s)risultati in "# #"e y M (y s)in ["####"; "# #"; "# #"; "####"]. Quest'ultimo valore viene quindi stampato, con il -nflag che lo rende separato da una nuova riga.

Trucchi da golf

Per passare dalla versione non golfata alla versione golfizzata:

  • Rimuovi spazi.
  • Yè un operatore, il che significa che possiamo usarlo in un'espressione. Invece di Y...seguirci (ys), possiamo semplicemente fare (Y...s).
  • Il problema è che dobbiamo strappare la funzione prima di fare nuovamente riferimento a come y; quindi yM(Y_Xa-2WR'#s)non funzionerà. Soluzione: scambiare gli operandi Mdell'operatore ap. Finché uno di essi è una funzione e l'altro è un tipo iterabile, non importa in quale ordine entrino.

0

Racchetta 113 byte

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

test:

(f 5)

Produzione:

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

0

SpecBAS - 57 byte

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

?è una scorciatoia per PRINT, #13è il ritorno a capo che può essere incollato alla fine di una stringa senza che sia +necessario unirle.

L'apostrofo sposta il cursore di stampa su una riga.


0

Bloccato, 29 27 byte

Abbastanza dannatamente a lungo per un linguaggio da "golf", ma ho dimenticato quanto funziona: P

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

Spiegazione:

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 byte

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: ottimizzazione della gamma di loop.


0

Lithp , 117 byte

Linea divisa in due per leggibilità:

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

Esempio di utilizzo:

% 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
##########
#        #
#        #
#        #
#        #
#        #
#        #
#        #
#        #
##########
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.