Houve alguns problemas na calculadora de taxas de impostos aqui que dependem de taxas definidas (especificamente as taxas federais dos EUA), mas nenhum que tenha feito isso para listas arbitrárias.
Sua tarefa é criar um programa ou função que faça uma lista arbitrária de faixas de impostos marginais e calcule o valor efetivo do imposto pago em um determinado valor da renda tributável.
Seu programa terá como entrada:
N
pares de números no formulário(amt, rate)
, cada um representando um suporte de imposto.amt
é o valor do lucro tributável acima do qual a taxa de imposto começa a ser aplicada. Esses valores serão todos números inteiros e aparecerão em ordem crescente.rate
é a taxa de imposto, expressa como uma porcentagem decimal de 0 a 100, inclusive.
O valor do lucro tributável, como um número inteiro não negativo.
Se nenhuma taxa for especificada para $ 0, presume-se que a taxa seja 0%.
Como alternativa, seu programa também pode levar como entrada duas listas (amt1, amt2, ...)
e (rate1, rate2, ...)
, contendo os valores e taxas na mesma ordem.
Seu programa irá então a saída do imposto a pagar, quer para duas casas decimais, ou arredondado para baixo para a unidade de moeda inteiro mais próximo.
Um exemplo de entrada (os escalões de impostos canadenses mais recentes, de 2016, com o crédito tributário pessoal básico aplicado e nada mais):
11474 15
45282 20.5
90563 26
140388 29
200000 33
393216
E sua saída correspondente:
108357.07 or 108357
O programa mais curto em qualquer idioma para fazer isso vence.
(amt, rate)
, mas não altera fundamentalmente o problema para aceitar a outra lista, então eu o modificarei para que você possa.Respostas:
05AB1E,
3524 bytesExplicação
Experimente online
fonte
Haskell,
6766 bytesObrigado Damien por -1 byte.
Esta solução está na forma de uma função infix,,
?
do tipo(Integral b, RealFrac r) => [(r, r)] -> r -> b
. A função auxiliar,,#
faz os cálculos necessários enquanto?
serve para lidar com as especificações de E / S.fonte
((m,p):r)#i|v<-min i m=p/100*(i-v)+r#v
salva 1 byteMathematica
8582 bytesDerivado do código de Josh O'Brien em R.
Uso
108357.
fonte
Matlab, 79 bytes
Supondo que podemos pegar
amt
erate
como vetores de coluna separados:Se não podemos (então
a
é uma matriz de duas colunas deamt
erate
) são 87 bytes.Explicação:
fonte
JavaScript (ES6), 60 bytes
a
é uma matriz de matrizes de banda e taxa, que seria[[11474, 15], [45282, 20.5], [90563, 26], [140388, 29], [200000, 33]]
o exemplo dado en
é a renda (393216
).fonte
Rápido, 61 bytes
Sem Golfe, com casos de teste:
fonte