Debería escribir un programa o función que reciba el volumen de un tazón y el volumen del agua en él como entrada y salidas o devuelva una representación ASCII de un tazón con agua con los volúmenes deseados.
Un cuenco tiene la siguiente estructura:
\ /
\___/
El cuenco tiene al menos un _
personaje. El recuento de \
'sy /
' s también es positivo y es igual debido a la simetría.
El volumen del recipiente es el número total de _
y space
caracteres entre los \
's y /
' s más uno por cada par de \
y /
. Esto significa que el tazón anterior tiene el volumen de 10
:
\ / => xxxxx x (the last one is for the \/ pair)
\___/ xxx x (the last one is for the \/ pair)
Tenga en cuenta que dos tazones diferentes podrían tener el mismo volumen. Por ejemplo, los dos cuencos siguientes tienen un volumen de 18:
\ /
\ / \ /
\___/ \_______/
Podemos verter un poco de agua en el tazón. El agua se representa como una fila de ~
caracteres en lugar de espacios dentro del recipiente. La fila inferior no tiene espacios, por lo que no puede contener los ~
's. Esto significa que nuestro ejemplo se puede llenar con agua de una sola manera:
\~~~~~/
\___/
Otros cuencos se pueden llenar de múltiples maneras:
\~~~~~/ \ /
\ / \~~~/
\_/ \_/
El volumen del agua en un recipiente es el volumen de las filas del recipiente debajo de los ~
caracteres. Los ejemplos anteriores tienen volúmenes de agua de 4, 6 and 2
respectivamente.
Entrada
- Dos enteros positivos, el volumen del cuenco y el volumen del agua.
- Puedes elegir el orden de los dos números.
- Los dos enteros se pueden ingresar en cualquier formato de lista común (lista, tupla, matriz, etc.) o como dos enteros separados.
- Se garantiza al menos una configuración válida de cuenco-agua para los valores de entrada.
Salida
- La representación ASCII de un recipiente con agua donde el volumen del recipiente y el agua coinciden con la entrada.
- Si elige devolver el resultado en lugar de imprimirlo, debe devolverse como una sola cadena (o la alternativa más cercana a su idioma).
- Se permite cualquier espacio en blanco al final.
- No se permiten espacios en blanco iniciales innecesarios.
- Si hay múltiples configuraciones correctas, usted es libre de elegir cuál generar, pero solo puede generar una de ellas.
Ejemplos
Cada par entero de entrada es seguido por una o más salidas posibles.
6 2
\~~~/
\_/
10 4
\~~~~~/
\___/
24 8
\ /
\~~~~~~/
\ /
\__/
42 12 //either of the two output is correct
\ /
\ /
\~~~~~~~/
\ /
\ /
\_/
\ /
\~~~~~~~~~~~~~/
\___________/
90 68
\~~~~~~~~~~~~~~~~~~~~~/
\ /
\ /
\ /
\_____________/
102 42
\ /
\ /
\~~~~~~~~~~~~~~~~~/
\ /
\ /
\___________/
Este es el código de golf, por lo que gana la entrada más corta.
fuente
At least one valid bowl-water configuration is guaranteed for the input values.
- OPJavascript ES5, 364 bytes
Esto es lo que podría pensar rápidamente durante mi almuerzo, ¡ayúdame a jugar golf mientras termina mi turno!
Fuente
Golfizado:
(pasó por el minificador para comprimir, terminó el turno de almuerzo)
fuente
Perl,
227172 bytesEjecutar con la opción -n:
Gracias a Dennis por ayudarme a jugar golf.
Calcula el volumen del bol como altura * (ancho + alto), donde ancho es el número de
_
caracteres y alto es el número de\
caracteres.Cada combinación de altura y ancho se prueba en un par de bucles anidados hasta que se encuentra el volumen correcto del recipiente, luego se realiza otro bucle sobre los posibles niveles de altura del agua para determinar si es posible un volumen de agua correcto con ese ancho.
Es posible eliminar el tercer bucle simplemente calculando el nivel del agua usando la fórmula cuadrática con a como 1, b como el ancho yc como el negativo del volumen de agua deseado, y verificando si es un número entero, pero eso requiere más bytes que solo hacer un bucle. Aquí está de todos modos (183 bytes):
fuente
Python 2, 162 bytes
Un poco desordenado, pero aquí está mi primer intento. Intenta todos los números posibles de filas
r
, configurando el número de guiones bajos básicos comoa = V/r-r
. Luego prueba todas las alturas posibles del nivel del aguak
y comprueba si el recipiente es válido, imprimiéndolo si es así.fuente
Python 2.7,
284270260 bytesBásicamente, esto calcula la altura y el ancho del balde y el agua y los imprime.
Intenté eliminar la parte fea del bucle mientras comenzaba (donde calculo la altura del balde y la altura desde donde se debe extraer el agua. En este momento, todas las líneas del código, excepto la última, son para calcular el ancho y altura). Todavía lo intento: P
Probándolo para diferentes casos -
fuente