Inspirado por...
Redes: ¿cómo puedo calcular cuántas direcciones IP hay en un rango determinado?
Escriba un programa o función que tome dos cadenas como entrada, cada una de las cuales es una dirección IPv4 expresada en notación punteada estándar y genera o devuelve el número de direcciones IP cubiertas por este rango, incluidas las dos entradas de direcciones IP.
- No debe usar ningún código externo, bibliotecas o servicios diseñados para analizar una dirección IP. (Se aceptan otras funciones de biblioteca estándar de procesamiento de cadenas).
- Todas las 2 ^ 32 direcciones IP son iguales. No se hace distinción para transmitir, clase E, etc.
- Se aplican reglas normales de código de golf.
Por ejemplo:
"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.
Respuestas:
GolfScript, 20 bytes
Pruébalo en línea.
Casos de prueba
Cómo funciona
fuente
$
para evitarabs
.~]
También es muy inteligente.Python 2 - 106
Véalo aquí .
Entrada de ejemplo
Salida de ejemplo
fuente
def a():return reduce(lambda c,d:c*256+d,map(int,raw_input().split(".")))
es mucho más cortoa=lambda:
en lugar dedef a():return
guarda 6 caracteresCJam - 15
Pruébalo en http://cjam.aditsu.net/
Gracias Dennis, wow, no sé cómo sacar lo mejor de mi propio idioma: p
fuente
:i
(b
parece convertir a entero) y uno usando en{r...}2*
lugar deqS/{...}/
Bash puro, 66 bytes
Notas:
p
que pasa una dirección IP decimal con puntos y genera la representación hexadecimal de esa dirección:${1//./ }
es una expansión de parámetros que reemplaza.
conen la dirección IP pasada a
p()
printf
mayoría se explica por sí misma. Como solo hay un especificador de formato%02x
y cuatro argumentos restantes, el especificador de formato se reutiliza para cada argumento restante, concatenando efectivamente los 2 dígitos hexadecimales de cada uno de los 4 octetos juntos$[]
causa expansión aritmética. Hacemos una resta básica y asignamos a la variabler
${r/-}
es una expansión de parámetros para eliminar un posible-
personaje - efectivamente abs ()Salida:
fuente
printf
yecho
. ¿Son parte de esobash
?Python 2.7 -
9691 919087Hecho una función.
Uso:
Editar: eliminado innecesario
int()
de laf
función. Gracias a isaacgEdit2: Eliminado
LF
al final del archivo (gracias a @Rusher) y eliminadomap()
al costo delreduce()
inicializador (gracias a @ njzk2)fuente
,0
parámetros a su función de reducción)GolfScript, 27 bytes
Ejemplos:
fuente
/
lugar de%~
.CoffeeScript -
94,92,7972Sin golf :
JavaScript equivalente :
Pruébalo en línea .
fuente
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
, pero no puedo encontrar nada más corto.(z>0)*z||-z
es el mejor que tengo (misma longitud, y necesita una entrada de un solo carácter). ¿Tienes algo más inteligente que eso?dc, 61 caracteres
Creo que es bastante sorprendente que esto se pueda resolver con DC ya que no tiene la capacidad de analizar cadenas. El truco es que 192.168.123.185 va a la pila como
y
dXIr^*
desplaza el punto decimal a la derecha tantos dígitos de fracción como haya e incluso funciona para .100.Reste un carácter si deja que la entrada ya esté en la pila.
fuente
Powershell -
1121089278 bytesEsta es mi primera vez jugando al golf. Aquí va nada:
Golfizado (antiguo):
Golfizado (nuevo)
Sin golf:
Uso
Guardar como archivo (en este caso getipamount.ps1) y luego llamar desde la consola
fuente
C # con LINQ - 139 bytes
(A partir de 140 después de aplicar la sugerencia de Bob).
Ungolfed ...
https://dotnetfiddle.net/XPTDlt
fuente
a.b.c.d
es equivalente a(a << 24) | (b << 16) | (c << 8) | (d << 0)
es equivalente a(((a << 8) << 8) << 8) + ((b << 8) << 8) + (c << 8) + d)
. Básicamente, cada iteración de la agregación toma la suma existente y la desplaza a la izquierda un octeto, luego agrega el siguiente octeto.c*256
lugar de(c<<8)
.e-f
cone<f?f-e:e-f
y soltando elMath.Abs()
Perl, 43 bytes
Contando el shebang como dos bytes.
Uso de muestra:
Notas
vec eval,0,32
es un drop-in paraip2long
. Perl permite que los literales de caracteres se expresen como su ordinal prefijado con unv
, por ejemplo,v0
se puede usar para el carácter nulo. Estos también se pueden encadenar juntos, por ejemplov65.66.67.68
→ABCD
. Cuando hay tres o más valores, la inicialv
es innecesaria. Lavec
función interpreta una cadena como una matriz entera, cada celda tiene el número especificado de bits (aquí, 32).unpack N,eval
habría funcionado igualmente también.fuente
JavaScript ES6 - 68 bytes
Pruébelo con la consola (presione F12) de Firefox.
fuente
alert
oconsole.log
. La salida de la consola es barata.console.log
y salida directa. Esto es código golf, no se trata de hacer código limpio.Python 2.7, 104 bytes
fuente
Perl, 72 bytes
Uso:
Esto ya es más largo que el programa Perl de primo , por lo que no es demasiado interesante.
Perl, 119 bytes, para formato de dirección IP obsoleto
Uso:
¡Este programa acepta el formato obsoleto para las direcciones IP! Esto incluye direcciones con 1, 2 o 3 partes, o con partes hexadecimales u octales. Citando la página del manual inet_addr (3) ,
La mayoría de los programas ya no aceptan este formato obsoleto, pero
ping 0177.1
aún funcionan en OpenBSD 5.5.fuente
PHP,
138110 bytesfuente
explode('.',"$a.$b")
porsplit('\.',"$a.$b")
.Mathematica 9, 108 bytes
Sin golf:
fuente
PHP, 46 bytes
Pruébalo en línea!
ip2long
fuente
C # - 135
Formateado adecuadamente
https://dotnetfiddle.net/Q0jkdA
fuente
Rubí, 93 bytes
Salida
fuente
J, 25 bytes
Toma las cadenas de IP de cuatro puntos como argumentos izquierdo y derecho.
Explicado:
Ejemplos:
fuente
Factor, 73 bytes
Traducción de la respuesta CoffeeScript.
fuente
Javascript ES6, 81 caracteres
Prueba:
PD: Intentaré optimizarlo un poco más tarde.
fuente
Lua, 153 bytes
Es una pena que lua no tenga una función dividida, ¡tuve que definir la mía!
Sin golf
fuente
Jelly , 12 bytes, desafío de fechas posteriores al idioma
Pruébalo en línea!
Explicación
El número de elementos en un rango inclusivo es la diferencia absoluta de sus puntos finales, más 1.
fuente
Axioma, 385 bytes
deshazte de él y prueba
fuente