fundo
Inspirado por essa pergunta do Unix.SE (e, claro, minha própria resposta ).
Quando um endereço IP é especificado para uma interface, geralmente é fornecido na forma decimal com pontos:
a.b.c.d e.f.g.h
onde a.b.c.d
é o endereço real e e.f.g.h
é a máscara de rede.
A máscara de rede, quando representada em binário, é basicamente um monte de 1
bits seguido por um monte de 0
bits. Quando a máscara de rede é AND bit a bit no endereço IP fornecido, o resultado será a parte da rede do endereço ou simplesmente o endereço de rede . Isso será programado na tabela de rotas do host para que o host saiba enviar qualquer coisa destinada a esta rede por essa interface.
O endereço de broadcast de uma rede é obtido pegando o endereço de rede (de cima) e configurando todos os bits do host como 1. O endereço de broadcast é usado para enviar a todos os endereços dentro da rede especificada.
Desafio
Dado um endereço IP decimal com pontos e uma máscara de rede válida como entrada, forneça o endereço de rede e o endereço de broadcast como saída, também no formato decimal com pontos.
- A entrada deve ser endereço e máscara como duas cadeias de caracteres no formato decimal com pontos. Você pode passar isso como 2 cadeias separadas, como lista ou matriz de 2 elementos de cadeia ou uma única cadeia com o endereço e a máscara separados por algum separador sensível.
- O formato de saída está sujeito às mesmas restrições que o formato de entrada.
Exemplos
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
fonte
252
nele.10.24.0.0 10.27.255.255
?Respostas:
JavaScript (ES6), 92 bytes
Explicação
Teste
Mostrar snippet de código
fonte
MATL , 47 bytes
Esta resposta usa a versão atual (4.0.0) do idioma.
Exemplo
Explicação
fonte
Pitão,
4442 bytesExperimente online. Suíte de teste.
Espera a entrada como uma matriz, como
["10.25.30.40", "255.252.0.0"]
.fonte
PHP, 126 bytes
Com entrada em $ n:
Hexdump:
E uma versão mais legível:
preg_filter
requer uma única declaração no padrão de substituição ao usar oe
sinalizador, portanto, 'anexo' o resultado dos cálculos aos valores 5 e superior de $ a, porque esses nunca são reutilizados.fonte
Perl,
9085 bytesinclui +6 para
-pF/\D/
Uso:
Mais legível:
O
-F/\D/
divide a entrada na não-dígitos e armazena em@F
.fonte
Fator, 103 bytes
Agradável.
Ungolfed:
fonte
PHP , 74 bytes
Como autônoma, a entrada é via linha de comando:
Experimente online!
Ou como uma função, 80 bytes :
Experimente online!
Ungolfed
O PHP possui ótimos (embora com nomes de funções longos) embutidos para manipular a cadeia de caracteres pontilhada IPv4 para binária e vice-versa.
Resultado
fonte