Eu gosto de arte ascii e fico muito entediado, então encontrei alguns personagens ascii e comecei a fazer coisas aleatórias, castelo mario de 8 bits, labirintos e arcos. Descobri que os arcos podiam ser facilmente empilhados de maneira organizada.
╔═══════╗
║╔═════╗║
║║╔═══╗║║
║║║╔═╗║║║
╨╨╨╨─╨╨╨╨
Desafio
Crie um programa, função ou qualquer outro formato padrão que aceite um número inteiro maior ou igual a 0 (a menos que você esteja fazendo o bônus) e produza arte ascii com a quantidade de arcos especificada.
Casos de teste
Entrada:
7
Resultado:
╔═════════════╗
║╔═══════════╗║
║║╔═════════╗║║
║║║╔═══════╗║║║
║║║║╔═════╗║║║║
║║║║║╔═══╗║║║║║
║║║║║║╔═╗║║║║║║
╨╨╨╨╨╨╨─╨╨╨╨╨╨╨
Alt:
+-------------+
|+-----------+|
||+---------+||
|||+-------+|||
||||+-----+||||
|||||+---+|||||
||||||+-+||||||
||||||| |||||||
---------------
Entrada:
1
Resultado:
╔═╗
╨─╨
Alt:
+-+
| |
---
- Se o número inteiro for 0, não produza nada
- Esta pergunta estará no utf-8, cada caractere contará como um "byte"
- Este é um codegolf, então a resposta mais curta vence.
- Você tem a opção de usar em
+-+
vez de╔═╗
, em---
vez de╨─╨
e em|
vez de║
Bônus (não decidido se é permitido permitir isso na versão alternativa porque não seria tão difícil)
-10% se o programa suportar números negativos e virar os arcos da seguinte maneira
╥╥╥╥─╥╥╥╥
║║║╚═╝║║║
║║╚═══╝║║
║╚═════╝║
╚═══════╝
+---+
na parte superior, nas laterais|
e na parte inferior da-----
qual me parece bem. Juanpotato, se você quiser usar caracteres não-ascii, indique a codificação na pergunta. No momento, estou votando para fechar como pouco claro.Respostas:
CJam, 59 bytes
Experimente aqui!
fonte
Python 2, 106 bytes (94 caracteres)
Bem direto. Imprime linha por linha com um número variável de barras horizontais e verticais. A última linha é impressa separadamente.
Sinto que estou perdendo algumas otimizações. O fato de os caracteres serem múltiplos bytes significa que você não pode fazer algo assim
'║╨'[n>0]
, então não achei uma boa maneira de imprimir a última linha do loop. É feio que haja tanta manipulação acontecendo com o contador. Eu gostaria de atualizar as strings diretamente, tipos+='║'
, mas o índice também é usado para barras horizontais.fonte
+-|
para construir os arcos, veja op para exemplos.Perl,
7882 caracteresInfelizmente, não consegui descobrir uma maneira de aproveitar o bônus sem aumentar o tamanho em mais de 10%. Eu ainda posso prevalecer.
Ungolfed
Bem simples, realmente. Constrói a linha inferior (
╨$n╨
) incrementalmente, enquanto reduz a linha superior (══
) em dois caracteres, terminando quando não pode mais ser reduzida, para que eu não precise mexer nos contadores.fonte
─
para n = 0, mas não deve imprimir nada.-n
: Experimente online!Bash, 124 bytes (112 caracteres)
Exemplo de execução:
fonte
Japt
-R
, 29 bytesUsa
+
&-
. Sacrificou 4 bytes para lidar com a validação de entrada sangrenta !Tente
Explicação
fonte
0
If the integer is 0 then don't output anything
do desafio: /0
,false
ou uma string vazia a um custo de alguns bytes, mas não sei se alguma seria aceitável, exceto, talvez, a string vazia, que me custaria 5 bytes (0
me custaria apenas 1).JavaScript (ES6), 101 caracteres
Explicação
Função recursiva que imprime cada linha
Teste
O teste não usa o parâmetro padrão para compatibilidade do navegador.
Mostrar snippet de código
fonte
PHP (109 caracteres)
Ainda precisamos nos livrar desse str_repeat, mas a maioria das alternativas não trata de caracteres mulyibyte.
fonte
Retina , 79 caracteres
Experimente online.
Isso usa um novo recurso no Retina que substitui um número decimal
\d+
por uma lista com tantos caracteres$0$*═
.fonte
Swift (209 bytes)
Provavelmente o Swift não é o melhor idioma para isso, esta é a minha primeira vez tentando fazer um desafio de código de golfe:
fonte
Ruby, 90 bytes (74 caracteres)
Exemplo de execução:
fonte
Haskell,
151162 bytesEdit: Eu esqueci de lidar
0
como entradafonte
, 54 caracteres / 95 bytes
Try it here (Firefox only).
Explicação
NOTA: isso faz uso de bons e velhos blocos de cópias para chegar aos pontos onde a declaração da variável comum não pôde alcançar.
fonte
Sed, 97 bytes (81 caracteres)
(Código de 96 bytes (80 caracteres) + opção de linha de comando de 1 caractere)
Entrada esperada como número inteiro unário .
Exemplo de execução:
Sed, 105 bytes (75 caracteres)
(Código de 104 bytes (74 caracteres) + opção de linha de comando de 1 caractere)
Entrada esperada como número inteiro unário .
Exemplo de execução:
fonte
Tela , 15 bytes
Experimente aqui!
Explicação:
fonte