Antecedentes
Inspirado por esta pregunta de Unix.SE (y, por supuesto, mi propia respuesta ).
Cuando se especifica una dirección IP para una interfaz, a menudo se proporciona en esta forma decimal con puntos:
a.b.c.d e.f.g.h
donde a.b.c.d
está la dirección real y e.f.g.h
es la máscara de red.
La máscara de red, cuando se representa en binario, es básicamente un montón de 1
bits seguidos de un montón de 0
bits. Cuando la máscara de red se ANDA bit a bit contra la dirección IP dada, el resultado será la porción de red de la dirección, o simplemente la dirección de red . Esto se programará en la tabla de rutas del host para que el host sepa enviar todo lo destinado a esta red a través de esta interfaz.
La dirección de transmisión para una red se obtiene tomando la dirección de red (desde arriba) y configurando todos los bits de host en 1. La dirección de transmisión se usa para enviar a todas las direcciones dentro de la red dada.
Desafío
Dada una dirección IP decimal con puntos y una máscara de red válida como entrada, proporcione la dirección de red y la dirección de difusión como salida, también en formato decimal con puntos.
- La entrada debe ser dirección y máscara como dos cadenas en formato decimal con puntos. Puede pasar esto como 2 cadenas separadas, como una lista o matriz de 2 elementos de cadena o una sola cadena con la dirección y la máscara separadas por algún separador sensible.
- El formato de salida está sujeto a las mismas restricciones que el formato de entrada.
Ejemplos
Input Output
192.168.0.1 255.255.255.0 192.168.0.0 192.168.0.255
192.168.0.0 255.255.255.0 192.168.0.0 192.168.0.255
192.168.0.255 255.255.255.0 192.168.0.0 192.168.0.255
100.200.100.200 255.255.255.255 100.200.100.200 100.200.100.200
1.2.3.4 0.0.0.0 0.0.0.0 255.255.255.255
10.25.30.40 255.252.0.0 10.24.0.0 10.27.255.255
fuente
252
en él.10.24.0.0 10.27.255.255
?Respuestas:
JavaScript (ES6), 92 bytes
Explicación
Prueba
Mostrar fragmento de código
fuente
MATL , 47 bytes
Esta respuesta usa la versión actual (4.0.0) del idioma.
Ejemplo
Explicación
fuente
Pyth,
4442 bytesPruébalo en línea. Banco de pruebas.
Espera la entrada como una matriz, como
["10.25.30.40", "255.252.0.0"]
.fuente
PHP, 126 bytes
Con entrada en $ n:
Hexdump:
Y una versión más legible:
preg_filter
requiere una sola declaración en el patrón de reemplazo cuando se usa lae
bandera, por lo que 'agrego' el resultado de los cálculos a los valores 5 y superiores de $ a, porque nunca se reutilizan.fuente
Perl,
9085 bytesincluye +6 para
-pF/\D/
Uso:
Más legible:
El
-F/\D/
divide la entrada a los no dígitos y lo almacena en@F
.fuente
Factor, 103 bytes
Agradable.
Sin golf:
fuente
PHP , 74 bytes
Como independiente, la entrada es a través de la línea de comando:
Pruébalo en línea!
O como una función, 80 bytes :
Pruébalo en línea!
Sin golf
PHP tiene buenas incorporaciones (aunque con nombres de funciones largos) para manejar la cadena de puntos IPv4 a binario y viceversa.
Salida
fuente