Aquí hay una calabaza ASCII tallada en una Jack-o-Lantern. ¿No es lindo?
((^v^))
Aquí hay un fantasma ASCII. ¡Mira qué espeluznante es!
\{O.O}/
Obviamente, las calabazas tienen que estar en el suelo, con un espacio entre ellas para que no se pudran.
Sin embargo, a los fantasmas les gusta estar encima de las calabazas, por lo que son aún más espeluznantes . Sin embargo, tienen que pararse sobre dos calabazas, de lo contrario su peso fantasmal aplastará la calabaza debajo de ellos. Pero, debido a cómo funciona su magia fantasmal , varios fantasmas pueden apilar y compartir calabazas, siempre que los fantasmas se dividan de manera uniforme en las calabazas inferiores o en los fantasmas inferiores. En otras palabras, formando una forma como una pirámide humana . Tenga en cuenta que los fantasmas no pueden acumularse en fantasmas a menos que haya una calabaza debajo (así es como funciona la magia).
Dados dos enteros no negativos g
y p
, representando el número de g
hosts y p
umpkins, genera la formación más compacta más a la izquierda posible, siguiendo las reglas de apilamiento de la pirámide anteriores. Las sobras de calabazas y fantasmas (es decir, aquellos que no forman la pirámide) van al suelo a la derecha.
Para aclarar, estas formaciones están bien (nueva línea en blanco separada) y sirven como ejemplo 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^))
Estas formaciones no están bien
\{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
Dos enteros no negativos en cualquier formato conveniente . Al menos uno de los números será distinto de cero. Puede tomar las entradas en cualquier orden (es decir, en los ejemplos que tuve primero con calabazas); especifique cómo toma las entradas en su respuesta.
Salida
Una representación de arte ASCII de los fantasmas y calabazas, siguiendo las reglas anteriores. Las nuevas líneas iniciales / finales u otros espacios en blanco son opcionales, siempre que los fantasmas y las calabazas se alineen adecuadamente.
Reglas
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Respuestas:
JavaScript (ES7),
166164159 bytesGuardado 5 bytes gracias a Neil
Formateado y comentado
Matemática subyacente
La parte difícil es encontrar el ancho óptimo
G
de la pirámide fantasma.El número de fantasmas
g
en tal pirámide viene dado por:Recíprocamente, el ancho de una pirámide que contiene
g
fantasmas es la raíz real de la ecuación cuadrática resultante:Lo que conduce a la siguiente raíz real (también conocida como raíz triangular ):
Sin embargo, el ancho de la pirámide también está limitado por la cantidad de calabazas: no podemos tener más de
p-1
fantasmas sobrep
calabazas. De ahí la fórmula final utilizada en el código:Versión ES6,
173171166 bytesCasos de prueba (ES6)
Mostrar fragmento de código
fuente
j=(g+g)**.5+.5|0
debería funcionar.Perl, 246 bytes (las líneas nuevas no son parte del código y se proporcionan únicamente para facilitar la lectura)
Acepta dos números: primero las calabazas, seguidas de los fantasmas. Entrada de muestra:
Salida de muestra:
fuente
0p 4g
caso de prueba tiene todos los fantasmas en una línea, en lugar de apilados.