Вдохновленный...
Сеть - Как я могу определить, сколько IP-адресов существует в данном диапазоне?
Напишите программу или функцию, которая принимает в качестве входных данных две строки, каждая из которых является IPv4-адресом, выраженным в стандартных точечных обозначениях, и выводит или возвращает количество IP-адресов, охватываемых этим диапазоном, включая два входных IP-адреса.
- Вы не должны использовать какой-либо внешний код, библиотеки или службы, предназначенные для анализа IP-адреса. (Другие функции обработки стандартной библиотеки строк приемлемы.)
- Все 2 ^ 32 IP-адреса равны. Не делается различий для трансляции, класса E и т. Д.
- Применяются нормальные правила игры в гольф.
Например:
"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.
Ответы:
GolfScript, 20 байт
Попробуйте онлайн.
Контрольные примеры
Как это работает
источник
$
чтобы избежатьabs
.~]
тоже действительно умный.Python 2 - 106
Смотрите это здесь .
Пример ввода
Пример вывода
источник
def a():return reduce(lambda c,d:c*256+d,map(int,raw_input().split(".")))
намного корочеa=lambda:
вместо того, чтобыdef a():return
сохранять 6 символовCJam - 15
Попробуйте это на http://cjam.aditsu.net/
Спасибо, Деннис, вау, я не знаю, как получить максимум от моего языка: p
источник
:i
(b
кажется, что приведен к целому числу) и один, используя{r...}2*
вместоqS/{...}/
Чистый bash, 66 байт
Заметки:
p
, которой передается точечный десятичный IP-адрес, и выводит шестнадцатеричное представление этого адреса:${1//./ }
является расширением параметра , который заменяет.
св IP - адресе передается
p()
printf
в основном говорит само за себя. Поскольку существует только один спецификатор формата%02x
и четыре оставшихся аргумента, спецификатор формата повторно используется для каждого оставшегося аргумента, эффективно объединяя 2 шестнадцатеричные цифры каждого из 4 октетов вместе$[]
вызывает арифметическое расширение. Мы делаем основное вычитание и присваиваем переменнойr
${r/-}
это расширение параметра для удаления возможного-
символа - эффективно abs ()Выход:
источник
printf
иecho
. Это частьbash
?Python 2.7 -
96919087Сделал функцию.
Использование:
Редактировать: Удалено ненужное
int()
изf
функции. Благодаря isaacgEdit2: удалено
LF
в конце файла (благодаря @Rusher) и удаленоmap()
за счетreduce()
инициализатора (благодаря @ njzk2)источник
,0
параметр в функцию снижения)GolfScript, 27 байт
Примеры:
источник
/
вместо%~
.CoffeeScript -
94,92,7972Без гольфа :
Эквивалентный JavaScript :
Попробуйте онлайн .
источник
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
, но я не могу придумать что-то более короткое.(z>0)*z||-z
это лучшее, что у меня есть (той же длины, и он требует ввода одного символа). У тебя есть что-нибудь умнее этого?DC, 61 символов
Я думаю, что это довольно удивительно, что это вообще можно решить с помощью dc, поскольку у него нет возможности разбирать строки. Хитрость в том, что 192.168.123.185 идет в стек как
и
dXIr^*
сдвигает десятичную точку вправо на столько цифр дроби, сколько есть, и это даже работает для .100.Вычтите символ, если вы позволите вводу быть уже в стеке.
источник
Powershell -
1121089278 байтЭто мой первый раз в гольф. Тут ничего не происходит:
Гольф (старый):
Гольф (новый)
Ungolfed:
использование
Сохранить как файл (в данном случае getipamount.ps1), а затем вызвать из консоли
источник
C # с LINQ - 139 байт
(От 140 после применения предложения Боба.)
Ungolfed ....
https://dotnetfiddle.net/XPTDlt
источник
a.b.c.d
эквивалентно(a << 24) | (b << 16) | (c << 8) | (d << 0)
эквивалентно(((a << 8) << 8) << 8) + ((b << 8) << 8) + (c << 8) + d)
. По сути, каждая итерация агрегации берет существующую сумму и сдвигает ее на один октет влево, а затем добавляет следующий октет.c*256
вместо(c<<8)
.e-f
сe<f?f-e:e-f
и опускаяMath.Abs()
Perl, 43 байта
Считая Шебанг как два байта.
Пример использования:
Заметки
vec eval,0,32
это вставка дляip2long
. Perl позволяет символьным литералам быть выраженными в виде их порядкового префикса сv
, например,v0
может использоваться для нулевого символа. Они также могут быть связаны вместе, напримерv65.66.67.68
→ABCD
. Когда присутствуют три или более значений, начальные значенияv
не нужны. Вvec
функции интерпретирует строку как целое массив, каждая ячейка имеет указанное число битов (здесь, 32).unpack N,eval
работал бы одинаково хорошо.источник
JavaScript ES6 - 68 байт
Попробуйте это с помощью консоли (нажмите F12) Firefox.
источник
alert
илиconsole.log
. Консольный вывод дешев.console.log
прямым выводом. Это код-гольф, речь не идет о чистом коде.Python 2.7, 104 байта
источник
Perl, 72 байта
Использование:
Это уже дольше, чем Perl-программа primo , так что не слишком интересно.
Perl, 119 байт, для устаревшего формата IP-адреса
Использование:
Эта программа принимает устаревший формат для IP-адресов! Это включает в себя адреса с 1, 2 или 3 частями или с шестнадцатеричной или восьмеричной частями. Цитирование справочной страницы inet_addr (3) ,
Большинство программ больше не принимают этот устаревший формат, но
ping 0177.1
все еще работали в OpenBSD 5.5.источник
PHP,
138110 байтисточник
explode('.',"$a.$b")
наsplit('\.',"$a.$b")
.Mathematica 9, 108 байт
Ungolfed:
источник
PHP, 46 байт
Попробуйте онлайн!
ip2long
источник
C # - 135
Правильно отформатированный
https://dotnetfiddle.net/Q0jkdA
источник
Рубин, 93 байта
Выход
источник
J, 25 байт
Принимает IP-строки, разделенные точками, как левый и правый аргументы.
Разъяснение:
Примеры:
источник
Фактор, 73 байта
Перевод ответа CoffeeScript.
источник
Javascript ES6, 81 символ
Тест:
PS: постараюсь оптимизировать это чуть позже.
источник
Lua, 153 байта
Жаль, что у Луа нет функции разделения, я должен был определить мою!
Ungolfed
источник
Желе , 12 байтов, вызов языковых постдат
Попробуйте онлайн!
объяснение
Количество элементов в включенном диапазоне представляет собой абсолютную разницу их конечных точек плюс 1.
источник
Аксиома, 385 байт
раскрутить и проверить
источник