Você conhece aquelas prateleiras empilháveis que são basicamente caixas de madeira que podem ser empilhadas juntas? Vamos simular a construção de algumas estantes de livros com arte ASCII.
Todos os nossos livros são de tamanho convenientemente uniforme e têm a seguinte aparência:
|X|
|X|
|X|
As estantes de livros são caixas individuais, sempre com três caracteres de altura por dentro (o suficiente para acomodar um livro em pé), compostas por |
caracteres à esquerda e à direita, -
caracteres para a parte superior e inferior e suficientemente largas para acomodar X
livros (onde X
é uma entrada inteiro). Por exemplo, aqui está uma estante de tamanho 3
:
|---------|
| |
| |
| |
|---------|
porque você pode colocar 3
livros nela assim
|---------|
||X||X||X||
||X||X||X||
||X||X||X||
|---------|
A entrada será dois números inteiros estritamente positivos X
e Y
, onde X
está a largura das prateleiras que temos (medidas em livros) e Y
é quantos livros temos para empilhar. Se temos mais livros do que cabem em uma única prateleira, precisamos adicionar mais prateleiras ao topo. Por exemplo, aqui está a entrada 4 wide / 6 books
:
|------------|
||X||X| |
||X||X| |
||X||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Se Y % X > 0
, significando que o número de livros não é um múltiplo inteiro do tamanho da prateleira, os livros restantes devem ficar na posição mais à esquerda (como no caso 4 6
acima) e a parte restante dessa prateleira preenchida com espaços.
Entrada
- Dois números inteiros estritamente positivos em qualquer formato conveniente , cada um
>0
. - Você pode receber a entrada em qualquer ordem (por exemplo, tamanho das prateleiras primeiro, número de livros ou vice-versa). Indique no seu envio a ordem de entrada.
- Você pode assumir com segurança que nenhuma das entradas será maior que o
[int]
tamanho padrão do seu idioma (ou equivalente).
Saída
A representação artística ASCII resultante dos livros e estantes.
Regras
- Novas linhas à esquerda ou à direita ou espaços em branco são opcionais, desde que os próprios caracteres estejam alinhados corretamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Exemplos adicionais
6 wide / 2 books
|------------------|
||X||X| |
||X||X| |
||X||X| |
|------------------|
2 wide / 6 books
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
|------|
||X||X||
||X||X||
||X||X||
|------|
4 wide / 9 books
|------------|
||X| |
||X| |
||X| |
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
|------------|
||X||X||X||X||
||X||X||X||X||
||X||X||X||X||
|------------|
Respostas:
JavaScript (ES6),
1009998 bytesPega a largura
w
e o número de livrosb
na sintaxe de curry(w)(b)
.Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
Bash (+ utilitários),
130,108, 106 bytesUm pipeline de shell único e contínuo para renderizar suas estantes de livros.
Changelog:
printf + seq
por um brutoprintf
, -10 bytesGolfe
Experimente Online!
Como funciona
$./shelf 2 3
printf %$2s\\n
- gerar n caracteres em branco, um por livro (mostrado como_
)___
fold -$1
- dobre-os pelo comprimento da prateleirased "s/ /|X|/g;"
- substitua_
porX
, adicione capas de livros:;/.\{$[$1*3]\}/!s/$/ /;t
- teclado direito com espaços (mostrado como_
)h;s/./-/gp;x;p;p;p;x
- triplicar cada linha e adicionar---
antes e depois dela.sed 's/.*/|&|/'|tac
- enrole as linhas| |
, inverta com tacfonte
t
vez dissob
, não precisa do{}
. Você pode pular o arquivos/./-/g
porque eles já são-
. Experimente Online!Python 2,
133113105 bytesTenho certeza de que há uma maneira melhor ...
A entrada é recebida
width, books
-20 bytes graças a @ovs por perceber uma função lambda desnecessária!
-8 bytes graças a @ovs por reduzir a entrada.
fonte
X,Y=input()
é uma maneira mais curta de levar os valores a.X, Y
, certo?'|'
como uma variável.Lote, 261 bytes
Utiliza meu truque na resposta do Lote para Vamos jogar tênis para imprimir facilmente muitos
|
personagens.fonte
Haskell , 100 bytes
x#y
retorna a string para largurax
ey
livros.Experimente online!
A principal função / operador é
#
. Quandox<y
divide os livros emy-x
ex
, depois se repete. Quandox>=y
,w
eb
são os dois tipos de linha, menos os exteriores|
s e a nova linha.O operador auxiliar
s?n
concatenan
cópias da sequências
.fonte
PowerShell ,
149134 bytesExperimente online!
Leva
$w
idth de entrada e OK$b
. Define a string$s
como uma das prateleiras horizontais. Então nós temos duasif
afirmações.O primeiro verifica se temos livros "restantes". Nesse caso, produzimos a prateleira, o (número de livros mais o número de espaços)
*3
e outra prateleira.Em seguida, verificamos se ainda temos livros restantes após a remoção dos demais (
$a
). O mesmo tipo de configuração, exceto que estamos usando o$w
número de livros. Como, neste ponto,$b
é garantido um múltiplo de$w
(porque removemos o restante$a
), não precisamos nos preocupar com arredondamentos.Removida a
[math]::Floor()
chamada, economizando 15 bytesTodas essas seqüências são deixadas no pipeline e implícitas
Write-Output
acontecem na conclusão do programa.fonte
CJam ,
6261 bytesAceita entrada como
width books
Experimente online!
Explicação
fonte
Python 3, 142 bytes
Ainda trabalhando nisso.
b
é para 'número de livros' ew
é para a largura da prateleira.fonte
R=b%w
seja movido para a próxima linha. Além disso, você deve poder remover o espaço em branco ao redor desses três=
para salvar alguns bytes.d+3*p+d if R!=0 else ''
porR and d+3*p+d or''
d+3*p+d
?AHK, 208 bytes
Existem algumas coisas que me atrapalham com o golfe:
%1%
&%2%
) nas funções matemáticas, porque eles esperam entrada de variável ou número e assumirá que o não-escapado1
seja o número um em vez do nome da variávelUma versão mais fácil de ler acima é assim:
Se um
Loop
não usar colchetes{}
, apenas a próxima linha fará parte do loop. Se você definir o valor de uma variável usando em:=
vez de=
, poderá soltar os caracteres de escape do sinal de porcentagem. Tilde n é o caractere de nova linha.fonte
Java 7,
230224222 bytesExplicação:
Código do teste:
Experimente aqui.
Saída:
fonte
.repeat
realmente ajuda realmente neste desafio .PowerShell, 109 bytes
Script de teste com menos golfe:
Saída:
PowerShell, 109 bytes, alternativo
fonte
Python 2 ,
120118 bytesExperimente online!
Têm intenção de ir a este nos últimos dias. Agora que finalmente tenho tempo para fazê-lo, já existe uma resposta mais curta do Python. Oh, bem, apenas postado como uma alternativa.
Entrada tomada como largura, livros
fonte
SOGL , 64 bytes
Explicação: Primeira função:
segunda função:
esta função espera um número (contagem de livros) na pilha e produz os livros das estantes
Um exemplo mais abaixo é e = 3 (largura da estante) eb = 8 (valor do livro)
esta é a linha superior / inferior da estante de livros e sempre fica na primeira parte da pilha (estante meio vazia)
Primeira parte principal
E a última parte
fonte
Java (JDK) , 124 bytes
Experimente online!
Créditos
fonte
PHP> = 7.1, 138 bytes
Versão Online
fonte
Tela , 33 bytes
Experimente aqui!
Explicação (alguns caracteres foram substituídos para parecer mais monoespaços):
fonte
Pip
-n
, 45 bytesAssume a largura e a contagem de livros, respectivamente, como argumentos da linha de comando. Experimente online!
Explicação
Executamos um loop para imprimir as prateleiras uma a uma, de cima para baixo. A cada iteração, atualizamos
b
(o número de livros a serem impressos) subtraindoy
(o número de livros impressos nessa iteração). Quandob
atinge 0, o loop sai.Como isso é um pouco envolvido, aqui está um exemplo da primeira iteração quando
a = 3, b = 8
:que depois imprime como
fonte
Pitão , 56 bytes
Aceita a largura da prateleira, a contagem de livros como argumentos separados nessa ordem. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .
fonte
Quarto (gforth) , 622 bytes (minimizado (remover comentários, recuo, nomes de palavras com 1 caractere) a 303 bytes)
Minha primeira peça com Forth :)
Experimente online!
Saída
fonte