Wprowadzenie:
Podobnie jak Twitter, Instagram i inne, chciałem wyświetlać liczby takie jak 1.2K
i 3.8 M
zamiast 1,222
lub 3,823,456
.
Ale to nie wszystko! Jak wszyscy wiemy, mogą istnieć istoty ludzkie, które bez wątpienia nie polubią tych skrótów i będą próbowały je odwrócić. Tak 1.2k
się stanie 1,200
i 3.8 M
stanie się 3,800,000
.
Zadanie:
- Twoim zadaniem jest napisanie programu lub funkcji, która konwertuje listę liczb ( które są podane jako ciągi znaków ) na ich pary skrótowe i odwrotnie.
Na przykład, jeśli lista wejściowa (lub dowolna STDIN
) była ['1.4k', '1,234,567', '7.99M']
, to powinieneś wypisać:
['1,400', '1.2M', '7,990,000']
Możesz zastosować następny schemat dla skrótów:
- 10 3 -> jeden kilogram -> K.
- 10 6 -> jeden milion -> M
- 10 9 -> miliard -> B
Twój kod może przyjmować wszystkie małe i wielkie litery, mieszane lub nieokreślone litery i używać dowolnego z nich do wyświetlania, ale powinien być spójny.
Zasady i ograniczenia:
- możesz napisać program lub funkcję, przyjmując dane wejściowe za pomocą
STDIN
(lub najbliższej alternatywy), argumentu wiersza polecenia lub argumentu funkcji i wypisując wynik za pomocąSTDOUT
(lub najbliższej alternatywy), wartości zwracanej funkcji lub parametru funkcji ( wyjściowej ). - dane wejściowe mogą być w dowolnym dogodnym formacie listy lub ciągu. Możesz założyć, że są one mniejsze niż każdy i że lista zawiera co najmniej jeden element.
ai
231
- każda skrócona liczba będzie zawierać tylko jeden,
.
podczas gdy normalna liczba będzie zawierać tyle,,
ile to konieczne (możesz założyć, że te liczby nie zostaną zmienione). - ty NIE MOŻE wprowadzić numer jako
'123456'
raczej123,456
- obowiązują standardowe zasady gry w golfa .
Przypadki testowe:
Input: ['1.5M', '77.6k', '123,456,789'] Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b'] Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k'] Output: ['100']
Input: ['888', '33'] Output: ['0.888k', '0.033k']
Wyjaśnienia:
- dla liczb <1000 po kropce dziesiętnej na wyjściu skrótu powinieneś mieć tyle cyfr, ile jest to wymagane, aby uzyskać poprawny wynik. (np .:
2
-> stanie się0.002k
) - oznacza to co najwyżej 3 miejsca po przecinku ; dla liczb> 1000 możesz mieć maksymalnie 1 miejsce po przecinku . - skrót może być pisany zarówno małymi, jak i dużymi literami
- Usunąłem ograniczenie wbudowane zgodnie z sugestiami w komentarzach
Najkrótszy kod w bajtach wygrywa!
'123,456,789' -> '123.4M'
? Nie wyjaśnia to również, ile liczb dziesiętnych należy zastosować. Z pewnością coś poniżej 1000 nie powinno i tak być skracane.["k", "M", "G"]
. Co oznacza, że „chociaż normalna liczba będzie zawierać tyle, ile to konieczne ”, w moim kraju użycie jakiegokolwiek błędu byłoby błędem.Odpowiedzi:
PHP,
234224213201205 bajtów6 bajtów zapisanych przez inserttusernamehere, 4 bajty zainspirowane tym.
-r
-2 bajtów jeśli podkreślenia jako separator jest w porządku: Zastąpienie
" "
w_
.-1 bajt, jeśli były zaokrąglania ok Wymienić
($y*10|0)/10
zround($y,1)
.-17 bajtów PHP 7,1: Zastąpienie
substr($x,strlen($x)-1)
w$x[-1]
.80 (63) bajtów dla rozwinięcia tylko jednego argumentu:
zapisać do pliku, a następnie wykonać (lub wymienić
<?=
zecho
+ spacja i biegać z-r
.źródło
for($j=1;$x=$argv[$j++];)
- zamiastforeach($argv as$i=>$x)if($i)
kmb[$i]
- zamiast"kmb"[$i]
.JavaScript,
545524522518514508504498494214 bajtówDzięki @ETHproductions za oszczędność 180 bajtów!
Aby wywołać funkcję:
Wyprowadza jako
alert
, gdzie każdyalert
zawiera inny element danych wejściowychWersja do odczytu:
Podsumowanie edycji: funkcja przekonwertowana na funkcję strzałki
var
|0
zamiast podłogi.reverse().join''
źródło