Inspirado por...
Rede - Como posso calcular quantos endereços IP existem em um determinado intervalo?
Escreva um programa ou função que use duas cadeias de caracteres como entrada, cada uma sendo um endereço IPv4 expresso em notação pontilhada padrão e produz ou retorna o número de endereços IP cobertos por esse intervalo, incluindo as duas entradas de endereços IP.
- Você não deve usar nenhum código externo, bibliotecas ou serviços projetados para analisar um endereço IP. (Outras funções da biblioteca padrão de processamento de string são aceitáveis.)
- Todos os 2 ^ 32 endereços IP são iguais. Nenhuma distinção é feita para transmissão, classe E etc.
- Aplicam-se regras normais de código-golfe.
Por exemplo:
"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.
Respostas:
GolfScript, 20 bytes
Experimente online.
Casos de teste
Como funciona
fonte
$
evitarabs
.~]
também é realmente inteligente.Python 2-106
Veja aqui .
Exemplo de entrada
Saída de exemplo
fonte
def a():return reduce(lambda c,d:c*256+d,map(int,raw_input().split(".")))
é muito menora=lambda:
em vez dedef a():return
salva 6 caracteresCJam - 15
Experimente em http://cjam.aditsu.net/
Obrigado Dennis, uau, não sei como tirar o melhor proveito do meu próprio idioma: p
fonte
:i
(b
parece elenco para inteiro) e um usando{r...}2*
em vez deqS/{...}/
Festa pura, 66 bytes
Notas:
p
que recebe um endereço IP decimal pontilhado e gera a representação hexadecimal desse endereço:${1//./ }
é uma expansão de parâmetro que substitui.
porno endereço IP passado para
p()
printf
é principalmente auto-explicativo. Como existe apenas um especificador de formato%02x
e quatro args restantes, o especificador de formato é reutilizado para cada arg restante, concatenando efetivamente os 2 dígitos hexadecimais de cada um dos 4 octetos juntos$[]
causa expansão aritmética. Fazemos uma subtração básica e atribuímos à variávelr
${r/-}
é uma expansão de parâmetro para remover um-
caractere possível - efetivamente abs ()Saída:
fonte
printf
eecho
. Isso faz partebash
?Python 2.7 -
96919087Fez uma função.
Uso:
Edit: Removido desnecessariamente
int()
daf
função. Graças a isaacgEdit2: removido
LF
no final do arquivo (graças a @Rusher) e removidomap()
ao custo doreduce()
inicializador (graças a @ njzk2)fonte
,0
parâmetro para sua função de reduzir)GolfScript, 27 bytes
Exemplos:
fonte
/
vez de%~
.CoffeeScript -
94,92,7972Sem golfe :
JavaScript equivalente :
Experimente online .
fonte
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
, mas não consigo pensar em nada mais curto.(z>0)*z||-z
é o melhor que eu tenho (mesmo comprimento e precisa de uma entrada de caractere único). Você tem algo mais inteligente que isso?dc, 61 caracteres
Eu acho incrível que isso possa ser resolvido com dc, uma vez que não tem capacidade de analisar seqüências de caracteres. O truque é que 192.168.123.185 entra na pilha como
e
dXIr^*
desloca o ponto decimal para a direita quantos dígitos de fração houver e até funciona para 0,100.Subtraia um caractere se você deixar a entrada já estar na pilha.
fonte
Powershell -
1121089278 bytesEsta é a minha primeira vez jogando golfe. Aqui vai nada:
Golfe (Antigo):
Golfe (novo)
Ungolfed:
Uso
Salve como arquivo (neste caso, getipamount.ps1) e depois ligue do console
fonte
C # com LINQ - 139 bytes
(A partir de 140 depois de aplicar a sugestão de Bob.)
Ungolfed ....
https://dotnetfiddle.net/XPTDlt
fonte
a.b.c.d
é equivalente a(a << 24) | (b << 16) | (c << 8) | (d << 0)
é equivalente a(((a << 8) << 8) << 8) + ((b << 8) << 8) + (c << 8) + d)
. Basicamente, cada iteração da agregação pega a soma existente e a desloca para a esquerda em um octeto, depois adiciona o próximo octeto.c*256
vez de(c<<8)
.e-f
come<f?f-e:e-f
e soltando aMath.Abs()
Perl, 43 bytes
Contando o shebang como dois bytes.
Uso da amostra:
Notas
vec eval,0,32
é um exemplo paraip2long
. O Perl permite que os literais de caracteres sejam expressos como seu prefixo ordinal com av
, por exemplo,v0
pode ser usado para o caractere nulo. Estes também podem ser encadeados, por exemplov65.66.67.68
→ABCD
. Quando três ou mais valores estão presentes, a inicialv
é desnecessária. Avec
função interpreta uma string como uma matriz inteira, cada célula com o número especificado de bits (aqui, 32).unpack N,eval
teria funcionado igualmente também.fonte
JavaScript ES6 - 68 bytes
Experimente com o console (pressione F12) do Firefox.
fonte
alert
ouconsole.log
. A saída do console é barata.console.log
e saída direta. Isso é código-golfe, não se trata de código limpo.Python 2.7, 104 bytes
fonte
Perl, 72 bytes
Uso:
Isso já é mais longo que o programa Perl do primo , então não é muito interessante.
Perl, 119 bytes, para formato de endereço IP obsoleto
Uso:
Este programa aceita o formato obsoleto para endereços IP! Isso inclui endereços com 1, 2 ou 3 partes ou com partes hexadecimal ou octal. Citando a página de manual inet_addr (3) ,
Muitos programas não aceitam mais esse formato obsoleto, mas
ping 0177.1
ainda funcionam no OpenBSD 5.5.fonte
PHP,
138110 bytesfonte
explode('.',"$a.$b")
porsplit('\.',"$a.$b")
.Mathematica 9, 108 bytes
Ungolfed:
fonte
PHP, 46 bytes
Experimente online!
ip2long
fonte
C # - 135
Devidamente formatado
https://dotnetfiddle.net/Q0jkdA
fonte
Ruby, 93 bytes
Saída
fonte
J, 25 bytes
Aceita as seqüências IP de quatro pontos como argumentos à esquerda e à direita.
Explicado:
Exemplos:
fonte
Fator, 73 bytes
Tradução da resposta do CoffeeScript.
fonte
Javascript ES6, 81 caracteres
Teste:
PS: Vou tentar otimizá-lo um pouco mais tarde.
fonte
Lua, 153 bytes
É uma pena que lua não tenha uma função dividida, tive que definir a minha!
Ungolfed
fonte
Geléia , 12 bytes, desafio pós-datas de idiomas
Experimente online!
Explicação
O número de elementos em um intervalo inclusivo é a diferença absoluta de seus pontos de extremidade, mais 1.
fonte
Axioma, 385 bytes
ungolf-lo e testar
fonte