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
stdin
ou 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 é código-golfe , então o envio mais curto (em bytes) vence.
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). Comoalert
usamos 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
alert
saída real ou execute o trecho abaixo.fonte
Test in Firefox
JavaScript (ES6),
7573Usando
repeat
chamadas abundantes , repetimos|
, repetimos|
com espaços à direita e repetimos as duas repetições para criar linhas:(As novas linhas são significativas, de acordo com a sugestão do edc65 de usar seqüências de caracteres de modelo.)
Snippet:
Sem seqüências de caracteres de modelo, sem reutilização de nome de método e com espaço em branco adicionado:
(Usando a recomendação de edc65 ao uso
|
para melhor espaçamento visual.)fonte
Pip,
2924 = 23 + 1 bytesRequer a
-n
bandeira. Pega a altura e a largura como argumentos da linha de comando e cria caixas de1
s.Explicação:
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
m
variável incorporada !)Veja como a lista é criada com a entrada
2 3
:E a saída final:
Mais sobre Pip
fonte
Perl,
72635250 bytesMinha versão mais curta ainda usa
$/
para obter um novo caractere de linha de forma mais compacta:A atualização anterior coloca as linhas quase vazias no separador de registros de saída
$,
e imprime uma lista de linhas contínuas.A versão anterior pode ser um pouco mais clara para o leitor casual:
A primeira versão usada em
@ARGV
vez depop
:fonte
Python 2,
5857 bytesImplementação bastante direta.
Confira aqui.
Obrigado ao Sp3000 por economizar um byte.
fonte
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.
Tomando a entrada como unária do STDIN:
fonte
CJam, 25 bytes
Experimente on-line no intérprete CJam .
Como funciona
fonte
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.
Pseudo-código:
fonte
CJam
52514641 bytesGraças ao Sp3000 por -5 caracteres
Obrigado a Martin Büttner ♦ por mais 5 caracteres
Tente
fonte
função c, 81
Programa de teste:
fonte
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);}
- 78PHP4.1,
767169 bytesIsto é o mais golfe possível.
Isso espera que a chave
H
tenha o número de linhas eV
o 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:
Exemplo de saída:
fonte
Julia, 59 bytes
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:
Exemplos:
Todas as sugestões são bem-vindas.
fonte
bash + coreutils, 57
Isso é usado
dc
para imprimir números binários que possuem1
s para as bordas da caixa0
es para os espaços.2 ^ (width * 4 + 1) - 1
, depois pressionado e impresso10001...0001
número é calculado porX
* 8 / 15 + 1
, em seguida, pressionadoheight
vezesEm
tr
seguida, converte os0
s em caracteres de espaço.Resultado
fonte
R,
8381Como 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
h
vezes. Anexa um vetor para a linha inferior ecat
remove o vetor usandofill
para restringir o comprimento das linhas. Agora tira proveito da regra de qualquer caractere visível.Execução de teste
fonte
Python
32,160878579 bytesEu sei que isso pode ser muito mais jogado , gostaria de algumas sugestões, pois esta é minha primeira tentativa no golfe.
Graças às dicas do @Cool Guy e do @ Sp3000, reduzi o tamanho para um pouco
acimaabaixo da metade.Por exemplo: d (3,3)
Experimente aqui .
Desculpe os espaços em branco à direita.
fonte
'='*(4*y+1)
w=4*y+1
salva 3 bytes.KDB (Q), 37 bytes
Explicação
Teste
fonte
JavaScript,
9285 bytesEu 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.
fonte
f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s
-> 852*r+1
=>r-~r
são exatamente o que eu quis dizer com golfe, e essa em particular é genial. :)Oitava,
696564Agradecemos 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 para888584 :Nota: O Matlab não permite o encadeamento ou entrada do Octave (número inteiro), mas aqui está a versão do Matlab ( 67 ):
fonte
C, 76 bytes
Chamado como uma função com número de linhas e colunas como argumentos. Por exemplo:
fonte
CJam,
3029 bytesNova versão com redundante
+
no final removida (obrigado, Dennis):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=
repetidosH
, com outra=
adicionada. Em seguida, concatena as duas linhas, repete o tempo todoV
e 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.
fonte
+
do final. CJam imprime a pilha inteira.CJam, 23
Experimente online
Explicação:
fonte
Dart, 57
Experimente: https://dartpad.dartlang.org/36ed632613395303ef51
fonte
Java, 181
Espero que de acordo com
é compatível com as regras contar os bytes da função , que é 181 neste caso
fonte
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;}}
C #,
153151150Isso não pode realmente competir, mas aqui é apenas por diversão:
Como executar:
Aberto para melhorias.
fonte
int
fora do loop pode salvar um byte.Python 2.7, 66 bytes.
Eu sei que já existem soluções melhores em python, mas essa é a melhor que eu criei.
Exemplo:
fonte
Ruby,
574845Uso:
Agradecimentos ao manatwork por salvar 3 bytes.
fonte
'='
→?=
e"<LF>"
→$/
.?=*(w*4+1)
→?=+?=*w*4
Java,
123119 bytesO 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.
fonte
for
loop em vez de umwhile
loop.while(w-->0){d+=" =";b+="====";}
->for(;w-->0;b+="====")d+=" =";
o que poupa três bytesSAS,
117119Exemplo:
Resultado:
fonte
DNS_PROBE_FINISHED_NXDOMAIN