... oder ist da?
Ihre Herausforderung besteht darin, meine Rechnung für das Mittagessen zu analysieren, die den Grundpreis, Tipps, Rabatte, Gutscheine und Extras enthält, und herauszufinden, ob mein Mittagessen 0 USD oder weniger betrug . Wenn dies die Eingabe ist:
12.34
15 tip
25 discount
1.5 extra
2 coupon
Dann könnte die Ausgabe sein false
. So funktioniert das:
12.34
ist der Grundpreis.
15 tip
bedeutet, 15% zur Gesamtsumme hinzuzufügen.
25 discount
bedeutet, 25% von der Gesamtsumme abzuziehen.
1.5 extra
bedeutet, 1,5 zur Gesamtsumme hinzuzufügen.
2 coupon
bedeutet, 2 von der Summe abzuziehen.
Es kann eine beliebige Anzahl von Trinkgeldern, Rabatten, Gutscheinen und Extras geben, aber es wird immer einen Grundpreis geben.
Dann machen wir (12.34 * 1.15) * 0.75 + 1.5 - 2
für eine Ausgabe von 10.14. 10.14 ist größer als 0, daher geben wir false aus. Mein Mittagessen war nicht frei.
Regeln
Zahl tip
bedeutet, der Gesamtzahl Prozent hinzuzufügen .
Zahl discount
bedeutet, die Zahl in Prozent von der Gesamtsumme abzuziehen
Zahl extra
bedeutet , der Gesamtsumme eine Zahl hinzuzufügen
Zahl coupon
bedeutet, die Zahl von der Gesamtsumme zu subtrahieren
Ein anderes Beispiel:
10
20 tip
20 discount
2 coupon
2 coupon
1 coupon
50 discount
2.55 coupon
Der Preis ist -0.24
((10 * 1,20 * 0,80 - 2 - 2 - 1) * 0,5 - 2,55), so dass die Ausgabe wahr ist (mein Mittagessen war frei.)
Anmerkungen:
- Die Genauigkeit muss mindestens 2 Dezimalstellen betragen.
- Sie können Eingaben als Zeichenfolge mit Zeilenumbrüchen (optional mit Zeilenumbrüchen am Ende) oder einem anderen Trennzeichen oder einem Array / einer Liste der Eingaben übernehmen.
15 tip
als0.15 tip
Antworten:
05AB1E ,
373334 BytesProbieren Sie es online!
Erläuterung
Leiht sich den
mod 7
Trick von Jonathan Allans Gelee-Antwortquelle
1
wenn der Wert <1 ist.JavaScript (ES6),
88-85ByteNimmt Eingaben als ein Array von Zeichenfolgen. Rückgabe
0
kostenlos oder1
unfrei.Wie es funktioniert
Jede Zeile wird auf das Leerzeichen aufgeteilt, um
a
= Betrag,b
= Art der Operation zu erhalten. Wenn überhaupt keine Operation ausgeführt wird (was in der ersten Zeile der Fall ist),b
ist standardmäßig"e"
"extra" eingestellt.Um den korrekten Betrag zur Gesamtsumme hinzuzufügen
t
, verwenden wir ein Objekt, dessen Schlüssel der erste Buchstabe der Operation sind:Hinweis : Wenn die Rechnung nur aus einem Element besteht, wird
map()
ein Array mit einem einzelnen Element zurückgegeben, das beim Anwenden des|
Operators in eine Ganzzahl umgewandelt wird , wodurch der endgültige Test fehlschlägt. Aber das OP hat bestätigt, dass dies nicht passieren kann. (Arrays aus 2 oder mehr Elementen werden zu 0 gezwungen.)Demo
Code-Snippet anzeigen
quelle
CJam ,
4542 BytesNehmen Sie die Eingabe als eine Reihe von Zeichenfolgen und nehmen Sie die Spitze und den Rabatt als Dezimalstellen.
Probieren Sie es online!
Erläuterung
Der Code, der abhängig von den Anfangsbuchstaben ausgewertet wird:
quelle
Jelly ,
4239 BytesNimmt eine Liste von Strings mit dezimal formatierten Zahlen
(Führende Nullen werden arbeiten, haben aber den Nebeneffekt des Druckens Null auf STDOUT vor dem endgültigen Ergebnis).
Probieren Sie es online! - nicht frei; oder kostenlos .
Wie?
quelle
GNU sed + dc,
117111107 BytesVerwenden des
-z
Interpreter-Flags (in der Bewertung als 1 Byte enthalten):Erläuterung
Da die Eingabe der polnischen Umkehrnotation bereits sehr nahe kommt, ist es einfach , die Prozentsätze in Multiplikatoren umzuwandeln
extra
undcoupon
in+
und-
und nicht viel mehr zu ändern. Rufen Sie dann aufdc
und erzeugen Sie ein lesbares Ergebnis, je nachdem, ob-
es gefunden wurde (wir müssen das Ergebnis negieren, also-
impliziert a "nicht frei", sonst wäre 0 ein Sonderfall, der eine eigene Behandlung erfordern würde).Beispiel
Der zweite Fall aus der Frage ist:
Das wird dieses
dc
Programm:Ergebend:
quelle
JavaScript,
173169145 BytesEs sollte noch viel zu golfen geben
Probieren Sie es online! (Derzeit 145 Byte)
Versuch es:
Vielen Dank an programmer5000 für all seine Golf-Ratschläge
quelle
{w=i.split`<nl>`
wo <nl> eine wörtliche Newline istf=
Teil, es nach den Regeln erlaubt ist, und Sie können ersetzen$.split(' ')
mit$.split` `
.JavaScript (ES6), 97
107Eingabe als mehrzeilige Zeichenfolge mit einer nachgestellten Newline.
Der reguläre Ausdruck teilt den numerischen und optionalen Textteil für jede Zeile in d und b .
Die Berechnungen sollten mehr oder weniger offensichtlich sein. Nur einige Anmerkung:
- Verwendung
-=
zur Vermeidung von Problemen Zahl mit Streichern Mischen- die Summe wird negiert 1 Byte zu speichern, so dass die letzte Prüfung für ist
>= 0
statt<= 0
PS immer noch viel länger als bei Arnauld. Ratten.
Prüfung
quelle
C #
324219 BytesEs ist nicht schön und wahrscheinlich auch nicht der beste Weg, aber hier ist es. Erfordert die Übergabe von Eingaben als Zeichenfolgenarray und die Übergabe
0.15 tip
von Tipps / Rabatten15 tip
als Gleitkommazahl ( anstelle von ), da dies in den Kommentaren der Spezifikation als akzeptabel erklärt wurde.Erklärung:
Es muss einen besseren Weg geben, dies zu tun, aber das funktioniert zumindest
quelle
100
in dert
Filiale nicht.float.Parse(s.Split(' ')[0])
etwas ein, um Doppelarbeit zu vermeiden. Das spart ungefähr 80 Zeichen.PowerShell ,
218156143 ByteProbieren Sie es online!
EDIT Gespeicherte Bytes durch vorheriges Aufteilen der Pipe-Variablen
BEARBEITEN 2 Der zweite Teil der Zeichenfolge wurde gespeichert, damit ich bessere Platzhalteranrufe ausführen kann
quelle
Python 133 Bytes
Ähnlich der JavaScript ES6-Version. Für
float
Werte in Python ist jedoch eine Typkonvertierung erforderlich .Erläuterung:
Extrahieren Sie den ersten Wert und konvertieren Sie ihn in float.
Für jede andere Zeile in der Rechnung:
float
dict
, um die richtige Operation gemäß dem ersten Buchstaben auszuwählenVerwendung:
quelle
Java 227 Bytes
Schon eine Weile und immer noch keine Java-Antwort, die ich sehen kann, also ist hier meine nach Java portierte C # -Antwort zum Preis von 8 Bytes
Eine Erklärung und dergleichen finden Sie in meiner C # -Antwort
Wie diese Antwort erwartet diese Antwort, dass Trinkgeld und Rabatt als Float (
0.15
nicht15
) übergeben werden.quelle
var
generischen C # -Typen und Lambdas (ich weiß, Java hat sie, aber C # ist Golfspieler)Jq 1,5 ,
129119114112 BytesErweitert
Probieren Sie es online!
quelle