Es gab hier einige Probleme mit dem Steuersatzrechner, die von definierten Sätzen abhängen (insbesondere US-Bundessteuersätze), aber keine, die dies für willkürliche Listen getan haben.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die eine willkürliche Liste von Grenzsteuerklassen verwendet und den effektiven Steuerbetrag berechnet, der auf einen bestimmten Betrag des zu versteuernden Einkommens gezahlt wird.
Ihr Programm nimmt als Eingabe:
N
Zahlenpaare im Formular(amt, rate)
, die jeweils eine Steuerklasse darstellen.amt
ist die Höhe des zu versteuernden Einkommens, ab der der Steuersatz zu gelten beginnt. Diese Beträge sind alle Ganzzahlen und werden in aufsteigender Reihenfolge angezeigt.rate
ist der Steuersatz, ausgedrückt als Dezimalprozentsatz von 0 bis einschließlich 100.
Die Höhe des steuerpflichtigen Einkommens als nicht negative ganze Zahl.
Wenn für 0 USD keine Rate angegeben ist, wird eine Rate von 0% angenommen.
Alternativ können Sie Ihr Programm nehmen als Eingabe auch zwei Listen (amt1, amt2, ...)
und (rate1, rate2, ...)
, die Mengen und Preise in der gleichen Reihenfolge enthalten.
Ihr Programm wird dann ausgegeben die zu zahlende Steuer entweder auf zwei Dezimalstellen oder abgerundet nach unten auf die nächste ganze Währungseinheit.
Ein Beispiel für eine Eingabe (die neuesten kanadischen Steuerklassen aus dem Jahr 2016 mit der grundlegenden persönlichen Steuergutschrift und nichts anderem):
11474 15
45282 20.5
90563 26
140388 29
200000 33
393216
Und die entsprechende Ausgabe:
108357.07 or 108357
Das kürzeste Programm in einer Sprache, um dies zu tun, gewinnt.
(amt, rate)
, aber es ändert das Problem nicht grundlegend, die andere Liste zu akzeptieren, also werde ich es ändern, damit Sie es können.Antworten:
05AB1E,
3524 BytesErläuterung
Probieren Sie es online aus
quelle
Haskell,
6766 BytesDanke Damien für -1 Byte.
Diese Lösung liegt in Form einer Infixfunktion
?
vom Typ vor(Integral b, RealFrac r) => [(r, r)] -> r -> b
. Die Hilfsfunktion#
führt die erforderlichen Berechnungen durch und?
dient gleichzeitig zur Verarbeitung der E / A-Spezifikationen.quelle
((m,p):r)#i|v<-min i m=p/100*(i-v)+r#v
spart 1 ByteMathematica
8582 BytesAbgeleitet von Josh O'Briens Code in R.
Verwendungszweck
108357.
quelle
Matlab, 79 Bytes
Angenommen, wir können
amt
undrate
als separate Spaltenvektoren:Wenn wir nicht können (dann
a
ist eine zweispaltige Matrix vonamt
undrate
), sind es 87 Bytes.Erläuterung:
quelle
JavaScript (ES6), 60 Byte
a
ist ein Array von Arrays aus Band und Rate, die[[11474, 15], [45282, 20.5], [90563, 26], [140388, 29], [200000, 33]]
für das gegebene Beispiel gelten würden, undn
ist das Einkommen (393216
).quelle
Schnell, 61 Bytes
Ungolfed, mit Testfällen:
quelle