Aqui está uma abóbora ASCII esculpida em uma Jack-o-Lantern. Não é fofo?
((^v^))
Aqui está um fantasma ASCII. Olha como é assustador!
\{O.O}/
Obviamente, as abóboras precisam estar no chão, com um espaço entre elas para não apodrecer.
Os fantasmas, no entanto, gostam de ficar em cima de abóboras, então são ainda mais assustadores . No entanto, eles têm que ficar em duas abóboras, caso contrário, seu peso fantasmagórico esmagará a abóbora por baixo delas. Mas, devido à forma como sua mágica fantasmagórica funciona, vários fantasmas podem empilhar e compartilhar abóboras, desde que os fantasmas sejam divididos igualmente nas abóboras inferiores ou nos fantasmas inferiores. Em outras palavras, formando uma pirâmide humana . Observe que os fantasmas não podem acumular fantasmas a menos que haja uma abóbora por baixo (é assim que a mágica funciona).
Dado dois números inteiros não negativos g
e p
, representando o número de g
hosts e p
umpkins, produz a formação mais à esquerda mais compacta possível, seguindo as regras de empilhamento da pirâmide acima. Sobras de abóboras e fantasmas (ou seja, aqueles que não formam a pirâmide) caem no chão à direita.
Para esclarecimento, essas formações estão OK (nova linha em branco separada) e servem como exemplo de E / S:
0p 1g
\{O.O}/
1p 0g
((^v^))
1p 1g
((^v^)) \{O.O}/
2p 1g
\{O.O}/
((^v^)) ((^v^))
2p 2g
\{O.O}/
((^v^)) ((^v^)) \{O.O}/
3p 1g
\{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 2g
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
3p 3g
\{O.O}/
\{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^))
0p 4g
\{O.O}/ \{O.O}/ \{O.O}/ \{O.O}/
3p 0g
((^v^)) ((^v^)) ((^v^))
7p 6g
\{O.O}/
\{O.O}/ \{O.O}/
\{O.O}/ \{O.O}/ \{O.O}/
((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^)) ((^v^))
Essas formações não estão OK
\{O.O}/
((^v^))
\{O.O}/
((^v^))
((^v^)) ((^v^)) \{O.O}/
\{O.O}/
\{O.O}/
((^v^)) ((^v^))
\{O.O}/
\{O.O}/ ((^v^)) ((^v^))
((^v^))
((^v^)) ((^v^))
\{O.O}/
((^v^)) ((^v^))
Entrada
Dois números inteiros não negativos em qualquer formato conveniente . Pelo menos um dos números será diferente de zero. Você pode pegar as entradas em qualquer ordem (ou seja, nos exemplos que eu tinha abóboras primeiro) - especifique como você recebe as entradas na sua resposta.
Resultado
Uma representação em arte ASCII dos fantasmas e abóboras, seguindo as regras acima. Novas linhas iniciais / finais ou outro espaço em branco são opcionais, desde que os fantasmas e as abóboras se alinhem adequadamente.
Regras
- 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.
- 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.
Respostas:
JavaScript (ES7),
166164159 bytesGuardado 5 bytes graças a Neil
Formatado e comentado
Matemática subjacente
A parte complicada é descobrir a largura ideal
G
da pirâmide fantasma.O número de fantasmas
g
em uma pirâmide é dado por:Reciprocamente, a largura de uma pirâmide contendo
g
fantasmas é a raiz real da equação quadrática resultante:O que leva à seguinte raiz real (também conhecida como raiz triangular ):
No entanto, a largura da pirâmide também é limitada pelo número de abóboras: não podemos ter mais do que
p-1
fantasmas sobre asp
abóboras. Daí a fórmula final usada no código:Versão ES6,
173171166 bytesCasos de teste (ES6)
Mostrar snippet de código
fonte
j=(g+g)**.5+.5|0
deveria funcionar.Perl, 246 bytes (as novas linhas não fazem parte do código e são fornecidas apenas para facilitar a leitura)
Aceita dois números: abóboras primeiro, seguidas por fantasmas. Entrada de amostra:
Saída de amostra:
fonte
0p 4g
caso de teste tem todos os fantasmas em uma linha, em vez de empilhados.