Desafio
Este é um desafio simples. Dados dois inteiros positivos w
e h
crie uma cerca ASCII com largura w
e altura de h
. A cerca deve ser construída usando as seguintes regras:
- O
+
personagem representará uma postagem. - O
-
personagem será usado para representar a largura da cerca. - O
|
será usado para representar a altura da cerca. - Após exatamente três
-
caracteres terem sido produzidos, um+
caractere deve ser produzido posteriormente. Excluindo os quatro cantos, qualquer outra vez que você gerar a+
seria inválido. Você tem permissão para seguir esta regra começando pela esquerda ou pela direita (veja exemplos), mas você deve ser consistente. - Após exatamente dois
|
caracteres terem sido produzidos, um+
caractere deve ser produzido posteriormente. Excluindo os quatro cantos, qualquer outra vez que você gerar a+
seria inválido. Você tem permissão para seguir esta regra começando de cima ou de baixo (veja exemplos), mas você deve ser consistente. - Cada cerca terá exatamente quatro cantos e cada canto será representado com um
+
.
Em outras palavras: a cada três -
caracteres, você deve gerar a +
. E a cada dois |
caracteres, você deve gerar a +
.
Você pode supor que a cerca sempre será um retângulo e que ambas w
e h
nunca serão maiores 100
ou menores que 1
. Trailing e / ou espaço em branco anterior é permitido.
Exemplos / Casos de Teste
w = 1
h = 1
+-+
| |
+-+
w = 3
h = 2
+---+
| |
| |
+---+
w = 5
h = 7
+---+--+ or +--+---+
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
+---+--+ +--+---+
w = 10
h = 5
+---+---+---+-+ or +-+---+---+---+
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
+---+---+---+-+ +-+---+---+---+
w = 4
h = 4
+---+-+ or +-+---+
| | | |
| | | |
+ + + +
| | | |
| | | |
+---+-+ +-+---+
Regras
- Aplicam-se brechas padrão .
- Isso é código-golfe , então a resposta mais curta em bytes vence!
+
toques?+-+-+-+-+-+
é inválido. Desculpe pela confusão.Respostas:
C, 131 bytes
Experimente online!
Explicação:
fonte
Python 3 ,
140137128119106105 bytesExperimente online!
fonte
in
e[w+1+(w-1)//3]]
na última parte.'\n') for
também. Além disso, você pode mudar(w-1)
para~-w
qual permite remover os parênteses, pois os operadores unários têm uma precedência mais alta que os binários. O mesmo para(h-1)
->~-h
e(a-1)
->~-a
. Tente online - 128 bytesdef f(w,h)
é o mesmo comprimento quelambda w,h
, mas permite que você use várias linhas se isso ajuda você golf o seu código ainda maisa=~-w//3-~w;
salvar 1 byteMathematica, 165 bytes
fonte
Pip , 38 bytes
37 bytes de código, +1 para
-n
sinalizador.Leva largura e altura como argumentos da linha de comando. Experimente online!
Explicação
fonte
Carvão,
474540 bytesExplicação: Trabalha desenhando
-
s /|
s de cada lado , inserindo+
s sempre que necessário, e finalizando com a+
. Depois de desenhar os lados superior e direito, salta de volta ao início para desenhá-los na ordem inversa, desenhando efetivamente os lados esquerdo e inferior. Não sei se a simetria rotacional é permitida, mas se sim, então para2725 bytes:Leva a idéia acima ao extremo, desenhando o lado superior, girando para a esquerda, desenhando o lado direito, girando novamente e depois repetindo para desenhar os lados inferior e esquerdo ao contrário.
fonte
JavaScript (ES6),
133132 bytesRecebe entrada na sintaxe de currying:
f(width)(height)
.Snippet de teste
fonte
Pitão , 40 bytes
Conjunto de teste .
fonte
Java (OpenJDK 8) ,
178177 bytesExperimente online!
-1 byte graças a @KevinCruijssen
fonte
w->h->
Experimente aqui.Carvão ,
47 4537 bytesExperimente online!
Uma abordagem diferente da @ Neil's : primeiro, crio as strings
α
eβ
os caracteres nas bordas horizontal e vertical, usando oRange
operador que cria a repetição de uma string até que um determinado comprimento seja atingido. Em seguida, imprimo-os na ordem correta:Link para uma versão detalhada .
fonte
Range
, isso economiza 3 bytes na minha segunda abordagem!A…+---÷⁺²×⁴N³αA…+||÷⁺¹×³N²βPα↓βα+↖↑⮌β
.05AB1E , 58 bytes
Experimente online!
Mais difícil em 05AB1E do que eu pensava.
fonte