... o hay?
Su desafío es analizar mi factura de almuerzo, que contiene el precio base, propinas, descuentos, cupones y extras, y averiguar si mi almuerzo fue de $ 0 o menos . Si esta es la entrada:
12.34
15 tip
25 discount
1.5 extra
2 coupon
Entonces la salida podría ser false
. Así es como funciona:
12.34
Es el precio base.
15 tip
significa agregar 15% al total.
25 discount
significa restar el 25% del total.
1.5 extra
significa sumar 1.5 al total.
2 coupon
significa restar 2 del total.
Puede haber cualquier cantidad de propinas, descuentos, cupones y extras, pero siempre habrá un precio base.
Luego lo hacemos (12.34 * 1.15) * 0.75 + 1.5 - 2
para una salida de 10.14. 10.14 es mayor que 0, por lo que mostramos falso. Mi almuerzo no fue gratis.
Reglas
número tip
significa agregar número por ciento al total.
número discount
significa restar número por ciento del total
número extra
significa agregar número al total
número coupon
significa restar número del total
Otro ejemplo:
10
20 tip
20 discount
2 coupon
2 coupon
1 coupon
50 discount
2.55 coupon
El precio es -0.24
((10 * 1.20 * 0.80 - 2 - 2 - 1) * 0.5 - 2.55), por lo que la salida es cierta (mi almuerzo fue gratis).
Notas:
- La precisión debe ser al menos 2 decimales.
- Puede tomar la entrada como una cadena con líneas nuevas (línea posterior opcional) u otro carácter de separación, o una matriz / lista de las entradas.
15 tip
como0.15 tip
Respuestas:
05AB1E ,
373334 bytesPruébalo en línea!
Explicación
Toma prestado el
mod 7
truco de la respuesta de Jonathan Allan Jellyfuente
1
cuando el valor es <1.JavaScript (ES6),
8885 bytesToma la entrada como una matriz de cadenas. Devoluciones
0
no gratis o1
gratis.Cómo funciona
Cada línea se divide en el espacio para obtener
a
= cantidad,b
= tipo de operación. Si no hay ninguna operación (que es el caso en la primera línea),b
se establece de forma predeterminada en"e"
"extra".Para agregar la cantidad correcta al total
t
, usamos un objeto cuyas claves son la primera letra de la operación:Nota : Si la factura constara de un solo elemento,
map()
devolvería una matriz de un solo elemento que se convertiría en un número entero cuando se aplicara el|
operador, haciendo que la prueba final fallara. Pero el OP confirmó que esto no puede suceder. (Las matrices de 2 o más elementos se convierten a 0.)Manifestación
Mostrar fragmento de código
fuente
CJam ,
4542 bytesToma la entrada como un conjunto de cadenas y toma la propina y el descuento como decimales.
Pruébalo en línea!
Explicación
El código que se evalúa según las primeras letras:
fuente
Jalea ,
4239 bytesToma una lista de cadenas con números con formato decimal
(los ceros iniciales serán trabajará, pero tienen el efecto secundario de la impresión de ceros a la salida estándar antes del resultado final).
Pruébalo en línea! - no gratuito; o gratis .
¿Cómo?
fuente
GNU sed + dc,
117111107 bytesUsando el
-z
indicador de intérprete (incluido en la puntuación como 1 byte):Explicación
Dado que la entrada ya está muy cerca de la notación polaca inversa, es una simple cuestión de transformar
extra
ycoupon
de+
y-
, y no mucho más que cambiar los porcentajes en multiplicadores. Luego invoquedc
y produzca un resultado legible dependiendo de si-
se encuentra (tenemos que negar el resultado, entonces un-
implica "no libre", de lo contrario 0 sería un caso especial que necesitaría su propio manejo).Ejemplo
El segundo caso de la pregunta es:
Eso se convierte en este
dc
programa:Resultando en:
fuente
JavaScript,
173169145 bytesTodavía debe haber mucho golf para hacer
Pruébalo en línea! (145 bytes actualmente)
Pruébalo:
Gracias a programmer5000 por todos sus consejos de golf.
fuente
{w=i.split`<nl>`
donde <nl> es una nueva línea literalf=
pieza, está permitido por las reglas y puede reemplazar$.split(' ')
con$.split` `
.JavaScript (ES6),
97107Ingrese como una cadena multilínea con una nueva línea final.
La expresión regular divide la parte de texto numérico y opcional para cada línea en d y b .
Los cálculos deberían ser más o menos obviuos. Solo una nota:
-
-=
para evitar problemas al mezclar números con cadenas- la suma se niega para guardar 1 byte, por lo que la última comprobación es en
>= 0
lugar de<= 0
PD todavía mucho más que @ Arnauld's. Ratas
Prueba
fuente
C #
324219 bytesNo es bonito, y probablemente no sea la mejor manera, pero aquí está. Requiere que la entrada se pase como una matriz de cadenas, y los consejos / descuentos se pasen como flotantes (en
0.15 tip
lugar de15 tip
) ya que esto se ha aclarado como aceptable en los comentarios de la especificación.Explicacion:
Tiene que haber una mejor manera de hacer esto, pero esto funciona al menos
fuente
100
en lat
sucursal.float.Parse(s.Split(' ')[0])
en algo para reducir la duplicación. Eso ahorrará unos 80 caracteres.PowerShell ,
218156143 bytesPruébalo en línea!
EDITAR bytes guardados dividiendo la variable canalizada de antemano
EDITAR 2 Almacenado la segunda parte de la cadena para poder hacer mejores llamadas comodín
fuente
Python 133 bytes
Similar a la versión JavaScript ES6. Pero se requiere conversión de tipo para
float
valores en Python.Explicación:
Extraiga el primer valor y conviértalo en flotante.
Para cada otra línea en la factura:
float
dict
para seleccionar la operación correcta de acuerdo con la primera letraUso:
fuente
Java 227 bytes
Ha pasado un tiempo y todavía no puedo ver la respuesta de Java, así que aquí está mi respuesta de C # portada a Java, a un costo de 8 bytes
Para una explicación y tal, vea mi respuesta de C #
Al igual que esa respuesta, esta respuesta espera que la propina y el descuento se pasen como flotantes (
0.15
no15
)fuente
var
tipo genérico de C # y lambdas (sé que Java los tiene, pero C # es más golfista)Jq 1.5 ,
129119114112 bytesExpandido
Pruébalo en línea!
fuente