Zainspirowany przez...
Praca w sieci - jak mogę ustalić, ile adresów IP znajduje się w danym zakresie?
Napisz program lub funkcję, która pobiera dwa ciągi wejściowe, z których każdy jest adresem IPv4 wyrażonym standardową notacją kropkowaną i wysyła lub zwraca liczbę adresów IP objętych tym zakresem, w tym dwa wejścia adresów IP.
- Nie wolno używać żadnego zewnętrznego kodu, bibliotek ani usług zaprojektowanych do analizowania adresu IP. (Inne standardowe funkcje biblioteki przetwarzania łańcucha znaków są dopuszczalne.)
- Wszystkie 2 ^ 32 adresy IP są równe. Nie rozróżnia się transmisji, klasy E itp.
- Obowiązują normalne zasady gry w golfa.
Na przykład:
"0.0.0.0","255.255.255.255" returns 4294967296.
"255.255.255.255","0.0.0.0" also returns 4294967296.
"1.2.3.4","1.2.3.4" returns 1.
"56.57.58.59","60.61.62.63" returns 67372037.
"1","2" is invalid input. Your code may do anything you like.
Odpowiedzi:
GolfScript, 20 bajtów
Wypróbuj online.
Przypadki testowe
Jak to działa
źródło
$
aby uniknąćabs
.~]
jest również naprawdę sprytny.Python 2 - 106
Zobacz tutaj .
Przykładowe dane wejściowe
Przykładowy wynik
źródło
def a():return reduce(lambda c,d:c*256+d,map(int,raw_input().split(".")))
jest znacznie krótszya=lambda:
zamiastdef a():return
zapisuje 6 znakówCJam - 15
Wypróbuj na http://cjam.aditsu.net/
Dzięki Dennis, wow, nie wiem, jak najlepiej wykorzystać własny język: str
źródło
:i
(b
wydaje się, że jest to liczba całkowita) i jeden, używając{r...}2*
zamiastqS/{...}/
Pure Bash, 66 bajtów
Uwagi:
p
której przekazano kropkowany dziesiętny adres IP, i wyświetla szesnastkową reprezentację tego adresu:${1//./ }
to rozszerzenie parametru, które zastępuje.
sięw przekazanym adresie IP
p()
printf
to w większości oczywiste. Ponieważ istnieje tylko jeden specyfikator formatu%02x
i cztery pozostałe argumenty, specyfikator formatu jest ponownie wykorzystywany dla każdego pozostałego argumentu, skutecznie łącząc 2 cyfry szesnastkowe każdego z 4 oktetów razem$[]
powoduje rozszerzenie arytmetyczne. Wykonujemy podstawowe odejmowanie i przypisujemy do zmiennejr
${r/-}
to rozszerzenie parametru w celu usunięcia możliwego-
znaku - skutecznie abs ()Wydajność:
źródło
printf
iecho
. Czy to częśćbash
?Python 2.7 -
96919087Wykonał funkcję.
Stosowanie:
Edycja: Usunięto niepotrzebne
int()
zf
funkcji. Dzięki isaacgEdycja2: Usunięto
LF
na końcu pliku (dzięki @Rusher) i usuniętomap()
kosztemreduce()
inicjalizacji (dzięki @ njzk2)źródło
,0
parametr do funkcji redukcji)GolfScript, 27 bajtów
Przykłady:
źródło
/
zamiast%~
.CoffeeScript -
94,92,79, 72Bez golfa :
Odpowiednik JavaScript :
Wypróbuj online .
źródło
I=(a)->n=0;a.split(".").forEach((x)->n<<=8;n+=parseInt x);n>>>0 R=(a,b)->1+Math.abs I(b)-I a
Math.abs
, ale nie mogę wymyślić nic krótszego.(z>0)*z||-z
jest najlepszy, jaki mam (ta sama długość, i wymaga wprowadzenia jednego znaku). Czy masz coś mądrzejszego niż to?dc, 61 znaków
Myślę, że to całkiem niesamowite, że można to w ogóle rozwiązać za pomocą dc, ponieważ nie ma możliwości parsowania łańcuchów. Sztuka polega na tym, że 192.168.123.185 idzie na stos jako
i
dXIr^*
przesuwa kropkę dziesiętną w prawo o tyle cyfr ułamkowych, ile jest, i działa nawet na .100.Odejmij znak, jeśli dane wejściowe są już na stosie.
źródło
PowerShell -
1121089278 bajtówTo mój pierwszy raz w golfa. Tutaj nic nie idzie:
Gra w golfa (stary):
Golfowy (nowy)
Nie golfowany:
Stosowanie
Zapisz jako plik (w tym przypadku getipamount.ps1), a następnie zadzwoń z konsoli
źródło
C # z LINQ - 139 bajtów
(Od 140 po zastosowaniu sugestii Boba).
Niegolfowany ....
https://dotnetfiddle.net/XPTDlt
źródło
a.b.c.d
jest równoważne z(a << 24) | (b << 16) | (c << 8) | (d << 0)
jest równoważne z(((a << 8) << 8) << 8) + ((b << 8) << 8) + (c << 8) + d)
. Zasadniczo każda iteracja agregacji pobiera istniejącą sumę i przesuwa ją w lewo o jeden oktet, a następnie dodaje następny oktet.c*256
zamiast(c<<8)
.e-f
zee<f?f-e:e-f
i upuszczenieMath.Abs()
Perl, 43 bajty
Licząc shebang jako dwa bajty.
Przykładowe użycie:
Notatki
vec eval,0,32
jest drop-in dlaip2long
. Perl pozwala wyrazić literały znakowe jako ich porządek poprzedzony av
, na przykładv0
może być użyty do znaku null. Można je również połączyć w łańcuchy, na przykładv65.66.67.68
→ABCD
. Gdy obecne są trzy lub więcej wartości, wartość początkowav
jest niepotrzebna. Wvec
interpretuje jako funkcja ciąg tablicy całkowitej każda komórka z określonej liczby bitów (o, 32).unpack N,eval
równie dobrze by działał.źródło
JavaScript ES6 - 68 bajtów
Wypróbuj z konsolą (naciśnij F12) Firefoksa.
źródło
alert
lubconsole.log
. Wydajność konsoli jest tania.console.log
bezpośrednim wyjściem. To jest gra w golfa, nie chodzi o czysty kod.Python 2.7, 104 bajty
źródło
Perl, 72 bajty
Stosowanie:
Jest to już dłużej niż program Perla primo , więc nie jest zbyt interesujące.
Perl, 119 bajtów, dla przestarzałego formatu adresu IP
Stosowanie:
Ten program akceptuje przestarzały format adresów IP! Obejmuje to adresy zawierające 1, 2 lub 3 części lub części szesnastkowe lub ósemkowe. Cytując stronę podręcznika inet_addr (3) ,
Większość programów nie akceptuje już tego przestarzałego formatu, ale
ping 0177.1
nadal działa w OpenBSD 5.5.źródło
PHP,
138110 bajtówźródło
explode('.',"$a.$b")
gosplit('\.',"$a.$b")
.Mathematica 9, 108 bajtów
Nie golfowany:
źródło
PHP, 46 bajtów
Wypróbuj online!
ip2long
źródło
C # - 135
Prawidłowo sformatowany
https://dotnetfiddle.net/Q0jkdA
źródło
Ruby, 93 bajty
Wydajność
źródło
J, 25 bajtów
Pobiera ciągi IP z kropkami w kwadracie jako lewy i prawy argument.
Wyjaśnił:
Przykłady:
źródło
Współczynnik, 73 bajty
Tłumaczenie odpowiedzi CoffeeScript.
źródło
JavaScript ES6, 81 znaków
Test:
PS: Spróbuję zoptymalizować to trochę później.
źródło
Lua, 153 bajtów
Szkoda, że lua nie ma funkcji podziału, musiałem zdefiniować swoją!
Bez golfa
źródło
Galaretka , 12 bajtów, wyzwanie dla postdate języka
Wypróbuj online!
Wyjaśnienie
Liczba elementów w zakresie obejmującym stanowi bezwzględną różnicę ich punktów końcowych plus 1.
źródło
Aksjomat, 385 bajtów
rozkop go i przetestuj
źródło