Fred ist ein quasi freundlicher Typ, aber in Wirklichkeit ist er gemein.
Aus diesem Grund lebt Fred alleine in einer kleinen Wohnung in Los Altos, CA. Fred ist so gemein, weil er sich sehr für Wasser interessiert. Er braucht daher Ihre Hilfe, um herauszufinden, wie hoch seine Wasserrechnung ist.
Ihre Aufgabe ist es, eine Funktion oder ein Programm zu schreiben, die / das seine Wasserrechnung unter Berücksichtigung der als Eingabe verwendeten Wassermenge zurückgibt (die immer eine ganze Zahl ist).
Der Wasserverbrauch erfolgt in Stufen. Dies bedeutet, dass es je nach Wassermenge Preisspannen gibt.
Dies sind die Ebenen, ihre Preise und die Wassermengen, denen sie entsprechen:
Tier I
First 10 Ccf: $3.8476/Ccf
Tier II
Next 17 Ccf: $4.0932/Ccf
Tier III
All subsequent water: $4.9118/Ccf
Für n Hunderte Kubikfuß (Ccf) fallen außerdem die folgenden zusätzlichen Gebühren an:
CPUC fee: 1.5% of above charges
LIRA quantity surcharge: $0.047*n
PBOP amoritization surcharge: $0.004*n
Die Summe der Gebühren für Tier I, Tier II, Tier III, CPUC, LIRA und PBOP ergibt die gesamte Wasserrechnung. Diese Summe sollten Sie entweder zurückgeben oder auf die Konsole drucken, auf zwei Dezimalstellen gerundet.
Hier sind zwei Beispiele:
Input: 15
... Calculations which you do not need to output but here to help explain:
Tier I: 10*3.8476 = 38.476
Tier II: (15-10)*4.0932 = 20.466
Tier III: 0*4.9118 = 0
Tiers sum: 58.942
CPUC: 1.5% of 58.942 = 0.88413
LIRA: 0.047*15 = 0.705
PBOP: 0.004*15 = 0.06
Total sum: 58.942 + 0.88413 + 0.705 + 0.06 = 60.59113
...
Output: 60.59
Input: 100
... Calculations which you do not need to output but here to help explain:
Tier I: 10*3.8476 = 38.476
Tier II: 17*4.0932 = 69.5844
Tier III: (100-10-17)*4.9118 = 358.5614
Tiers sum: 466.6218
CPUC: 1.5% of = 6.999327
LIRA: 0.047*100 = 4.7
PBOP: 0.004*100 = 0.4
Total sum: 478.721127
...
Output: 478.72
Dies ist Code Golf, also gewinnt der kürzeste Code in Bytes!
n
?Antworten:
Pyth,
5541 BytesDer Code enthält nicht druckbare Zeichen. Hier ist also ein
xxd
Hexdump.Erläuterung
."…"
ist eine gepackte Zeichenfolge, die enthält3.8476,4.0932,4.9118
.v
wertet das zum Tupel aus(3.8476, 4.0932, 4.9118)
. Dies sind die Preise der Stufen multipliziert mit der hinzugefügten CPUC.UQ
erzeugt den Bereich0
…n-1
.c
…,T27
Teilt diesen Bereich bei den Indizes 10 und 27 mit zusätzlichen leeren Listen am Ende auf, wenn der Bereich zu kurz ist.lM
ermittelt die Länge jedes Teils und gibt die Wassermenge für jede Stufe an.*V
multipliziert dies mit dem Tupel aus Schritt 2, um die Preise für die Ebenen zu erhalten.s
summiert die Ergebnisse.+
…*Q.051
Addiert die Eingabe multipliziert mit 0,051, dh LIRA + PBOP..R
…2
Rundet das Ergebnis auf 2 Dezimalstellen.Probieren Sie es online aus.
quelle
Mathematica,
837669 BytesAnonyme Funktion, die ein Array der drei Ebenen in der ersten Spalte plus LIRA und PBOP erstellt, die in der vierten Spalte als Zahl mit beliebiger Genauigkeit dargestellt werden. Das Ganze wird mit multipliziert
1.015
und alle Elemente des Arrays werden summiert und gerundet.01
. Da51/1015*1.015
dies gewünscht wird, ist0.051
die Ausgabe genau so genau wie die Spezifikation in OP.Eine kürzere Lösung in 76 Bytes , wie ich in meinem Kommentar unter der Perl-Lösung vorgeschlagen habe
Dabei
1.015
wird von Anfang an in die Preise einbezogen, und dann werden LIRA und PBOP über der ersten Stufe hinzugefügt.73 Bytes (aber ich zögere es, meine Byteanzahl zu aktualisieren, da dies der einfachen Perl-Lösung ziemlich nahe kommt):69 Bytes - ah was zum Teufel, das Golfen hat auch einige Mühe gekostet.
BEARBEITEN bezüglich Gleitkommafehlers
Die ersten drei Iterationen meiner Antwort sind in ihrer Dezimaldarstellung tatsächlich genau, da alle beteiligten Koeffizienten abschließende Dezimaldarstellungen haben. Da es sich bei den Koeffizienten jedoch explizit um Gleitkommazahlen handelt, die binär gespeichert sind und nicht terminierende binäre Darstellungen aufweisen, beginnen ausreichend große Eingaben, Fehler in den niedrigstwertigen Ziffern der binären Darstellung zu akkumulieren. Ich würde vermuten, wenn der Gleitkomma so groß ist, dass er nur 3-4 Stellen rechts vom Dezimalpunkt passt, können wir Fehler von etwa 1 Cent erwarten. Eine genaue Antwort finden Sie weiter unten .
72 Bytes, etwas immun gegen Schwebeungenauigkeiten
Die Multiplikation mit der Führung
.01
erfolgt im allerletzten Schritt. Bis zu diesem Zeitpunkt werden alle Berechnungen mit ganzen Zahlen durchgeführt. Dies bedeutet, dass, wenn das.01
weggelassen wird, ein genaues Ergebnis erzielt wird , das jedoch in Cent und nicht in Dollar ausgedrückt wird. Natürlich wandelt die Multiplikation mit einem Float das Ganze in einen Float um, und wie bereits erwähnt, muss es klein genug sein, um in 64 Bit zu passen und trotzdem genau zu sein.01
.quelle
05AB1E,
645851 BytesErklärt
Probieren Sie es online aus
quelle
Perl 5, 73 Bytes
Die offensichtliche Lösung. 72 Bytes plus 1 für
-ne
statt-e
.5 Bytes dank LLlAMnYP gespeichert . Vielen Dank!
quelle
.01
würde, würde sie genau bleiben, solange die Ganzzahl gespeichert werden kann.Oracle SQL 11.2, 151 Bytes
Nicht Golf gespielt
quelle
SELECT
und((DECODE
, um ein Byte zu speichern. Speichern Sie weitere 10 Bytes mit einer benannten Tabelle! 7 durch Entfernen der Doppelpunkte und Verwenden eines Spaltennamens mit einem Zeichen plus drei mit einem Tabellennamen mit einem Zeichen.JavaScript ES6, 77 Bytes
Nicht Golf gespielt
Ich habe die LIRA- und PBOP-Koeffizienten berücksichtigt. Die zusätzlichen 1,5% werden am Ende hinzugefügt.
Wahrscheinlich nicht die effizienteste Lösung in Bezug auf Golf, aber etwas anders als die von Perl.
Gleitkommafehler sollten bei größeren Zahlen auftreten und können durch Hinzufügen von 1 oder 2 zusätzlichen Bytes zu jedem Koeffizienten behoben werden.
quelle
()
s nicht umx>10?:
,?:
assoziiert von rechts nach links. Ich denke, Sie können auch einige Bytes sparen, indem Sie die Klammern multiplizieren, z . B.(x-10)*4.154598+39.05314
gleichx*4.154598-41.54598+39.05314
gleichx*4.154598-2.49284
.R , 52 Bytes
Probieren Sie es online aus!
Erzeugt eine lineare Approximationsfunktion basierend auf den Werten meiner vorherigen Antwort bei 0,10,27 und 10 ^ 6. Der Haken: Die Obergrenze für den Eingang liegt bei 10 ^ 6.
approxfun
(mitecdf
,stepfun
,splinefun
, etc.) ist einer der vielen schönen EigenschaftenR
.quelle
VBA, 88 Bytes
Der Basiszinssatz und die Differenzsätze für die höhere Nutzung wurden mit 5 multipliziert und der CPUC-Gebührenmultiplikator durch 5 (0,203) geteilt.
Der VB-Editor fügt eine
End Function
Zeile hinzu, weshalb der Terminal-Zeilenvorschub enthalten ist.quelle
Pyth -
5851 BytesTestsuite .
quelle