Dada uma entrada de dois números inteiros n e m , produza uma escada ASCII de comprimento n e tamanho m .
Esta é uma escada ASCII de comprimento 3 e tamanho 3:
o---o
| |
| |
| |
+---+
| |
| |
| |
+---+
| |
| |
| |
o---o
Esta é uma escada ASCII de comprimento 5 e tamanho 1:
o-o
| |
+-+
| |
+-+
| |
+-+
| |
+-+
| |
o-o
Esta é uma escada ASCII de comprimento 2 e tamanho 5:
o-----o
| |
| |
| |
| |
| |
+-----+
| |
| |
| |
| |
| |
o-----o
Para ser específico:
O comprimento ( n ) representa quantos quadrados a escada é composta.
O tamanho ( m ) representa a largura e a altura do interior - isto é, sem contar as "bordas" - em cada quadrado.
Cada quadrado é constituído pela área interna cheia de espaços, cercada por
-
s na parte superior e inferior,|
s na esquerda e direita e+
s nos quatro cantos.As bordas entre quadrados se fundem, portanto, duas linhas seguidas se
+--...--+
fundem em uma.Os cantos de toda a escada são substituídos pelo personagem
o
.Opcionalmente, você pode gerar uma nova linha à direita.
O comprimento da escada ( n ) será sempre ≥ 2 e o tamanho ( m ) será sempre ≥ 1.
A entrada pode ser tomada como uma cadeia de caracteres separada por espaço em branco / vírgula, uma matriz / lista / etc. Ou duas funções / linha de comando / etc. argumentos. Os argumentos podem ser tomados na ordem que for mais conveniente / mais golfista.
Como esse é o código-golfe , o código mais curto em bytes vence.
Dica: Os exemplos acima também podem ser usados como casos de teste.
Respostas:
Pitão, 34 bytes
Suíte de teste
Recebe argumentos nova linha separados em STDIN.
Usa uma função auxiliar
:
, que cria cada tipo de sequência vertical a partir de três caracteres, depois replica conforme necessário, transpõe e une as novas linhas.fonte
Ruby, 71
ungolfed no programa de teste
fonte
;
afterh=0
, need space afterputs
. Mas sua pontuação cresce apenas com 1 caractere, pois há um espaço extra antesputs
.CJam,
4342 bytesNão estou satisfeito com a pontuação. Mas eu não sou Dennis, certo?
A entrada é 2 itens separados por espaço. Comprimento primeiro
Explicação
fonte
JavaScript (ES6), 89
... repetir, repetir, repetir ...
Teste
fonte
document.getElementById('elem').
poderia ser substituído porelem.
! +1 para isso, mas, por favor, você poderia apontar alguns documentos sobre isso?C #, 1412 bytes
... Minha primeira tentativa do CodeGolf, não é provável que ganhe, mas funciona, então aqui vamos nós:
fonte
using System;class P{static int m;static void Main(){int n = int.Parse(Console.ReadLine());m = int.Parse(Console.ReadLine());M('o','-');for(int k=0;k<n;k++){for(int i=0;i<m;i++){M('|',' ');}if(k!=n-1){M('+','-');}}M('o','-');Console.ReadKey();}static void M(char x,char y){Console.WriteLine(x+new string(y,m)+x);}}
using System;class P{static int m;static void Main(){int n=int.Parse(Console.ReadLine());m=int.Parse(Console.ReadLine());M('o','-');for(int k=0;k<n;k++){for(int i=0;i<m;i++){M('|',' ');}if(k!=n-1){M('+','-');}}M('o','-');Console.ReadKey();}static void M(char x,char y){Console.WriteLine(x+new string(y,m)+x);}}
using C=System.Console;class P{static void Main(){int i,k,n=int.Parse(C.ReadLine()),m=int.Parse(C.ReadLine());System.Action<char,char> M=(x,y)=>C.WriteLine(x+new string(y,m)+x);M('o','-');for(k=0;k<n;k++){for(i=0;i<m;i++){M('|',' ');}if(k<n-1){M('+','-');}}M('o','-');}}
. Provavelmente, há mais potencial aqui, simplesmente mudando um pouco as coisas.Julia, 87 bytes
Esta é uma função que aceita dois números inteiros e retorna uma string.
Ungolfed:
fonte
pb - 147 bytes
Esse é o tipo de desafio em que, por direito, o pb deve ser realmente bom. Desenhar imagens simples com caracteres é exatamente o que o pb foi projetado. Infelizmente, é apenas um idioma prolixo, eu acho.
Pega primeiro o comprimento da entrada, seguido pelo tamanho. Recebe entrada na forma de valores de bytes, por exemplo:
python -c 'print(chr(5) + chr(7))' | ./pbi.py ladder.pb
Olha, uma animação divertida!
Com comentários:
fonte
Festa pura,
132 130 128127 bytesSim, eu poderia deixar cair mais 1 byte substituindo por último
${p% *}
, mas prefiro o seguinte:Amostra:
fonte
Haskell,
10097 bytesExemplo de uso:
Como funciona:
Edit: @Christian Irwan encontrou 3 bytes. Obrigado!
fonte
m=init$[1..l]>>("|"!" "<$u)++["+"!"-"]
=>(_:m)=[1..l]>>["+"!"-"]++("|"!" "<$u)
_:m=[1..l]>>["+"!"-"]++("|"!" "<$u)
funcionabrainfuck - 334 bytes
Eu esperava que isso fosse muito menor.
Isso configura uma "string" que se parece
| (...) |
e que se parece com+----(...)----+
, imprimindo cada uma delas conforme necessário, com um invólucro especial para oso
s na parte superior e inferior.Requer um intérprete que use células de 8 bits e permita que você vá para a esquerda da célula 0 (seja em células negativas ou em loop). Na minha experiência, essas são as configurações padrão mais comuns.
Com comentários:
fonte
PowerShell, 77
80fonte
Jolf, 36 bytes
Experimente aqui!
Explicação
fonte
Perl, 98 bytes
fonte
+
sinais no seu código, você considerou que os degraus intermediários têm+
sinais em cada extremidade?($n,$m)=@ARGV;
e presumir que já estão definidos - não tenho certeza se isso está no espírito ou não. Vou ter que procurar.@ARGV
. Além disso, ao responder a alguém, lembre-se de incluir @username para receber um alerta. Não preciso fazer isso, pois esta é sua postagem.C, 122 bytes
Experimente online .
fonte
Tcl, 187 bytes
Este código é criado para colocar em um arquivo com argumentos introduzidos na linha de comando. forneça o número de caixas e a largura nessa ordem.
fonte
PHP, 81bytes
Espera 2 argumentos, transmitidos ao chamar o comando PHP diretamente. O primeiro é o tamanho e o segundo é o número de etapas.
Pode exigir algumas melhorias.
fonte
Python 2, 94 bytes
'Ungolfed':
fonte
Perl 5 , 91 + 1 (-a) = 92 bytes
Experimente online!
fonte
Pip
-l
, 35 bytesExperimente online!
Explicação
Algumas outras versões
Eu tentei várias abordagens diferentes tentando pegar Pyth ...
Gosto particularmente dos
t**b
que usam matemática para gerar o padrão vertical da escada:O
1000200020001
pode então ser usado para gerar os padrõeso|||+|||+|||o
e- - - -
, que compõem a escada. Infelizmente, não consegui que essa abordagem fosse mais curta que a abordagem de junção / quebra automática.fonte