Dado um número inteiro positivo <100 (de 1 a 99, incluindo 1 e 99), gera muitos cacifos.
Um armário é definido da seguinte maneira:
+----+
| |
| |
| |
| nn |
+----+
onde nn
está o número do armário, na base 10. Se houver um número de 1 dígito, ele será expresso com um 0 na frente. Por exemplo, o número do armário 2 exibe o número 02
.
Os armários podem ser empilhados, mas com altura até 2:
+----+
| |
| |
| |
| on |
+----+
| |
| |
| |
| en |
+----+
on
denota um número ímpar, en
um número par. Armários também podem ser colocados um ao lado do outro.
+----+----+
| | |
| | |
| | |
| 01 | 03 |
+----+----+----+
| | | |
| | | |
| | | |
| 02 | 04 | 05 |
+----+----+----+
Observe que o armário número 5 é um armário com números ímpares que fica na parte inferior. Isso ocorre porque, quando você tem uma entrada com números ímpares, o último armário deve ser colocado no chão (porque um armário suspenso custa muito). O exemplo acima, portanto, é a saída esperada para n = 5. n = 0 deve retornar um nada.
Regras: Métodos padrão de entrada / saída. Entrada em qualquer formato conveniente, saída como uma string. Aplicam-se brechas padrão.
Casos de teste:
Input
Output
---------------------
1
+----+
| |
| |
| |
| 01 |
+----+
--------------------- (newlines optional in case 1)
4
+----+----+
| | |
| | |
| | |
| 01 | 03 |
+----+----+
| | |
| | |
| | |
| 02 | 04 |
+----+----+
---------------------
5
+----+----+
| | |
| | |
| | |
| 01 | 03 |
+----+----+----+
| | | |
| | | |
| | | |
| 02 | 04 | 05 |
+----+----+----+
---------------------
16
+----+----+----+----+----+----+----+----+
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| 01 | 03 | 05 | 07 | 09 | 11 | 13 | 15 |
+----+----+----+----+----+----+----+----+
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| 02 | 04 | 06 | 08 | 10 | 12 | 14 | 16 |
+----+----+----+----+----+----+----+----+
Isso é código-golfe , então o código mais curto vence!
1
precisam ser exibidas?Respostas:
Pitão , 66 bytes
Suíte de teste.
fonte
Python 2,
201191185175171166164163 bytesExperimente Online!
fonte
PHP, 191 bytes
Experimente online!
PHP, 235 bytes
Caso 1 com novas linhas opcionais
Experimente online!
Expandido
PHP, 300 bytes
substitua
["","",""]
por["\n","\n","\n"]
se você quiser novas linhas para o caso1
Experimente online!
fonte
Ruby,
256239201191183 bytesIsso é muito longo. Vou trabalhar mais no golfe.
fonte
C (gcc) ,
426335300294282252249246244237 bytesIsso realmente precisa ser jogado para baixo
Experimente online!
fonte
-~n/2
vez den/2+n%2
Lote, 305 bytes
+----+
e| |
são semelhantes ao+ +
fato de poderem ser gerados por meio de uma única substituição, e acaba sendo um pouco mais curto do que gerá-los separadamente (a citação extra necessária para|
s não ajuda).fonte
Pitão -
9774868075 bytesExperimente aqui
fonte
JavaScript ES6, 224 bytes
Utilizamos algumas idéias da resposta em Python do viciado em matemática
Snippet de teste
Limpo
fonte
Carvão , 37 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Insira o número de armários em
q
.Passe os cacifos de
1
atéq
inclusivo.Calcule a direção para o próximo armário e repita isso 5 vezes (jogando golfe do que usando movimentos de salto).
Desenhe o armário, começando no canto inferior esquerdo. (O canto inferior direito também ocupa 4 bytes, enquanto o canto superior direito ocupa 5. O canto superior esquerdo leva apenas 3 bytes, mas o número do armário demoraria mais para ser desenhado.)
Desenhe o zero inicial do número do armário, se necessário.
Desenhe o número do armário invertido e da direita para a esquerda, efetivamente justificando-o.
Volte para o canto inferior esquerdo pronto para calcular a direção para o próximo armário.
Edit: Versões posteriores do Charcoal suportam esta solução de 32 bytes:
Experimente online! Link é a versão detalhada do código. Explicação:
Leve os números de
1
para o número de entrada inclusive em pares. (Se o número de entrada for ímpar, a última matriz terá apenas um elemento.)Faça um loop sobre cada par na ordem inversa.
Desenhe o zero inicial do número do armário, se necessário.
Desenhe o número do armário invertido e da direita para a esquerda, efetivamente justificando-o.
Mova para o canto superior esquerdo do armário e desenhe-o. Este também é o canto inferior esquerdo do próximo armário, então estamos prontos para desenhar o segundo armário do par, se aplicável.
Vá para o próximo par de armários. (Isso deve ocorrer antes do loop interno para economizar 1 byte, mas o carvão vegetal gera uma saída incorreta para uma entrada de 1 por algum motivo.)
fonte