Zainspirowany scenami „klubu z trzema przecinkami” Doliny Krzemowej, takimi jak ten , w tym wyzwaniu opowiesz dziesięciu osobom o „klubie przecinka”, do którego należą.
Jeśli nie znasz terminu „klub z przecinkiem”, pozwól mi wyjaśnić: jesteś w klubie z przecinkiem, jeśli posiadane pieniądze mieszczą się w przedziale od 1 000,00 do 999,999,99 USD; jesteś w klubie z dwoma przecinkami, jeśli mieści się w przedziale od 1 000 000,00 do 999,999,999,99 USD; te „kluby” powtarzają się przez klub z trzema przecinkami, ponieważ żadna osoba na Ziemi (AFAIK) nie posiada więcej niż jeden bilion dolarów amerykańskich (japoński jen byłby inną historią bardzo szybko). Tak więc liczba przecinków na Twoim koncie bankowym, zgodnie ze standardami notacji najczęściej stosowanymi w Stanach Zjednoczonych i Wielkiej Brytanii, oznacza klub przecinków, do którego należysz. Te same zasady „przecinków” obowiązują w przypadku liczb ujemnych (choć nie chcesz być w klubie z przecinkami ujemnymi): kwoty ujemne w zakresie obejmującym [-0,01, -999.
Przypadki testowe
Friend Amount
John 100000
Jamie 0.05
Kylie 1549001.10
Laura 999999999.99
Russ 986000000
Karla 1
Reid 99.99
Mark 999.99
Manson 1000.01
Lonnie 999999999999.00
Nelly -123.45
Właściwe odpowiedzi:
John is in the 1-comma club.
Jamie is in the 0-comma club.
Kylie is in the 2-comma club.
Laura is in the 2-comma club.
Russ is in the 2-comma club.
Karla is in the 0-comma club.
Reid is in the 0-comma club.
Mark is in the 0-comma club.
Manson is in the 1-comma club.
Lonnie is in the 3-comma club.
Nelly is in the 0-comma club.
Niezależnie od konfiguracji tablicy potrzebnej do uzyskania friends
tablicy i amounts
tablicy nie liczy się do wyniku. W przypadku Pythona następujący kod się nie liczy:
f = ['John', 'Jamie', 'Kylie', 'Laura', 'Russ', 'Karla', 'Reid', 'Mark', 'Manson', 'Lonnie']
a = ['100000', '0.05', '1549001.10', '999999999.99', '986000000', '1', '99.99', '999.99', '1000.01', '999999999999.00']
Edycja: Zobacz poprawione przypadki testowe
Usunąłem przecinki ciągów z przypadków testowych, aby uczynić je nieco trudniejszymi, niż tylko liczenie przecinków.
"Name number,Name number,..."
zaakceptowania?-$1,234.56
też będą w klubie z przecinkiem?"<name> is in the <number of commas>-club."
Odpowiedzi:
JavaScript (ES6), 80 bajtów
Pobiera tablicę [przyjaciel, ilość] tablic i zwraca tablicę „przyjaciel jest w klubie z przecinkiem”. smyczki. Działa poprzez dodanie dodatkowych zer końcowych, dzięki czemu długość wynosi 6-8 dla klubu z przecinkami, 9-11 dla klubu z przecinkami, 12-15 dla klubu z przecinkami itp.
https://jsfiddle.net/cau40vmk/1/
źródło
Math.log10(n*n)/6|0
.|0
obciętych do zera, więc daje właściwą odpowiedź dla Jamiego.PostgreSQL, 61 bajtów
@x
jest wartością bezwzględnąx
,log(x)
wynosi logarytm dziesiętny idiv(y, x)
oblicza iloraz liczby całkowitej y / x.Ustawiać:
Wynik:
źródło
Galaretka ,
3432 bajtyDiadadic link (funkcja), który pobiera listę sald bankowych jako liczby (dziesiętne / całkowite) oraz listę nazw jako ciągi znaków i zwraca listę ciągów.
Wypróbuj online! - stopka
çY
po prostu wywołuje tę funkcję i dołącza do wynikowej listy ze znakami linii, dzięki czemu jest ładna, gdy działa jako pełny program.W jaki sposób?
źródło
PHP,
7674 bajtówNa szczęście nie muszę rzucać na int (jak w C); PHP robi to domyślnie dla
%d
.źródło
Mathematica (86 bajtów)
Konfiguracja (z nazwami jako ciągami, pieniędzmi jako liczbami):
Próba:
Wszystkie funkcje ciągów Mathematica zawierają w nazwie „String”, więc myślę, że dzienniki są krótsze. Ma
Max[...,0]
to na celu radzenie sobie z nieznośnymi liczbami ujemnymi lub ujemną nieskończonością dla osób, które posiadają od -1 do 1 dolarów. Dziennik liczby ujemnej zawiera wyimaginowane rzeczy, ale Mathematica pomaga ignorować to podczas robieniaFloor
!źródło
Japt , 36 bajtów
Pobiera to kwotę jako pierwsze wejście, a nazwę jako drugie.
Wyjaśnienie
Japt używa biblioteki shoco do kompresji ciągów.
Zainspirowany rozwiązaniem @ Neil .
Zaoszczędź 7 bajtów dzięki @ETHproductions
Wypróbuj online!
źródło
Vw0 x4 l /3-2|0
w środkowej części, oszczędzając 6 bajtów :-)V+`...{w0...
MATL,
504843 bajtówWypróbuj w MATL Online
Wyjaśnienie
źródło
R, 68 bajtów
Ustawić:
Rozwiązanie:
Weź podstawowy dziennik 10 wartości bezwzględnej konta, zaokrągl w dół, a następnie wydrukuj z nazwiskami.
Nie jestem pewien, czy mógłby być mniejszy, gdyby
a
był wektorem postaci ...źródło
log10
wywołanie wytworzyNaN
s dla negatywów. Wygląda na to,log10(abs(a))
że zadziała.abs(x)
używaćpmax(a,1)
- zajmie to mniej niż 1 i sprawi, że będzie 1, dając dobre wyniki dla liczb ujemnych. I zamiastfloor(log10(...)/3)
ciebie możesz użyćlog10(...)%/%3
. Myślę, że to sprowadza się do 66 bajtów (i poprawia na negatywy).cat()
i\n
… drukowanie wektora z ciągami w nim na konsoli może być uważane za wystarczająco dobre (* hmm * jak odpowiedzi w Pythonie).JavaScript, 59 bajtów
Zaoszczędź 3 bajty dzięki produktom @ETH
Zaoszczędź 2 bajty dzięki @Cyoce
Próbny
Pokaż fragment kodu
źródło
`${}`
an=>m=>...
zamiast tego(n,m)=>...
Vim, 72 bajty
Jakoś powinienem pokazać, że powraca zwrot, ale nie jestem pewien, jak to zrobić. To jest tylko podstawowa odpowiedź na wyrażenia regularne, na którą z pewnością można pobić dowolny język wyrażenia regularnego. Użyłbym V, ale myślę, że zastępcze polecenia w V
/
domyślnie używają jako separatora i nie mogłem wymyślić, jak sprawić, by nie narzekało na podział.Pobiera dane wejściowe jako tabelę OP i zwraca wartości jako tabelę, ale informacje finansowe zastąpione przez „znajduje się w klubie przecinkowym X”
Wypróbuj online!
źródło
\-=
coś dodawało. Ponadto, jeśli usuniesz dodatkowe spacje na wejściu i zmienisz także wyrażenie regularne,\v (\d*).*;
możesz zapisać 4 bajty05AB1E , 32 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Python 2, 69 bajtów
Skonfiguruj nasze tablice:
A naszą funkcją może być:
Dając nam:
Jeśli tablica musi być identyczna z podaną w pytaniu, rozwiązanie kosztuje 76 bajtów:
źródło
PowerShell, 82 bajty
Zakładając wejście tablicy 2D z
cc.ps1 @(@("John",100000),@("Jamie",0.05),@("Kylie",1549001.10),@("Laura",999999999.99),@("Russ",986000000),@("Karla",1),@("Reid",99.99),@("Mark",999.99),@("Manson",1000.01),@("Lonnie",999999999999.00),@("Nelly",-123.45))
Dane wyjściowe to
John is in the 1-comma club. Jamie is in the 0-comma club. Kylie is in the 2-comma club. Laura is in the 2-comma club. Russ is in the 2-comma club. Karla is in the 0-comma club. Reid is in the 0-comma club. Mark is in the 0-comma club. Manson is in the 1-comma club. Lonnie is in the 3-comma club. Nelly is in the 0-comma club.
źródło
Haskell, 71 bajtów
Definiuje operator „#”, który zapewnia poprawną odpowiedź. Na przykład:
Niestety, Haskell nie ma kompaktowej
log10
funkcji, jak wiele innych języków, ale ma przydatnąlogBase
funkcję, co oznacza, że nie musimy dzielić naszej odpowiedzi przez 3. Niestety,logBase 1000 0.05
jest to liczba ujemna, więc musimy użyć dłużejtruncate
niżfloor
zaokrąglić.Pełny program zawierający przypadki testowe:
Daje następujące wyniki:
źródło
K, 66 bajtów
źródło
Python 2.7 ,
89 8684 bajtówWypróbuj online!
Pełny program, który pobiera krotkę dwóch list - nazwy jako ciągi, salda bankowe jako liczby - i drukuje powstałe ciągi.
źródło
C #, 125 bajtów
Anonimowa funkcja, która drukuje wynik w formacie PO.
Pełny program z przypadkami testowymi:
źródło
Python 3 (
207 159 110 9586 bajtów, dzięki @iwaseatenbyagrue)Trochę konfiguracji:
Moja próba:
Wyniki:
Edycja: konwersja wszystkiego na wartości bezwzględne pozwoliła mi zaoszczędzić 15 bajtów.
źródło
["%s is in the %d-comma club."%(p,v.count(','))for p,v in zip(f,a)]
Musisz także dołączyć liczbę bajtów.print'\n'.join([your array])
i faktycznie wydrukować.-123.45
) Są wyłączone o jeden (ponieważ się liczy-
). Ale dlaczego nie wziąć listy numerów i zapisać (czy źle zinterpretowałem?). Trzeba by dodać instrukcje importu, a w obecnej postaci jest to fragment kodu, a nie program lub funkcja (jak to domyślnie, a zmiana z nich jest odradzana, chyba że jest ku temu dobry powód).math.ceil
funkcja Pythona prawdopodobnie dodaje całkiem sporo do mojego wyniku.(-len(str(abs(v)).split('.')[0])
jelen(str(int(float(v))))
. W twoim zestawie testowym nie ma liczb ujemnych (w przykładach jest jedna). Jeśli chcesz być kompletnym, wydaj na to 5 bajtów, co pozwolilen(str(abs(int(float(v)))))
Ci zaoszczędzić tylko 4 bajty.Perl 6,
10795 bajtówNie jest to moja największa praca, daj mi głowę, jeśli zapomniałem o jakichkolwiek technikach golfowych. EDYCJA: -12 bajtów dzięki @Ven
źródło
^@f.elems
? btw, nie potrzebujesz tego.elems
,for ^@f
działa. Nie musisz nazywać się$x
, użyj$_
zamiast tego. I nie używaj printf, używaj"{"interpolation"}"
.for @f
? Możesz użyć go$++
jako indeksu, aby przejść razem z nim (i indeksować do@a
).Python 2, 87 bajtów
Nieco starszy (90 bajtów):
Pobiera dane wejściowe jako listę krotek (nazwa, ilość).
Robię to na swoim telefonie w szkole, więc przetestuję to później.
źródło
dc,
5654 bajtówPobiera to dane wejściowe ze stosu, który powinien być wstępnie załadowany imieniem na górze stosu, pierwszym numerem, drugim imieniem, drugim numerem itp.
Oto przykład ładowania stosu i uruchamiania makra, g:
co daje zwykłą wydajność,
Oto egzegeza kodu:
Zauważ, że w edycji 1 zamieniłem
dZrX-
(d = dup, Z = długość liczb, r = zamień, X = ułamek, - = odejmij) z1/Z
(podziel liczbę przez 1, która przy domyślnej skali zero skraca liczbę całkowitą; następnie Z = liczba długość), oszczędzając dwa bajty.źródło
Szybki ,
166158145 bajtówA oto słownik:
Wypróbuj tutaj!
źródło
Clojure, 108 bajtów
Nie jestem pewien, czy działanie na liczbach zmiennoprzecinkowych byłoby zwarte niż na sekwencjach znaków. Nie jestem pewien, czy odpowiedź niefunkcyjna jest dobra, co zwraca sekwencję odpowiedzi.
źródło
Rebol, 118 bajtów
Niegolfowane z deklaracją tablicową:
Wynik:
źródło
Java 8
154141 bajtówNie golfił
źródło
String.valueOf
i użyj(((""+Math.abs(m.get(k).longValue())).length()-1)/3)
zamiast tego.k->
.