(Espero que todavía sea Acción de Gracias para ti)
Tienes un pavo para tu cena de acción de gracias, pero no sabes cómo distribuirlo de manera uniforme. El problema es que algunas personas comen más que otras, por lo que debe encontrar una solución
Entrada
Habrá dos entradas. El primero será un arte ascii de varias personas.
o
o \|/
\|/ |
| |
/ \ / \
especificaciones de arte ascii
Cada persona ocupa un ancho de 3 columnas. Cada persona está separada por una sola columna de espacios. La parte superior de cada persona es un o
. Debajo de o
, desplazado por 1
y -1
en la x, están \
y /
, respectivamente. Desde la o
segunda hasta la última fila en la entrada |
, la cantidad de estos por persona es su "altura". Los únicos datos que necesitará extraer de cada persona es su "altura".
Siempre habrá al menos una persona. Cada persona siempre tiene al menos 2 alturas. La altura máxima que debe manejar su programa es al menos una altura de 64.
Si desea que la entrada se rellene con espacios para formar un rectángulo, especifique esto en su respuesta.
La segunda entrada es el pavo. El pavo no es realmente un pavo, sino más bien las NxM
dimensiones de un pavo. Si la segunda entrada es 3x2
, entonces el pavo tiene dimensiones de 3 * 2, con un área total de 6.
Salida
El resultado puede ser una lista o la alternativa más cercana a su idioma (por ejemplo, Array). También puede generar una cadena, con los valores separados por espacios.
Los valores para cada persona deben aparecer en el orden en que fueron ingresados.
Desafío
Su objetivo es dividir el área del pavo entre la gente.
Un ejemplo de escenario:
Supongamos que son dos personas, con alturas de 3
y 6
, respectivamente. Si hay un pavo de 5x3
. El área total del pavo que deberá distribuirse es 15
.
Ahora, ¿cómo lo distribuirías entre todos? Así es cómo:
the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
sum_of_all_heights
Esto significa que, para la primera persona con una altura de 3
, obtendrán 3/9*15
pavo, o 5
, la segunda persona con una altura de 6
ellos obtendrán 6/9*15
o 10
pavo.
Salida
La salida debe consistir únicamente en dígitos y .
, a menos que elija optar por la bonificación. En ese caso, solo puede consistir en dígitos, espacios ( ) y una barra inclinada (
/
).
Ejemplo completo
Entrada:
6x5
o
|
o \|/
\|/ |
| |
| |
/ \ / \
Salida:
11.25 18.75
Bonos
-20% de bonificación: genera una fracción (debe simplificarse), no importa si es una fracción mixta o impropia.
Puntuación
Este es el código de golf, ¡el código más corto en bytes gana!
Respuestas:
Pyth, 23 bytes
Esto no funciona en la versión en línea, porque se usa
eval
para determinar el tamaño del pavo.Explicación:
fuente
LabVIEW, 67 Bytes
Estoy contando después de lo que propuse en la meta publicación, por lo que no está solucionado, pero sí, aquí va.
Se espera una entrada rellenada con espacios.
Estoy contando cabezas y obtengo el tamaño de las personas de la línea donde están las cabezas.
fuente
Japt ,
4946 bytesJapt es una versión abreviada de Ja vaScri pt . Interprete
Salidas como una matriz. (Tenga en cuenta que deberá ajustar cada una de las dos entradas entre comillas).
Cómo funciona
fuente
MATLAB 109 * 80% = 87.2 bytes
Entonces, esta es una función MATLAB que toma dos entradas, la primera es una cadena para el tamaño del pavo (por ejemplo
'8x4'
, y la segunda es la cadena que contiene las personas. Devuelve una cadena que contiene fracciones impropias para cada persona.Esto podría haber sido mucho más pequeño, pero las nuevas líneas se complicaron. MATLAB podría convertir fácilmente una cadena
;
como separador para cada línea, pero tratar de usar una nueva línea resultó difícil, con un costo de 25 caracteres:Obtener el tamaño de las personas es bastante fácil:
Esto toma cada cuarta columna a partir de la segunda (que serán todas las columnas donde estarán los cuerpos de las personas), luego la convierte en una matriz que contiene 1 donde hay bits corporales y 0 donde no los hay. Finalmente, se resume en columnas, lo que da como resultado la matriz
a
que es una matriz 1D que contiene el tamaño de cada persona.A continuación, extraemos el tamaño del pavo de la cadena de entrada que está en la forma
%dx%d
, es decir, un número, luego 'x' y luego otro número. La matriz resultante de dos números se multiplica para obtener el área de Turquía.Esto se multiplica por la altura de cada una de las personas, y también se divide por la altura total de todas las personas para obtener la porción de pavo para cada persona como un número decimal.
El último paso para calificar la bonificación: este bit hace que el código tenga 6 caracteres más, pero la bonificación elimina ~ 22, por lo que vale la pena.
rats()
es una buena función que convierte un número decimal en una fracción impropia simplificada (con precisión de 13 dp). Al alimentarlo con una matriz de números decimales (es decir, la cantidad para cada persona) devolverá una sola cadena que contiene fracciones para cada persona a su vez separadas por espacios.Por supuesto, la salida de
rats()
agrega más de un espacio, pero la pregunta no dice que no puede, solo dice que la cadena debe contener solo dígitos '' y '/'.Este es el resultado del ejemplo (comillas agregadas por mí para evitar que se eliminen espacios, no en el resultado real):
Ejemplo de uso:
salida:
También funciona (aunque con advertencias) en el intérprete de octava en línea . Puedes probarlo aquí . El enlace es a un espacio de trabajo con la
f
función definida en un archivo ya. Por lo tanto, debería poder ingresar el ejemplo de uso anterior en el indicador.fuente
Pyth - 25 bytes
Definitivamente puede jugar un par de bytes. Enfoque bastante sencillo.
Pruébelo en línea aquí .
fuente
Haskell 119 bytes
Ejemplo de uso:
"6x5" # " o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\\n"
->[11.25,18.75]
.fuente
JavaScript (ES6), 131 bytes
Devuelve una matriz de porciones.
Explicación
Prueba
Mostrar fragmento de código
fuente
Python 99 bytes
Entrada:
' o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\','6*5'
Salida:
['11.25', '18.75']
fuente