Hace varios años, Hot Wheels creó un juego flash simple llamado "Formula Fuelers Racers" *. Para jugar, selecciona tres ingredientes de una nevera para poner en tu automóvil, que luego se corre contra el automóvil generado aleatoriamente de la computadora. Resulta que la mecánica de este juego es bastante simple. En primer lugar, el "tiempo" de carrera real de su automóvil se genera aleatoriamente y no tiene relación con si gana o no la carrera. En segundo lugar, el ganador de la carrera está determinado por un puntaje que se calcula a partir de los ingredientes seleccionados (se permiten ingredientes duplicados, y el orden es importante). Cada ingrediente tiene un "valor" asociado y una "operación" asociada como se muestra en la siguiente tabla:
# ingredient val op
1 Hot Salsa 2 +
2 Root Beer 1 +
3 Milk 1 +
4 Pickle Juice 2 +
5 Mystery Lunch -3 *
6 BBQ Sauce 2 +
7 Egg 1 +
8 Ketchup 2 +
9 Mustard -1 *
10 Melon 1 +
11 Chocolate Milk 1 +
12 Mayonnaise -2 *
13 Baby Food 0 +
14 Pepper 1 +
15 Salt 2 +
16 Syrup -1 *
17 Salad Dressing 2 +
18 Orange Juice 1 +
19 Soy Sauce 2 +
Por conveniencia, este desafío se referirá a los ingredientes por su número y no por su nombre. Estos son los pasos para calcular una puntuación:
- Primero, inicialice la puntuación con el valor del primer ingrediente.
- Luego, use la operación del segundo ingrediente para combinar el puntaje actual y el valor del segundo ingrediente para obtener un puntaje actualizado.
- Finalmente, use la operación del tercer ingrediente para combinar el puntaje actual y el valor del tercer ingrediente para obtener el puntaje final.
Los puntajes más altos son mejores y siempre superan los puntajes más bajos.
Por ejemplo, los ingredientes 1 2 3
tienen una puntuación de (2+1)+1 = 4
. Los ingredientes 7 5 6
tienen una puntuación de (1*-3)+2 = -1
. Por lo tanto, 1 2 3
late 7 5 6
.
Reto
En este desafío, deberá escribir un programa que tome una lista ordenada de 3 enteros y genere la puntuación correspondiente.
Entrada
Su programa puede aceptar una lista de tres enteros en el formato más conveniente. Se le permite usar la indexación 1 para los nombres de ingredientes (como arriba) o la indexación 0 (restar 1 de cada índice arriba).
Ouput
Su programa debe generar un solo entero que indique la puntuación.
Casos de prueba
4 5 5 => 18 // max score
5 5 5 => -27 // min score
13 13 13 => 0
1 2 3 => 4
7 5 6 => -1
16 2 19 => 2
19 7 12 => -6
* Esta página está bastante desactualizada y no funciona en algunos navegadores, pero no necesitas jugar el juego para este desafío.
fuente
Respuestas:
Jalea , 24 bytes
Toma una lista de ingredientes indexados a 0.
Pruébalo en línea! o ver un conjunto de pruebas
¿Cómo?
Utiliza una forma ligeramente enrevesada de comprimir los valores como un número base 6 y el hecho de que las entradas multiplicativas son las negativas. En lugar de simplemente desplazarse hacia arriba por 3 para obtener los dígitos de base 6, se utilizan los valores complementados incrementados; esto ahorra bytes al permitir que el
Ị
átomo seleccione las entradas negativas antes del paso del complemento mientras también guarda un byte en la base-250 compresión.fuente
zẈ€$ụ¤
se leen como sus índices (1 indexados) en la página de códigos Jelly, que se[123,188,13,37,226,4]
interpretan como un número base-250:123*250**5+188*250**4+13*250**3+37*250**2+226*250**1+4*250**0=120851767994004
(vea la sección literal de cadena del tutorial .)JavaScript (ES6),
8984827873 bytesToma la entrada como una matriz de 3 enteros, usando la indexación 0.
Casos de prueba
Mostrar fragmento de código
Versión anterior, 78 bytes
Toma los 3 enteros en la sintaxis de curry
(a)(b)(c)
, usando la indexación 0.Cómo funciona
Una cosa un poco inusual sobre este código es que solo toma 2 argumentos en la sintaxis de curry 'común'
a => b =>
y finalmente devuelve una función que toma el 3er.Descompostura
Casos de prueba
Mostrar fragmento de código
fuente
Befunge,
7473 bytesPruébalo aquí! Es extraño que mi código solo funcione en este intérprete.
La segunda fila contiene básicamente todos los valores de la tabla. Los valores no numéricos son en realidad valores negativos, ya que aparecen antes de los dígitos en la tabla ASCII. Hay un poco de lógica allí que determina si el número es negativo o no, y si lo es, este número se multiplica por el resultado.
El lado derecho de la tercera fila inicializa el primer número. Si no tuviera que hacer eso, podría ahorrar muchos bytes.
fuente
PHP, 128 bytes
PHP, 138 bytes
Versión en línea
Expandido
fuente
Python 2 ,
123110107 bytesPruébalo en línea!
-3 bytes gracias a @mathjunkie
fuente
5445054524413452545
luego restar 3 puede ahorrarle toneladas de bytes.n=[n+i,n*i][i<0]
dentro del bucle le ahorra 3 bytes05AB1E , 29 bytes
Pruébalo en línea!
Esto realmente funciona para tantas o tan pocas entradas como desee, por lo que puede tener automóviles con 4 o más rasgos o automóviles con solo 2. Esto no fue intencional, sino cómo terminó.
fuente
CJam ,
4338 bytesPuede haber una manera de comprimir aún más la lista ...
Utiliza indexación basada en 0.
Pruébalo en línea!
Explicación
Este programa hace uso del hecho de que un valor es multiplicativo en lugar de aditivo si y solo si es negativo.
fuente
+ *
truco!Lua,
140131 bytesfuente
JavaScript,
8572 bytesToma entrada en formato
[a,b,c]
-13 bytes gracias a ETHproductions
fuente
x=>(b="...",b<0?"*":"+")+b
para evitar elreturn
, creo. (Además, no necesita[... ]
, la indexación funciona en cadenas)a=a=>eval(a.map(x=>(b="5445054524413452545"[x]-3,b<0?"*":"+")+b)).join``)
funciona para usted?)
después+b
, creoR
125123 bytesFunción anónima que toma tres enteros como entrada. Define una lista de valores y operaciones, y luego solo evalúa los llamados por la entrada, es decir
o3(o2(v1,v2),v3)
. ¡Definitivamente hay una forma más golfista de hacer esto!Actualización: después de volver a trabajar, tengo una alternativa, también 123 bytes . Una vez más, una función anónima, pero toma la entrada como un solo vector de tres valores. Utiliza el mismo enfoque, define una lista de valores y operaciones y la evalúa.
fuente
Haskell,
186116112108 bytesLa función principal es
k
. Nuevo en Code Golf, así que estoy seguro de que hay algunos bytes que podría eliminar con un uso inteligente de$
operador frente a paréntesis. Probablemente actualizaré la respuesta a medida que continúe encontrando mejoras.Esencialmente, el programa puede desglosarse así:
*
donde los valores positivos son siempre+
)v
asignadas a enteros de entrada y obtiene las operaciones y valores apropiados de cada uno y devuelve la salida adecuada.ACTUALIZAR
¡Un agradecimiento especial por señalar el truco fromEnum! Eso funcionó muy bien. También me perdí la parte de las reglas que establecía que una solución aceptable podría ser una función que toma una lista de enteros. Eso ahorró una tremenda cantidad de trabajo.
ACTUALIZACIÓN 2
Según otras sugerencias, redujo un puñado de bytes al reordenar las operaciones, creando un protector de else que siempre se evalúa como Verdadero, y un patrón que coincide en W que el patrón coincide en una Lista de 3 elementos. Gracias por las sugerencias!
ACTUALIZACIÓN 3
Otro agradecimiento a Laikoni por señalar más reglas de golf de código que no conocía. ¡Mapear v a mi entrada para crear una lista de funciones parcialmente aplicadas fue una idea fenomenal y me ahorró 4 bytes adicionales!
fuente
[Int] -> Int
lugar de leer desde stdin y escribir en stdout. Hacerlo está permitido de manera predeterminada, pero en este caso incluso se menciona explícitamente en el desafío que es aceptable contar una lista de enteros como entrada.fromEnum
lugar dedigitToInt
es probable que sea más corto porque le permite descartar la importación.v=(map((-51+).fromEnum)"95 ... 5"!!)
Guarda dos paréntesis.o x|x<0=(*)|0<1=(+)
guarda un byte en el segundo guardia.w
queda un espacio extra. Además, como solo necesita manejar listas de longitud 3, puede usarlasw[x,y,z]=
como coincidencia de patrones.Haskell,
9287 bytesPruébalo en línea!
Basado en la respuesta de @ maple_shaft, lo factoricé un poco.
¡Gracias a @Laikoni por 5 bytes!
fuente
f=
porque las funciones anónimas están permitidas como envío. Solo están obligados a hacer que el ejemplo de tio funcione.C,
171161 bytesfuente
Código de máquina 8086, 62 bytes
Los últimos tres bytes contienen la entrada (indexada a cero). Oye, me dijiste que podía usar el formato de entrada más conveniente. En este caso, eso es hardcoding!
La salida es el código de error devuelto al shell.
Cómo funciona:
fuente