Escreva a função mais curta para converter um endereço IP em sua representação inteira e faça a saída como um inteiro.
Para alterar um endereço IPv4 para sua representação inteira, é necessário o seguinte cálculo:
- Divida o endereço IP em quatro octetos.
(Octet1 * 16777216) + (Octet2 * 65536) + (Octet3 * 256) + (Octet4)
Entrada de amostra
192.168.1.1 10.10.104.36 8.8.8.8
Saída de amostra
3232235777 168454180 134744072
code-golf
conversion
Kyle Rozendo
fonte
fonte
Respostas:
PHP - 21 caracteres
fonte
MySQL - 20 caracteres
fonte
Ruby (sem builtins / eval) - 47
Teste:
fonte
C: 79 caracteres
EDIT: C ++ removido, não seria compilado sem cabeçalhos; com o GCC, as chamadas de função
printf
estrtol
acionam funções internas; portanto, os cabeçalhos podem ser ignorados. Obrigado a @ugoren pelas dicas. Isso irá compilar como está sem opções adicionais paragcc
.EDIT2:
return
é realmente redundante :)fonte
Golfscript - 16 caracteres
Como um programa independente, isso é ainda mais curto aos 11 anos.
Extremamente direto. Avalia a string de entrada (
~
) e a coloca em uma matriz[]
. Como os.
s na sequência duplicam a parte superior da pilha, usamos apenas todos os outros termos na matriz (2%
). Agora temos uma matriz que basicamente representa um número 256 básico, então usamos uma função interna para fazer a conversão. (256base
)fonte
{:B;{\B*+}*}:base
(embora a função real esteja sobrecarregada para conversões da outra maneira). Interessante notar é que a conversão base para seqüências de caracteres é a mesma que matrizes (como strings são apenas matrizes sem aninhamento, mas com um formato de saída diferente).base
a minha respostaBefunge - 2x11 = 22 caracteres
Tão perto, Befunge vai ganhar um dia.
Explicação
A maior característica distintiva do Befunge é que, em vez de ser um conjunto linear de instruções, como a maioria dos idiomas; é uma grade 2D de instruções de caracteres únicos, onde o controle pode fluir em qualquer direção.
Esses caracteres mudam a direção do controle quando são atingidos, isso faz o loop principal.
Isso insere um número e o empurra para a pilha (
&
), retira os dois principais valores da pilha, os adiciona e os empurra de volta para a pilha (+
), insere um único caractere e coloca seu valor ascii na pilha (~
); coloca 1 na pilha e os adiciona (1+
).O intérprete que eu estou usando retorna -1 para o final da entrada, alguns retornam 0 para que a
1+
parte possa ser removida.O
#
faz com que o próximo caractere a ser ignorado, então os_
pops um valor fora da pilha e se ele é zero envia controle direita, caso contrário, envia-o para a esquerda. Se o valor for zero,.
um valor é retirado da pilha e o gera como um número inteiro e@
para o programa. Caso contrário,v
envia o controle para o loop de retorno.Isso simplesmente multiplica o valor superior da pilha por 256 e retorna o controle ao início.
fonte
>v<^
que é realmente o loop principal neste programa. Acho que, nesse caso, o controle não passa pelos três últimos espaços na parte inferior, mas acho mais fácil contar os programas Befunge como o menor retângulo delimitador; e se você tentar contar o fluxo de controle, terá problemas com os programas de modificação automática.Rubi (40)
->
fonte
to_i 16
comohex
para salvar alguns personagens.Ruby - 46 caracteres
fonte
Golfscript - 21 caracteres
fonte
Python
5645fonte
C ++ - muitos caracteres
fonte
PowerShell
6661Variação na resposta de Joey:
fonte
AWK em ~ 47 caracteres
Iniciante aqui ... Hum, não sei como contar isso, mas sem o 'eco' são 47 caracteres no AWK. (Não é exatamente um golfe falso, mas está no buraco.)
Dia inteiro cedo para #tbt também, então eu realmente cumpri uma agenda !!! * 8-)
Dia da bandeira.
fonte
{print $1*16777216+$2*65536+$3*256+$4}
. É claro que você precisaria mover o separador de campos para o programa, em vez de especificá-lo como um sinalizador.Bash - 46
Tabela de conteúdo
Você encontrará 4 versões de golfe diferentes:
Nova versão! 2018-11-15 Mais golfe, 46 caracteres
Explicação
$_
jogar mais golfe.${1//./ }
substituirá todos os pontos.
por espaços.
printf
vai render algo como192<<(_-=8)|168<<(_-=8)|1<<(_-=8)|1<<(_-=8)|
0
depois do último OR|
e_
para 32 . o bash lerá a construção da esquerda para a direita, então$((_-=8))
faça24
no 1º turno ,16
no segundo e assim por diante.em ação:
Por diversão: tentando obter
$_
conteúdo, depois disso:Em uma função:
ou em um loop: -> 60
bash (v4.1 +): 47
Primeiro post
Explicação:
${1//./ }
substituirá todos os pontos.
por espaços.
set --
definir parâmetros posicionais ($@=($1 $2 $3...)
)set -- ${1//./ }
será dividido$1
por pontos e set$1
,$2
,$3
e$4
se string containg3
pontos (e sem espaços).em ação:
ou em uma função:
ou em um loop: -> 61
em ação:
Outra versão com golfe diferente: 65
Amostra:
Em um loop (+14): 82
* ou um pouco mais feio: 70 *
onde
printf
dar um barbante como|192<<24 |168<<16 |1<<8|1<<24 |0<<16 |0<<8
se tivéssemos que cortar finalmente<<2...
.jogou golfe com
mapfile
mais tempo: 68ou com laço: 82
fonte
set --
parte. obrigado.set -- foo bar
irá preencher$@
com foo as$1
e bar as$2
.Windows PowerShell, 70
Abordagem ingênua:
Com o uso de System.Net.IPAddress: 76
Teste:
fonte
Befunge-93 - 36 caracteres
fonte
Perl: DIY (para oneliners.) (40)
# Use valor em $ i
Função DIY (65):
fonte
split'.'
, em vez desplit/\./
split q{.}
para contornar a necessidade de escapar citações shell: /Haskell - 14 caracteres
uso no GHCi:
O único problema é que você deve colocar espaços à esquerda ou à direita do ponto, caso contrário, os números serão interpretados como ponto flutuante.
fonte
C # - 77 caracteres
fonte
JavaScript (45 caracteres)
Requer suporte para o
.reduce()
método Array, introduzido no ES5 e nas funções de seta .fonte
Powershell,
4743 bytesScript de teste:
Resultado:
fonte
C # - 120 caracteres
Meu primeiro código de golfe - seja gentil;)
fonte
D: 84 caracteres
fonte
Python 3,2 (69)
fonte
PHP (sem builtins / eval) - 54
fonte
<?php
, não apenas<
?Perl, 14 caracteres:
fonte
Stax , 9 bytes
Execute e depure
fonte
05AB1E , 5 bytes
Experimente online!
fonte
Perl 6 , 16 bytes
Experimente online!
fonte
C (gcc)
-m32
/ POSIX, 33 bytesExperimente online!
Em uma plataforma big-endian, você poderia simplesmente definir uma macro com
-Df=inet_aton
para 13 bytes .fonte