Wprowadzenie
Clarence jest pracownikiem ds. Wprowadzania danych, który pracuje u dostawcy usług internetowych. Jego zadaniem jest ręczne wprowadzanie adresów IP wszystkich klientów usługodawcy internetowego do bazy danych. Robi to za pomocą klawiatury, która ma następujący układ:
1
2
3
4
5
6
7
8
9
.
0
Odległość między środkiem sąsiednich klawiszy poziomo lub pionowo wynosi dokładnie jeden centymetr. Na przykład odległość między środkami 3i 9wynosiłaby dwa centymetry. Odległość między środkami 3i 5wynosiłaby √2 cm. Twierdzenie Pitagorasa jest wystarczające do obliczenia odległości między dowolnymi dwoma kluczami.
Clarence, jak można oczekiwać od osoby pracującej w ISP, używa bardzo wolnego i nieefektywnego systemu pisania. Używa jednego palca i szuka klucza, a następnie przesuwa palec do klawisza, a następnie naciska go i powtarza dla wszystkich cyfr w numerze. Być może znasz ten styl jako „system wyszukiwania orła”, ponieważ palec szuka nad klawiaturą odpowiedniego klawisza, zanim pogrąży się w naciśnięciu klawisza, jak orzeł pogrążający się w celu zabicia.
Na przykład oto, jak Clarence wpisałby liczbę 7851
:
- Zaczyna palcem 7i wciska klucz.
- Przesuwa palec w prawo o 1 cm 8i naciska klawisz.
- Przesuwa palec w górę o 1 cm 5i naciska klucz.
- Przesuwa palec po przekątnej w górę, pozostawia około 2 cm 1i naciska klawisz.
Dlatego też całkowita odległość, że Clarence przeniósł swój palec, aby wpisać 7851
Is 1 + 1 + √2
co stanowi około 3.41cm.
Twoim zadaniem jest napisanie programu, który oblicza odległość, którą Clarence musi przesunąć palcem, aby wpisać dowolne adresy IP.
Opis wejścia
Dane wejściowe to ciąg znaków, który będzie w formie
().().().()
gdzie każda ()
jest liczbą całkowitą w zakresie 0
- 999
. To reprezentuje adres IP, który musi wpisać Clarence. Przykładem może być:
219.45.143.143
Chciałbym również zauważyć, że dane wejściowe takie jak 0.42.42.42
lub 999.999.999.999
są nadal prawidłowe, mimo że są one nieprawidłowymi adresami IP. Dlatego nie musisz dołączać żadnego kodu weryfikacyjnego adresu IP do swojego programu.
Opis wyjścia
Podaj odległość, którą Clarence musi przesunąć palcem, aby wpisać określony adres IP. W razie potrzeby zaokrąglaj odpowiedzi do dwóch miejsc po przecinku i używaj cm
jednostki w wynikach. Dane wyjściowe dla przykładowego wejścia to 27.38cm
(1 + √8 + √5 + 2 + 1 + √5 + 3 + 1 + √5 + √13 + 3 + 1 + √5).
Odpowiedzi:
CJam,
464443383734 bajtówDzięki @ user23013 za sugestie
mh
, które pozwoliły zaoszczędzić 5 bajtów.Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
{3fmd~@-@@-mh}%
.mh
Nawet nie miałem pojęcia, że istnieje.Pyth,
383534 bajtówDemonstracja.
Indeksowanie w ciąg idei typu float dzięki @Dennis.
Objaśnienie na fałszywym wejściu
15.0
:z
. „15,0”Mamy map do tej listy w następujący sposób:
m.jF.Dx`ciUTT1k3z
.UT
: Generujemy listę[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.iUTT
: Następnie traktujemy tę listę jako podstawową liczbę 10, która nam daje123456789
.ciUTT1
: Następnie konwertujemy tę liczbę na liczbę zmiennoprzecinkową, dzieląc ją przez 1, dając123456789.0
.`
: Konwertuj na ciąg.'123456789.0'
x k
: Weź indeks znaku wejściowego w tym ciągu.[0, 4, 9, 10]
..D 3
:.D
jest funkcją divmod, której pierwsze wejście jest dzielone i modulowane przez drugie wejście. Drugie wejście to 3 tutaj. Daje to fizyczną lokalizację postaci na klawiaturze numerycznej.[(0, 0), (1, 1), (3, 0), (3, 1)]
..jF
:.j
jest konstruktorem liczb zespolonych.F
stosuje to do krotki.[0j, (1+1j), (3+0j), (3+1j)]
..: 2
: Teraz bierzemy 2 podciągi wejściowe z tej listy, abyśmy mogli znaleźć odległości parami.[[0j, (1+1j)], [(1+1j), (3+0j)], [(3+0j), (3+1j)]]
.-M
: Bierze różnicę między dwiema liczbami zespolonymi.[(-1-1j), (-2+1j), -1j]
..aM
: Przyjmuje wartość bezwzględną wyniku. Jest to odległość między lokalizacjami klawiatury.[1.4142135623730951, 2.23606797749979, 1.0]
s
: Zsumuj odległości.4.650281539872885
..R 2
: Zaokrąglić do 2 miejsc po przecinku.4.65
.+ "cm
: Dodaj'cm'
na końcu i wydrukuj.4.65cm
.źródło
PHP - 108 bajtów
Dane wejściowe są pobierane ze standardowego wejścia.
-.987654321
Wysyłane dostrpos
funkcji ocenia się'-0.987654321'
w kontekście strun.Przykładowe użycie:
źródło
C,
192177159 bajtówZaktualizowana wersja, teraz zakończ program, używając argumentu wiersza poleceń. Jednocześnie poprawiono, by nadal był krótszy niż poprzednia wersja:
Nie golfowany:
Wersja do gry w golfa wykorzystuje preprocesor,
#define
aby skrócić część powtarzanego kodu w pełnej wersji.źródło
s
przed sprawdzeniem,*s
czy nie jest zerem. 3. OP powiedział program na swoim stanowisku. Nie jestem pewien, czy funkcja jest akceptowana. 4. Z GCC nie potrzebujesz dołączenia. 5.sqrt
jest krótszy niżsqrtf
. 6.pow(u-p,2)
jest krótszy niż(u-p)*(u-p)
. 7. Nie jestem pewien, ale myślę, że przechowywanie zarówno współrzędne w jednym ciągu i ustawienieu=x[c]/3
iv=x[c]%3
powinien być krótszy.int
mogą być używane niezadeklarowane. Ale rzeczywiście klang również przyjmuje to z ostrzeżeniem, więc się go pozbyłem.p=u,q=v,G,r+=...
.JavaScript ( ES6 ), 132
I / O przez wyskakujące okienko. Uruchom fragment kodu, aby przetestować (tylko Firefox)
źródło
Python 3, 108 bajtów
Wprawdzie niezbyt dobrze gra w golfa, ale przynajmniej wiąże się z PHP.
źródło
Ruby 135
139Przetestuj online: http://ideone.com/2CIQa5
źródło
Python
199171166Jest to krótszy kod Python (108) dla tego SP3000:
https://codegolf.stackexchange.com/a/50854/41163
Przykładowe użycie:
Uruchom online: http://codepad.org/h9CWCBNO
Skomentowany kod
źródło
if
klauzule w jednym wierszu, na przykładif i<1:c=3,1
<!-- language: lang-python -->