Temos um jardim quadrado de 10x10 metros fora de nossa casa. Queremos plantar grama e fazer um terraço. Decidimos como dividir o jardim, mas ainda não decidimos a relação entre quantidade de grama e terraço.
Precisamos de ajuda para visualizá-lo, e a arte ASCII é claramente a melhor maneira de fazê-lo.
Desafio:
Pegue um número inteiro no intervalo inclusivo [0, 100] (ou opcionalmente decimal [0, 1]) representando quantos por cento do jardim deve ser terraço.
Um metro quadrado de terraço será representado por um traço -
ou um bar |
. Um metro quadrado de grama será representado por uma marca de hash #
.
- Se a quantidade de terraço for menor ou igual a 50%, o jardim deve ser coberto com barras, começando no canto inferior esquerdo e preenchido verticalmente e horizontalmente.
- Se a quantidade de terraço for superior a 50%, queremos que o deck seja para o outro lado (traços em vez de barras), começando no canto inferior esquerdo e preenchendo horizontalmente e verticalmente.
Exemplos:
N = 25%
||########
||########
||########
||########
||########
|||#######
|||#######
|||#######
|||#######
|||#######
N = 75%
##########
##########
-----#####
----------
----------
----------
----------
----------
----------
----------
N = 47%
||||######
||||######
||||######
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 50%
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 51%
##########
##########
##########
##########
-#########
----------
----------
----------
----------
----------
N = 0%
##########
##########
##########
##########
##########
##########
##########
##########
##########
##########
N = 100%
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
Isso é código-golfe então o código mais curto em bytes vence. Regras padrão sobre E / S. Isso é arte ASCII, portanto a saída deve se parecer com os exemplos acima. Ou seja, a saída ["|", "|" ...]
não está OK.
As explicações são incentivadas como sempre :)
Respostas:
APL (Dyalog) , 34 bytes
Função de prefixo anônimo esperando número inteiro no intervalo de 0 a 100. Assume
⎕IO
( I ndex O rigin) como sendo0
, o padrão em muitos sistemas.Experimente online!
{
...}
lambda;⍵
é argumento:'#-|[
...]
Indexe a sequência com a seguinte matriz:50≥⍵
1 se 50 for maior que ou igual ao argumento, caso contrário 0s←
loja em s (para shopping s )1+
incremento⍵⍴
ciclicamente r eshape ao argumento de comprimento100↑
pegue a primeira centena disso, preenchendo com zeros10 10⍴
r eshape para dez linhas e dez colunas⊢
rendimento que (separas
de10 10
)⍉⍣s
transpor se pequeno⊖
virar de cabeça para baixofonte
{⊖⍉⍣c⊢10 10⍴(⍵/'-|'⊃⍨c←⍵≤50),100/'#'}
99/'#'
⍴
J ,
39, 3837 bytesComo funciona:
Experimente online!
fonte
{.
com um argumento sobre os limites é um bom truque.(]|.@|:_10{&'#|-'\100{.1+$)>&50
_100{.
que coloca os preenchimentos no começo, mas então eu precisava reverter cada linha, então desisti.JavaScript (ES6), 84 bytes
Recebe a entrada como um número inteiro em [0 ... 100] .
Casos de teste
Mostrar snippet de código
Formatado e comentado
fonte
Python 2 ,
121117116 bytesExperimente online!
fonte
[i*10:-~i*10]
pode ser[i*10:][:10]
.Gelatina , 23 bytes
Experimente online!
Altere o número anterior
Ç
no rodapé para alterar a entrada. Funciona como um link monádico em um programa sem argumentos de linha de comando, o que é permitido .fonte
ȷ2
->³
)Prolog SWI, 249 bytes
A solução é bem direta. O procedimento
a
cria linhas,l
grava caracteres nas colunas em uma linha er
decide qual caractere deve ser impresso.fonte
G<51
deve funcionar em vez deG<=50
.MATL , 26 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Python 2 , 85 bytes
Experimente online!
Nos dois casos, cada linha é preenchida à direita pelo
#
comprimento 10, o que nos permite compartilhar esse código entre os dois casos. O número 10 foi usado com frequência suficiente para que o aliasT=10
salvasse um número decente de bytes.fonte
51
e depois, ele perde uma linha.Ruby ,
9282 bytesExperimente online!
Como funciona:
Cada célula na grade tem um número progressivo começando no canto inferior esquerdo e prosseguindo na horizontal ou na vertical, dependendo do valor de n:
Se
n>50
o número for100-y*10+x
diferente, éx*10+9-y
fonte
Carvão , 25 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Casca , 24 bytes
Experimente online!
Explicação
fonte
SOGL V0.12 , 21 bytes
Experimente aqui!
Explicação:
fonte
dc ,
210197 bytesExperimente online!
fonte
APL (Dyalog Classic) , 33 bytes
Experimente online!
com base na resposta de Adám
⎕d
é a string'0123456789'
∘.,
produto cartesiano⍨
consigo mesmo⍎¨
avalie cada um - obtenha uma matriz 10x10 de 0..99⍵>
matriz booleana para onde o argumento⍵
é maior⊢
atua como separador(⍉+⍨)⍣(⍵≤50)
se ⍵≤50 dobrar a matriz (+
com ela mesma) e transpor (⍉
)⊖
reverso vertical'#-|'[ ]
indexe a string'#-|'
com cada elemento da matrizfonte
q , 51 bytes
fonte
Retina ,
7262 bytesExperimente online! O link inclui casos de teste. Editar: salvou 10 bytes com alguma ajuda de @MartinEnder. Explicação:
Repita
|
o número especificado de vezesMas se a entrada tiver pelo menos 51, altere-a para
-
s.Anexar 100
#
s.Divida em 10 grupos de 10, descartando tudo o que resta.
Se a entrada tiver pelo menos 51, transponha o resultado.
Classifique o resultado.
Solução alternativa, também 62 bytes:
A classificação antes da transposição permite uma economia de bytes na condição da transposição, mas custa um byte para obter o resultado na ordem correta.
fonte
#
no primeiroO
estágio, porque$.%`
será no máximo9
. Você também pode economizar algum byte evitando o loop ao custo de outro estágio de classificação no final, como este: tio.run/##K0otycxL/… Provavelmente, existe uma maneira ainda mais curta de reorganizar o resultado desseM
estágio para a forma final .O
palco simples para logo após oM
palco, para que você possa continuar usando um lookahead em vez de um lookbehind.Python 2 ,
106103 bytesExperimente online!
fonte
PHP, 119 + 1 bytes
Execute como pipe
-nR
ou experimente online .fonte
Gelatina , 24 bytes
Experimente online!
Como funciona
Eu uso muitos sobrescritos ...
fonte
R , 102 bytes
Experimente online!
Lê
n
de stdin e imprime o jardim em stdout.Explicação:
fonte