Gere caixas!

19

Sua tarefa é gerar caixas usando qualquer caractere ASCII com relação às entradas fornecidas.

Casos de teste

1 1   --> =====
          =   =
          =====

1 2   --> =========
          =   =   =
          =========

2 1   --> =====
          =   =
          =====
          =   =
          =====

2 2   --> =========
          =   =   =
          =========
          =   =   =
          =========

2 5   --> =====================
          =   =   =   =   =   =
          =====================
          =   =   =   =   =   =
          =====================

Entrada

  • A entrada pode ser obtida de uma das seguintes

    • stdin
    • Argumentos da linha de comando
    • Argumentos de função (2 argumentos, um para cada número)
  • A entrada, se retirada de stdinou argumentos de linha de comando, conterá dois números inteiros positivos, separados por um espaço.

  • Os dois números indicam o número de caixas em cada coluna e linha

Resultado

  • As caixas devem ser produzidas em stdout(ou equivalente mais próximo)
  • Cada caixa deve ter três espaços horizontais

Regras

  • Ambos os números serão maiores que 0, mas não ultrapassarão 1000
  • Qualquer caractere visível pode ser usado para a saída das caixas. (desde que não sejam muito severos aos olhos!)
  • Você tem permissão para escrever um programa ou uma função completa.
  • Não deve haver caracteres desnecessários, exceto um caractere de nova linha à direita opcional.

Pontuação

Isso é , então o envio mais curto (em bytes) vence.

Spikatrix
fonte

Respostas:

10

Pitão, 23 bytes

Mjbmsm@"= "&%k4dh*4HhyG

Define a função gque funciona como desejado.

Demonstração.

isaacg
fonte
10

Retina , 57 bytes

1(?=.* (1*))
$1#$1#


1(?=(1*#1*#)*$)
=   
1
====
#
=#

Recebe a entrada unária com uma nova linha à direita.

Cada linha deve ir para seu próprio arquivo e #deve ser alterada para nova linha nos arquivos. Isso é impraticável, mas você pode executar o código como um arquivo com o -ssinalizador, mantendo os #marcadores (e alterando a nova linha à direita também #na entrada). Você pode alterar as #costas para novas linhas na saída para facilitar a leitura, se desejar. Por exemplo:

> echo -n 11 111#|retina -s boxes|tr # '\n'
=============
=   =   =   =
=============
=   =   =   =
=============

Método: 5 etapas de substituição única. Os primeiros dois primeiros (4 linhas) cria uma 2*N+1pela Mgrade de uns e os próximos 3 passos (6 linhas) formatar-lo para a saída desejada.

As seqüências intermediárias (delimitadas por -'s):

11 111
------------------
111
111
111
111
 111
------------------
111
111
111
111
111
------------------
111
=   =   =   
111
=   =   =   
111
------------------
============
=   =   =   
============
=   =   =   
============
------------------
=============
=   =   =   =
=============
=   =   =   =
=============
randomra
fonte
Um arquivo por linha sempre parece uma opção de design muito estranha.
curiousdannii
11
@curiousdannii Foi criado dessa maneira para que o caractere de nova linha pudesse ser usado nas expressões regex sem escapar, mas está planejado para ser alterado para um formato de arquivo 1 mais razoável.
randomra
8

JavaScript ( ES6 ), 83

Uma função com parâmetros de linhas e colunas. Usando cadeias de modelo, existem 2 novas linhas incorporadas que são significativas e contadas.

Saída via alert(pop-up). Como alertusamos uma fonte proporcional, obtemos um resultado melhor usando uma letra com uma largura semelhante ao espaço em vez de =.

Teste no Firefox usando o console para obter a alertsaída real ou execute o trecho abaixo.

f=(r,c)=>{for(x=y="|";c--;)x+="||||",y+="   |";for(o=x;r--;)o+=`
${y}
`+x;alert(o)}

// TEST

// redefine alert to avoid that annoying popup during test
alert=x=>O.innerHTML=x

test=_=>([a,b]=I.value.match(/\d+/g),f(a,b))

test()
<input id=I value='2 3'><button onclick="test()">-></button>
<pre id=O></pre>

edc65
fonte
O snippet de código de execução não funciona para mim, basta ver uma caixa com '2 3' dentro e uma seta que parece sugerir que você deve clicar nele para obter o resultado. Usar o botão de página inteira ou experimentar um navegador diferente não muda nada.
Dennis Jaheruddin
@DennisJaheruddin, O mesmo acontece comigo ao usar o Chrome (não suporta ES6). Tente o Firefox.
Spikatrix
11
@DennisJaheruddinTest in Firefox
edc65
7

JavaScript (ES6), 75 73

Usando repeatchamadas abundantes , repetimos |, repetimos |com espaços à direita e repetimos as duas repetições para criar linhas:

f=(y,x)=>alert(((s="|"[r="repeat"](x*4)+`|
`)+"|   "[r](x)+`|
`)[r](y)+s)

(As novas linhas são significativas, de acordo com a sugestão do edc65 de usar seqüências de caracteres de modelo.)

Snippet:

<input id="x" type="range" max="10" min="1" step="1" value="3"><input id="y" type="range" max="10" min="1" step="1" value="2"><pre id="o"></pre><script>function f(y,x){return ((s="|"[r="repeat"](x*4)+"|\n")+"|   "[r](x)+"|\n")[r](y)+s};function redraw(){document.getElementById("o").innerHTML=f(document.getElementById("y").value,document.getElementById("x").value)};document.getElementById("x").onchange=redraw;document.getElementById("y").onchange=redraw;document.getElementById("x").oninput=redraw;document.getElementById("y").oninput=redraw;redraw();</script>

Sem seqüências de caracteres de modelo, sem reutilização de nome de método e com espaço em branco adicionado:

f=(y,x)=>alert(
    (
      (s="|".repeat(x*4)+"|\n") + 
      "|   ".repeat(x)+"|\n"
    ).repeat(y)+s
)

(Usando a recomendação de edc65 ao uso |para melhor espaçamento visual.)

apsillers
fonte
7

Pip, 29 24 = 23 + 1 bytes

Requer a -nbandeira. Pega a altura e a largura como argumentos da linha de comando e cria caixas de 1s.

([1X4m]XbRLa+1)@<v.1R0s

Explicação:

                         a,b are cmdline args; m is 1000; v is -1; s is " " (implicit)
 [1X4m]                  List containing 1111 and 1000
       Xb                String repetition of each element b times
         RLa+1           Repeat the list a+1 times
(             )@<v       Now we have one row too many at the end, so take everything
                         but the last item (equiv to Python x[:-1])
                  .1     Concatenate a 1 to the end of each row
                    R0s  Replace 0 with space
                         Print, joining list on newlines (implicit, -n flag)

Este programa tira grande vantagem do fato de que cadeias são números e números são cadeias no Pip. (E os três espaços nessas caixas estavam corretos para aproveitar a mvariável incorporada !)

Veja como a lista é criada com a entrada 2 3:

[1111;1000]
[111111111111;100010001000]
[111111111111;100010001000;111111111111;100010001000;111111111111;100010001000]
[111111111111;100010001000;111111111111;100010001000;111111111111]
[1111111111111;1000100010001;1111111111111;1000100010001;1111111111111]
[1111111111111;"1   1   1   1";1111111111111;"1   1   1   1";1111111111111]

E a saída final:

C:\> pip.py 2 3 -ne "([1X4m]XbRLa+1)@<v.1R0s"
1111111111111
1   1   1   1
1111111111111
1   1   1   1
1111111111111

Mais sobre Pip

DLosc
fonte
6

Perl, 72 63 52 50 bytes

Minha versão mais curta ainda usa $/para obter um novo caractere de linha de forma mais compacta:

$ perl -e 'print((($,="="."   ="x pop.$/)=~s/./=/gr)x(1+pop))' 2 5
=====================
=   =   =   =   =   =
=====================
=   =   =   =   =   =
=====================

A atualização anterior coloca as linhas quase vazias no separador de registros de saída $,e imprime uma lista de linhas contínuas.

$ perl -e 'print((($,="="."   ="x pop."\n")=~s/./=/gr)x(1+pop))' 2 5

A versão anterior pode ser um pouco mais clara para o leitor casual:

$ perl -E 'say($y=($x="="."   ="x pop)=~s/./=/gr);for(1..pop){say$x;say$y}' 2 5

A primeira versão usada em @ARGVvez de pop:

$ perl -E 'say($y=($x="="."   ="x$ARGV[1])=~s/./=/gr);for(1..$ARGV[0]){say$x;say$y}' 2 5
Stefan Majewsky
fonte
5

Python 2, 58 57 bytes

Implementação bastante direta.

def f(x,y):a="="*(4*y+1);print(a+"\n="+"   ="*y+"\n")*x+a

Confira aqui.

Obrigado ao Sp3000 por economizar um byte.

Kade
fonte
5

GNU sed -r, 160

Suspiro, pensei que isso seria menor, mas aqui está assim mesmo. Infelizmente, os regexes sed não têm capacidade de pesquisa.

:
s/(.*)1$/   =\1/;t
s/([= ]+)/\1\n\1/
:b
s/   (.*\n)/===\1/;tb
s/(1*)1 $/\n\1/
:c
s/([^\n]*\n[^\n]*\n)(1*)1$/\1\1\2/;tc
s/(=+)(.*)/\1\2\1/
s/(^|\n)(.)/\1=\2/g

Tomando a entrada como unária do STDIN:

$ sed -rf boxes.sed <<< "11 111"
=============
=   =   =   =
=============
=   =   =   =
=============
$
Trauma Digital
fonte
4

CJam, 25 bytes

q~)S3*'=5*+4/f*3f>\)*1>N*

Experimente on-line no intérprete CJam .

Como funciona

q~                        e# Read H and W from STDIN.
   S3*'=5*+               e# Push "   =====".
           4/             e# Chop into ["   =" "===="].
  )          f*           e# Repeat each string W+1 times.
               3f>        e# Cut off the first three characters.
                  \)*     e# Repeat the resulting array H+1 times.
                     1>   e# Remove the first string.
                       N* e# Join the lines.
Dennis
fonte
4

Marbelous, 168 bytes

Essa resposta funciona apenas até 255x255, não 1000x1000, devido a limitações do idioma Marbelous. Estou trabalhando em uma biblioteca de 32 bits, mas não estará pronta tão cedo.

A entrada é fornecida como dois parâmetros de linha de comando ou parâmetros de função na placa principal.

@2@3}1@0
SLEL//>0\/
@3@1}0--
}1&0@0/\&0
@1/\@2}1\/
:SL
..}0@0
&0/\>0&0
EN..--\/
{0@0/\ES
:EL
..@0
..>0EN
}0--\/
@0/\EX
:EX
}0
\/3D3D3D3D
:ES
}0
\/3D202020
:EN
}0
{03D0A

Pseudo-código:

MB(H,W):
    EL(W)
    for 1..H:
        SL(W)
        EL(W)
EL(W):
    for 1..W:
        EX()
    EN()
SL(W):
    for 1..W:
        ES()
    EN()
EX():
    print "===="
ES():
    print "=   "
EN():
    print "=\n"
Sparr
fonte
3

CJam 52 51 46 41 bytes

l~:B;:A;'=:U{{U4*}B*N}:V~{U{SZ*U}B*NUV}A*

Graças ao Sp3000 por -5 caracteres

Obrigado a Martin Büttner ♦ por mais 5 caracteres

Tente

TobiasR.
fonte
3

função c, 81

x,y;f(h,w){for(;y<=h*2;y++)for(x=0;x<w*4+2;x++)putchar(x>w*4?10:x&3&&y&1?32:61);}

Programa de teste:

x,y;f(h,w){for(;y<=h*2;y++)for(x=0;x<w*4+2;x++)putchar(x>w*4?10:x&3&&y&1?32:61);}

int main (int argc, char **argv)
{
  f(2, 3);
}
Trauma Digital
fonte
Deixei alguns caracteres para tratá-la como uma única linha, em vez de duplo para: x;f(h,w){for(w=w*4+2;x<=w*h*2+w;x++)putchar(x%w?x/w%2?x%w%4!=1?32:61:61:10);}- 78
11
Deveria ter examinado as outras respostas primeiro = /, meu comentário é uma versão mais longa da resposta de Reto Koradi.
sim, eu tentei muito difícil (e falhou) para obter isso em um único (menor) de loop
Digital Trauma
3

PHP4.1, 76 71 69 bytes

Isto é o mais golfe possível.

$R=str_repeat;echo$R(($T=$R('-',4*$H+1))."
|{$R('   |',$H)}
",$V),$T;

Isso espera que a chave Htenha o número de linhas e Vo número de caixas por linha.

Estou usando -e |só assim as caixas realmente parecem caixas. Se necessário, posso alterá-lo para =. Não importa o caractere usado.
Sair -e |também ajuda a entender a bagunça que está acontecendo.


Método antigo, 76 bytes:

for($R=str_repeat;$H--;)echo$T=$R('-',($V*4)+1),"
|{$R('   |',$V)}
";echo$T;

Exemplo de saída:

http://localhost/file.php?H=2&V=3

-------------
|   |   |   |
-------------
|   |   |   |
-------------
Ismael Miguel
fonte
3

Julia, 59 bytes

(n,m)->(l="="^(4m+1)*"\n";print(l*("="*"   ="^m*"\n"*l)^n))

Isso cria uma função sem nome que aceita dois números inteiros como entrada e imprime o resultado em STDOUT. Para chamá-lo, dê um nome, por exemplo f=(n,m)->....

Ungolfed + explicação:

function f(n, m)
    # Store the solid row
    l = "="^(4m + 1) * "\n"

    # Print all rows by repeating a pattern n times
    print(l * ("=" * "   ="^m * "\n" * l)^n)
end

Exemplos:

julia> f(2, 3)
=============
=   =   =   =
=============
=   =   =   =
=============

julia> f(1, 5)
=====================
=   =   =   =   =   =
=====================

Todas as sugestões são bem-vindas.

Alex A.
fonte
3

bash + coreutils, 57

dc -e"2do$2 4*1+^1-pd8*F/1+$1si[fli1-dsi0<c]dscx"|tr 0 \ 

Isso é usado dcpara imprimir números binários que possuem 1s para as bordas da caixa 0es para os espaços.

  • o número all-ones X é calculado por2 ^ (width * 4 + 1) - 1 , depois pressionado e impresso
  • o 10001...0001número é calculado porX* 8 / 15 + 1 , em seguida, pressionado
  • a pilha é então despejada heightvezes

Em trseguida, converte os 0s em caracteres de espaço.

Resultado

$ ./boxes.sh 2 4
11111111111111111
1   1   1   1   1
11111111111111111
1   1   1   1   1
11111111111111111
$ 
Trauma Digital
fonte
3

R, 83 81

Como uma função sem nome, tendo hew como parâmetros. Constrói a primeira e a segunda linhas em um vetor para cada linha e as replica hvezes. Anexa um vetor para a linha inferior e catremove o vetor usando fillpara restringir o comprimento das linhas. Agora tira proveito da regra de qualquer caractere visível.

function(h,w)cat(rep(c(A<-rep(1,w*4+2),rep('   1',w)),h),A[-1],fill=w*4+1,sep='')

Execução de teste

> f=function(h,w)cat(rep(c(A<-rep(1,w*4+2),rep('   1',w)),h),A[-1],fill=w*4+1,sep='')
> f(4,2)
111111111
1   1   1
111111111
1   1   1
111111111
1   1   1
111111111
1   1   1
111111111
> 
MickyT
fonte
3

Python 3 2, 160 87 85 79 bytes

Eu sei que isso pode ser muito mais jogado , gostaria de algumas sugestões, pois esta é minha primeira tentativa no golfe.

def d(x,y):
    for i in[1]*x:print'='*(4*y+1)+'\n'+'=   '*(y+1)
    print'='*(4*y+1)

Graças às dicas do @Cool Guy e do @ Sp3000, reduzi o tamanho para um pouco acima abaixo da metade.

Por exemplo: d (3,3)

=============
=   =   =   =   
=============
=   =   =   =   
=============
=   =   =   =   
=============

Experimente aqui .

Desculpe os espaços em branco à direita.

nsane
fonte
11
O nível de indentação pode ser reduzido.
Spikatrix
3
Você não precisa criar uma lista e participar. As strings podem ser multiplicadas'='*(4*y+1)
Sp3000
11
A configuração w=4*y+1salva 3 bytes.
DLosc
@ Cara Legal Estou usando uma guia, não 4 espaços.
N
Ah ok. Não percebi isso.
Spikatrix
2

KDB (Q), 37 bytes

{(3+2*x-1)#(5+4*y-1)#'(4#"=";"=   ")}

Explicação

                      (4#"=";"=   ")     / box shape
           (5+4*y-1)#'                   / extend y axis
 (3+2*x-1)#                              / extend x axis
{                                   }    / lambda

Teste

q){(3+2*x-1)#(5+4*y-1)#'(4#"=";"=   ")}[2;5]
"====================="
"=   =   =   =   =   ="
"====================="
"=   =   =   =   =   ="
"====================="
WooiKent Lee
fonte
2

JavaScript, 92 85 bytes

Eu esperava que isso fosse mais curto do que a outra resposta JS (bom trabalho como sempre, edc65), mas tudo bem. Tenho a sensação de que a matemática aqui pode ser ainda mais jogada.

f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s
vvye
fonte
Desculpe, não posso ajudar com a matemática - Minha cabeça está girando ... mas aqui estão algumas microop: f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s-> 85
edc65
@ edc65 isso é ótimo, obrigado! Coisas como 2*r+1=> r-~rsão exatamente o que eu quis dizer com golfe, e essa em particular é genial. :)
vvye
2

Oitava, 69 65 64

y=ones([2,4].*input()+1);y(1:2:end,:)=y(:,1:4:end)=4;char(y+31)

Agradecemos ao DLosc por apontar problemas que levaram a -1

Aceita entradas [1 1]e saídas:

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

Você também pode simplesmente digitar '1' e obter 1x1. Se a entrada realmente precisa ser 1 1, o tamanho sobe para88 8584 :

y=ones([2,4].*eval(['[',input(0,'s'),']'])+1);y(1:2:end,:)=y(:,1:4:end)=4;char(y+31)

Nota: O Matlab não permite o encadeamento ou entrada do Octave (número inteiro), mas aqui está a versão do Matlab ( 67 ):

y=ones([2,4].*input('')+1);y(1:2:end,:)=4;y(:,1:4:end)=4;char(y+31)
barra sudo rm -rf
fonte
2

C, 76 bytes

w,n;f(r,c){for(w=c*4+2,n=w*r*2+w;n--;)putchar(n%w?n/w%2&&n%w%4-1?32:61:10);}

Chamado como uma função com número de linhas e colunas como argumentos. Por exemplo:

f(5, 2)
Reto Koradi
fonte
2

CJam, 30 29 bytes

Nova versão com redundante +no final removida (obrigado, Dennis):

l~_4*)'=*N+:F\'=S3*+*'=+N++*F

Eu sei que Dennis já postou uma solução CJam que supera isso por quilômetros. Mas esta é minha primeira tentativa no CJam, por isso é um milagre que funcione. :)

Força bastante bruta. Constrói a primeira linha a partir de 4 * H + 1 =sinais e, em seguida, a segunda linha de tempos =repetidos H, com outra =adicionada. Em seguida, concatena as duas linhas, repete o tempo todo Ve adiciona outra cópia da primeira linha.

Parece que eu tenho muitas manipulações de pilha e até acabei armazenando a primeira linha em uma variável porque tive que embaralhar as coisas na pilha ainda mais.

No geral, não é muito elegante, mas você precisa começar em algum lugar ... e eu queria tentar um problema simples primeiro.

Reto Koradi
fonte
Você não precisa +do final. CJam imprime a pilha inteira.
Dennis
2

CJam, 23

q~[F8]f{2b*1+' f+N}*_0=

Experimente online

Explicação:

q~        read and evaluate the input (height width)
[F8]      make an array [15 8] - 1111 and 1000 in base 2
f{…}      for width and each of [15 8]
  2b      convert the number to base 2
  *       repeat the digits "width" times
  1+      append a 1 to the array of digits (right edge)
  ' f+    add the space character to each digit (0->' ', 1->'!')
  N       push a newline
*         repeat the resulting array "height" times
_0=       copy the first line (bottom edge)
aditsu
fonte
1

Java, 181

Espero que de acordo com

Você tem permissão para escrever um programa ou uma função completa.

é compatível com as regras contar os bytes da função , que é 181 neste caso

import static java.lang.System.*;
public class Boxes
{
    public static void main(String[] args)
    {
        Boxes b=new Boxes();
        System.out.println("1,1:");
        b.b(1,1);
        System.out.println("1,2:");
        b.b(1,2);
        System.out.println("2,1:");
        b.b(2,1);
        System.out.println("2,2:");
        b.b(2,2);
        System.out.println("2,5:");
        b.b(2,5);
    }

    void b(int R, int C){String s="",e=s,x,y,z=s,a="====",n="=\n";int r,c;for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="=   ";}s+=x+n+y+n;}for(c=C;c-->0;){z+=a;}s+=z+n;out.println(s);}
}
Marco13
fonte
A saída está errada. Veja a saída no 2: " Cada caixa deve ter três espaços horizontais ". Seu código gera dois espaços, não três
Spikatrix
@CoolGuy contado mal esta - agora 2 bytes mais, mas isso não muda muito ...
Marco13
11
Está bem. +1. Salve dois bytes alterando for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}parafor(r=R;r-->0;s+=x+n+y+n){x=y=e;for(c=C;c-->0;y+="= "){x+=a;}}
Spikatrix 13/06/2015
1

C #, 153 151 150

Isso não pode realmente competir, mas aqui é apenas por diversão:

(h,w)=>{string s="=",e="\n",a="====",b="   =",m=a,o;int i=0,j;for(;i++<=h*2;){o=s;for(j=0;j++<w+1;o=m)System.Console.Write(o);m=m==a?b:a;s=e+s;e="";}}

Como executar:

public class Program
{
    public static void Main()
    {
        new System.Action<int, int>((h,w)=>{string s="=",e="\n",a="====",b="   =",m=a,o;int i=0,j;for(;i++<=h*2;){o=s;for(j=0;j++<w+1;o=m)System.Console.Write(o);m=m==a?b:a;s=e+s;e="";}})(3, 4);
    }
}

Aberto para melhorias.

pmudra
fonte
substitua string por var.
precisa saber é o seguinte
Infelizmente isso não é permitido. Veja isto
pmudra 12/06/2015
11
Declarar aqueles que estão intfora do loop pode salvar um byte.
Spikatrix
1

Python 2.7, 66 bytes.

Eu sei que já existem soluções melhores em python, mas essa é a melhor que eu criei.

def f(x,y):a,b,c="="*4,"   =","\n=";print "="+a*y+(c+b*y+c+a*y)*x

Exemplo:

f(3,4)

=================
=   =   =   =   =
=================
=   =   =   =   =
=================
=   =   =   =   =
=================
heo
fonte
Desculpe, mas isso produz resultados incorretos para os casos de teste 2,3 e 5. Você misturou as colunas e linhas e conseguiu o caminho oposto.
Spikatrix
1

Ruby, 57 48 45

f=->h,w{l=?=*w*4+?=;(l+$/+'=   '*w+"=
")*h+l}

Uso:

print f[2,5]

Agradecimentos ao manatwork por salvar 3 bytes.

rr-
fonte
Duas pequenas possibilidades de aprimoramento: '='?=e "<LF>"$/.
manatwork
Outra pequena: ?=*(w*4+1)?=+?=*w*4
manatwork
1

Java, 123 119 bytes

void p(int h,int w){String b="=",d="\n=";for(;w-->0;d+="   =")b+="====";for(d+="\n"+b;h-->0;b+=d);System.out.print(b);}

O abuso dos parâmetros de entrada como contadores ajudou bastante na diminuição do tamanho do código.

Agradecemos a Cool Guy por sugerir o abuso da sintaxe.

ECS
fonte
Golf mais usando um forloop em vez de um whileloop.
Spikatrix
Infelizmente para (; w -> 0;) tem o mesmo comprimento de enquanto (w -> 0)
ECS
11
Eu quis dizer while(w-->0){d+=" =";b+="====";}-> for(;w-->0;b+="====")d+=" =";o que poupa três bytes
Spikatrix
Você está certo. Na verdade, consegui extrair 4 bytes disso graças à sua sugestão.
ECS
1

SAS, 117 119

macro a array a[0:1]$4('#   ' '####');do x=1 to 2+2*&x-1;t=repeat(a[mod(x,2)],&y-1);put t $char%%eval(&y*3). '#';end;%

Exemplo:

%let x=4;
%let y=4;
data;a;run;

Resultado:

#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############
#   #   #   #
#############
Ovo frito
fonte
Existe algum compilador online onde eu possa testar isso? BTW, conforme seu resultado, seu programa produz resultados incorretos. Veja output2: Cada caixa deve ter três espaços horizontais neles
Spikatrix
@CoolGuy, você está certo, eu não entendi, atualizei meu post. Você pode tentar a SAS On Demand , seria o caminho menos problemático para acesso um compilador on-line sem a criação de seu próprio AWS Instância
Ovo frito
Seu primeiro link não funciona para mim. O Chrome dáDNS_PROBE_FINISHED_NXDOMAIN
Spikatrix
Experimente este, embora o primeiro link funcione bem para mim, SAS On Demand, ou siga o link nesta página para o 'Centro de Controle' aqui
Fried Egg
Não sei por que, mas ir ao centro de controle causa o mesmo erro mencionado no meu comentário anterior: /
Spikatrix