Aquí ha habido algunos problemas de cálculo de tasas impositivas que dependen de tasas definidas (específicamente tasas federales de EE. UU.), Pero ninguna que lo haya hecho para listas arbitrarias.
Su tarea es crear un programa o función que tome una lista arbitraria de tramos impositivos marginales y calcule la cantidad efectiva de impuestos pagados sobre una cantidad dada de ingresos imponibles.
Su programa tomará como entrada:
N
pares de números en el formulario(amt, rate)
, cada uno representando un tramo impositivo.amt
es la cantidad de renta imponible por encima de la cual comienza a aplicarse la tasa impositiva. Estas cantidades serán todas enteras y aparecerán en orden creciente.rate
es la tasa impositiva, expresada como un porcentaje decimal de 0 a 100 inclusive.
El importe de la renta imponible, como un entero no negativo.
Si no se especifica una tasa para $ 0, se supone que la tasa es 0%.
Alternativamente, su programa también puede tomar como entrada dos listas (amt1, amt2, ...)
y (rate1, rate2, ...)
, que contienen las cantidades y tasas en el mismo orden.
Su programa entonces la salida del impuesto a pagar, ya sea con dos cifras decimales, redondeada o abajo a la unidad monetaria entera más cercana.
Un ejemplo de entrada (los tramos fiscales canadienses más recientes, de 2016, con el crédito fiscal personal básico aplicado y nada más):
11474 15
45282 20.5
90563 26
140388 29
200000 33
393216
Y su salida correspondiente:
108357.07 or 108357
El programa más corto en cualquier idioma para hacer esto gana.
(amt, rate)
, pero no cambia el problema fundamentalmente para aceptar la otra lista, por lo que lo modificaré para que pueda.Respuestas:
05AB1E,
3524 bytesExplicación
Pruébalo en línea
fuente
Haskell,
6766 bytesGracias Damien por -1 byte.
Esta solución tiene la forma de una función infija
?
, de tipo(Integral b, RealFrac r) => [(r, r)] -> r -> b
. La función auxiliar#
, realiza los cálculos necesarios mientras?
sirve para manejar las especificaciones IO.fuente
((m,p):r)#i|v<-min i m=p/100*(i-v)+r#v
ahorra 1 byteMathematica
8582 bytesDerivado del código de Josh O'Brien en R.
Uso
108357.
fuente
Matlab, 79 bytes
Asumiendo que podemos tomar
amt
yrate
como vectores de columna separados:Si no podemos (entonces
a
es una matriz de dos columnas deamt
yrate
) son 87 bytes.Explicación:
fuente
JavaScript (ES6), 60 bytes
a
es una matriz de matrices de banda y velocidad, que sería[[11474, 15], [45282, 20.5], [90563, 26], [140388, 29], [200000, 33]]
para el ejemplo dado, yn
es el ingreso (393216
).fuente
Swift, 61 bytes
Sin golf, con casos de prueba:
fuente