... czy jest tam?
Wyzwanie polega na przeanalizowaniu rachunku za lunch, który zawiera cenę podstawową, porady, rabaty, kupony i dodatki oraz sprawdzenie, czy mój lunch wynosił 0 USD lub mniej . Jeśli to jest dane wejściowe:
12.34
15 tip
25 discount
1.5 extra
2 coupon
Wtedy wyjście może być false
. Oto jak to działa:
12.34
to cena bazowa.
15 tip
oznacza dodanie 15% do całości.
25 discount
oznacza odjęcie 25% od całości.
1.5 extra
oznacza dodanie 1,5 do całości.
2 coupon
oznacza odjęcie 2 od sumy.
Może być dowolna liczba porad, rabatów, kuponów i dodatków, ale zawsze będzie jedna cena bazowa.
Następnie robimy (12.34 * 1.15) * 0.75 + 1.5 - 2
dla wyniku 10.14. 10.14 jest większe niż 0, więc wyprowadzamy false. Mój lunch nie był darmowy.
Zasady
liczba tip
oznacza dodanie liczby procentowej do sumy.
liczba discount
oznacza odjęcie procentu liczbowego od sumy
liczba extra
oznacza dodanie liczby do sumy
liczba coupon
oznacza odjęcie liczby od sumy
Inny przykład:
10
20 tip
20 discount
2 coupon
2 coupon
1 coupon
50 discount
2.55 coupon
Cena wynosi -0.24
((10 * 1,20 * 0,80 - 2 - 2 - 1) * 0,5 - 2,55), więc wynik jest prawdziwy (mój lunch był bezpłatny).
Uwagi:
- Dokładność musi wynosić co najmniej 2 miejsca po przecinku.
- Możesz przyjmować dane wejściowe jako ciąg znaków z nowymi liniami (opcjonalny znak nowej linii) lub inny znak separacji albo tablicę / listę danych wejściowych.
15 tip
jako0.15 tip
Odpowiedzi:
05AB1E ,
373334 bajtówWypróbuj online!
Wyjaśnienie
Pożycza
mod 7
sztuczkę od odpowiedzi Jelly'ego Allanaźródło
1
gdy wartość wynosi <1.JavaScript (ES6),
8885 bajtówPobiera dane wejściowe jako tablicę ciągów. Zwraca
0
za darmo lub1
za darmo.Jak to działa
Każda linia jest podzielona na spację, aby uzyskać
a
= ilość,b
= rodzaj operacji. Jeśli w ogóle nie ma żadnej operacji (co ma miejsce w pierwszym wierszu),b
domyślnie jest ustawione"e"
na „dodatkowe”.Aby dodać poprawną kwotę do sumy
t
, używamy obiektu, którego klucze są pierwszą literą operacji:Uwaga : Gdyby rachunek składał się tylko z jednego elementu,
map()
zwróciłby tablicę jednoelementową, która byłaby wymuszona na liczbę całkowitą po zastosowaniu|
operatora, co spowodowałoby niepowodzenie ostatniego testu. Ale PO potwierdziło, że tak się nie stanie. (Tablice 2 lub więcej elementów są wymuszane na 0.)Próbny
Pokaż fragment kodu
źródło
CJam ,
4542 bajtówWeź dane wejściowe jako tablicę ciągów, a wskazówkę i zniżkę jako dziesiętne.
Wypróbuj online!
Wyjaśnienie
Kod oceniany w zależności od pierwszych liter:
źródło
Galaretka ,
4239 bajtówPobiera listę ciągów liczb dziesiętnych sformatowanych
(zera wiodące będą działać, ale będą miały efekt uboczny drukowania zer na STDOUT przed końcowym wynikiem).
Wypróbuj online!- nie darmowy; lub za darmo .
W jaki sposób?
źródło
GNU sed + dc,
117111107 bajtówUżywając
-z
flagi interpretera (zawartej w wyniku jako 1 bajt):Wyjaśnienie
Ponieważ wejście jest już bardzo blisko do notacji polskiej tyłu, jest to prosta sprawa, aby przekształcić
extra
icoupon
na+
i-
, a nie o wiele więcej do zmiany procentowe w mnożników. Następnie wywołajdc
i wygeneruj czytelny wynik w zależności od tego, czy-
zostanie znaleziony (musimy zanegować wynik, więc-
implikuje „nie za darmo”, w przeciwnym razie 0 byłoby szczególnym przypadkiem, który wymagałby własnej obsługi).Przykład
Drugi przypadek z pytania to:
To staje się tym
dc
programem:Wynikające z:
źródło
JavaScript,
173169145 bajtówW golfa powinno być jeszcze wiele do zrobienia
Wypróbuj online!(Obecnie 145 bajtów)
Wypróbuj to:
Dzięki programmer5000 za wszystkie porady dotyczące gry w golfa
źródło
{w=i.split`<nl>`
gdzie <nl> jest dosłownie nową liniąf=
część, jest to dozwolone przez przepisy, a można zastąpić$.split(' ')
z$.split` `
.JavaScript (ES6), 97
107Wprowadź jako ciąg multilinii z końcowym znakiem nowej linii.
Tego wyrażenia rozdziela numerycznych opcjonalną część tekstu dla każdej linii d i b .
Obliczenia powinny być mniej lub bardziej obviuos. Tylko kilka uwag:
- używając,
-=
aby uniknąć problemów z pomieszaniem liczb z łańcuchami- suma jest negowana, aby zapisać 1 bajt, więc ostatnia kontrola dotyczy
>= 0
zamiast<= 0
PS wciąż znacznie dłużej niż @ Arnauld's. Szczury
Test
źródło
C #
324219 bajtówTo nie jest ładne i prawdopodobnie nie najlepszy sposób, ale oto jest. Wymaga, aby dane wejściowe były przekazywane jako tablica ciągów, a porady / rabaty przekazywane jako zmiennoprzecinkowe (
0.15 tip
zamiast15 tip
), ponieważ zostało to wyjaśnione jako akceptowalne w komentarzach specyfikacji.Wyjaśnienie:
Musi być lepszy sposób, aby to zrobić, ale to przynajmniej działa
źródło
100
wt
oddziale.float.Parse(s.Split(' ')[0])
coś, aby zmniejszyć powielanie. Dzięki temu zaoszczędzisz około 80 znaków.PowerShell ,
218156143 bajtówWypróbuj online!
EDYCJA Zapisane bajty poprzez wcześniejsze podzielenie zmiennej potokowej
EDYCJA 2 Zapisano drugą część ciągu, aby móc wykonywać lepsze połączenia z użyciem symboli wieloznacznych
źródło
Python 133 bajty
Podobne do wersji JavaScript ES6. Ale dla typu wymagana jest konwersja typu
float
wartości w Pythonie.Wyjaśnienie:
Wyodrębnij pierwszą wartość i przekonwertuj ją na liczbę zmiennoprzecinkową.
Dla każdej innej linii w rachunku:
float
dict
aby wybrać właściwą operację zgodnie z pierwszą literąStosowanie:
źródło
Java 227 bajtów
Minęło trochę czasu i nadal nie widzę odpowiedzi w Javie, więc oto moja odpowiedź w języku C # przeniesiona do Javy, kosztem 8 bajtów
Aby uzyskać wyjaśnienie i tym podobne, zobacz moją odpowiedź w języku C #
Podobnie jak ta odpowiedź, ta odpowiedź oczekuje, że napiwek i zniżka zostaną przekazane jako zmiennoprzecinkowe (
0.15
nie15
)źródło
var
standardowego typu C # i lambdas (wiem, że Java je ma, ale C # są bardziej golfowe)Jq 1,5 ,
129119114112 bajtówRozszerzony
Wypróbuj online!
źródło