Jak sugeruje tytuł - choć dyskretnie - płacę tylko dolarami.
Wyzwanie
Napisz funkcję / program, który pobiera ciąg wejściowy, który jest wartością pieniężną poprzedzoną symbolem. ex) £4.99
. Następnie zwróć tę samą kwotę przeliczoną na USD.
Wejście
Otrzymasz ciąg jako dane wejściowe. Będzie miał symbol waluty, a po nim liczbę z dwoma miejscami dziesiętnymi (które mogą być .00
). Będą albo kropki dziesiętne .
i / lub przecinki ,
oddzielające liczbę. Wprowadzane będą następujące symbole walut:
Euro:
Funt szterling:
Yuan Renminbi: ¥
Będzie też przecinek lub przecinek dziesiętny w zależności od waluty, aby oddzielić „dolary” od „centów”:
Euro: #. ###, ##
Funt szterling: #, ###. ##
Yuan Renminbi: #, ###. ##
Wynik
Przekształcisz dane wejściowe z waluty określonej przez symbol na USD, zaokrąglając do dwóch miejsc po przecinku. Dane wyjściowe będą miały format $#,###.##
, a po lewej stronie danych wyjściowych będzie oczywiście więcej liczb ( EDYCJA: oznacza to, że na wyjściu jest dowolna liczba przecinków, podobnie jak na wejściu ). Kurs wymiany walut, którego będziemy używać, znajduje się poniżej.
Możesz założyć, że wejście zawiera symbol, który jest tylko jednym z powyższych (€ £ ¥ . ,
) - że zawsze jest poprawny.
Kurs wymiany
€1 : $1.10
£1 : $1.37
¥1 : $0.15
Przykłady
Input:
€1,37
£4.00
¥2,782,122.78
Respective output:
$1.51
$5.48
$417,318.42
Ostatnie słowa
- Jeśli użyjesz jednego z powyższych symboli (€, £, ¥), możesz je policzyć jako 1 bajt
- To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach!
10,0000.15
)£1 : $1.51
xD1.37 * 1.10 = 1,507 = 1,51
(więc nie1.52
) i4.00 * 1.37 = 5.48
(nie5.50
) i2782122.78 * 0.15 = 417318.417 = 417318.42
(nie420165.06
) ...: SOdpowiedzi:
Pyth -
54534847 bajtówZapomniałem o zastosowaniu warunkowym
W
.Pakiet testowy .
źródło
Python 3.6 (wersja wstępna), 87
Używa ciągów F do oceny wyniku i sformatowania go .
s.translate({46:'',44:''})
usuwa kropki i przecinkis
, czyniąc z niego prawidłowyint
literał, a następnieint(...)
przekształca go w rzeczywistyint
obiekt.źródło
Wypukły,
565554 bajtówTo zdecydowanie można skrócić. Wypróbuj online!
Oszczędność bajtu dzięki Lynn!
Wyjaśnienie, które należy przyjść, kiedy mogę uzyskać dostęp do komputera.
źródło
[1.1_.27+.15]
?Python 3.5,
137131121120117 bajtów:(Podziękowania dla Maltysen za podpowiedź na temat oszczędzania 6 bajtów
(137 -> 131)
!)Wypróbuj online! (Ideone)
źródło
.format()
robi to dla ciebie, jeśli to zrobisz${:,.2f}
46:0
zastępuje kropki znakami NUL.JavaScript (ES6), 107
Prosty i bezpośredni
, prawdopodobnie bardziej golfowyUwaga: testowane w FireFox. Wiele przeglądarek (szczególnie mobilnych) obsługuje błędy
toLocaleString
TEST
źródło
Java 7,
240227215211207202199196 bajtów(201 - 2 bajty z powodu reguły „ Jeśli użyjesz jednego z powyższych symboli (€, £, ¥), możesz policzyć je jako 1 bajt ”)
Dzięki @Frozn za zaoszczędzenie dużej ilości bajtów.
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
char c=a.charAt(0)
(w sumie wcale nie potrzebujeszc
, zobacz moją odpowiedź)d *
Spośród trójskładnikowego zaoszczędzić trochę powielania. Wygląda następująco:d*(c=='€'?1.1:c=='£'?1.37:.15)/100
./100
i*.01
ma taką samą liczbę bajtów, ac=='€'?.011:c=='£'?.0137:.0015
także dokładnie taką samą, jak w przypadku/100
.'£' < '¥' < '€'
. W ten sposób możesz pisać oc<'¥'?1.37:c>'¥'?1.1:.15
2 znaki krótsze.d
już nie potrzebujemy, ponieważ jest używany tylko raz.F #, 198 bajtów
Bez gry w golfa:
Wciąż próbuję wymyślić F #, więc radzenie sobie z separatorami tysięcy zajmuje dużo bajtów.
Zgodnie z regułami wyzwania symbole euro, jena i funta są liczone jako jeden bajt, pomimo tego, jak Unicode przechowuje je wewnętrznie.
źródło
Python 3.5,
10198Symbole euro, funta i jena są liczone jako 1 bajt / znak, zgodnie z regułami wyzwania.
Zamiast tłumaczyć lub interpretować tysiące i separatory dziesiętne, są one po prostu usuwane, aby dać ciąg cyfr.
Ciąg cyfr (po symbolu waluty) jest konwertowany na liczbę całkowitą.
Symbol waluty służy jako indeks do słownika kursów przeliczeniowych; konwersja jest wykonywana przez pomnożenie przez współczynnik konwersji i podzielenie przez 10000.
Wynik jest formatowany wiodącym znakiem dolara, dwoma dokładnościami dziesiętnymi i przecinkami do grupowania.
źródło
Python 3, 112 bajtów NIE KONKURENCYJNY
To nie konkuruje, ponieważ nie sądzę, że wolno mi odpowiedzieć na własne pytanie.
Ponadto nie miałem jeszcze okazji uruchomić tego na komputerze, ale wydaje mi się, że powinno to działać. Uruchomię go na komputerze, jak tylko będę miał szansę.
źródło
PHP, 117 bajtów
Wykorzystuje to przestarzałą funkcję; wymienić
ereg_replace('[^0-9]'
zepreg_replace('%[^\d]%'
aby kod pełni nowoczesny; dodaje 1 bajt.źródło
CJam, 54 bajty
Wypróbuj tutaj!
źródło