Écrivez la fonction la plus courte pour convertir une adresse IP en sa représentation entière et la sortir sous forme d'entier.
Pour changer une adresse IPv4 en sa représentation entière, le calcul suivant est requis:
- Divisez l'adresse IP en quatre octets.
(Octet1 * 16777216) + (Octet2 * 65536) + (Octet3 * 256) + (Octet4)
Exemple d'entrée
192.168.1.1 10.10.104.36 8.8.8.8
Exemple de sortie
3232235777 168454180 134744072
code-golf
conversion
Kyle Rozendo
la source
la source
Réponses:
PHP - 21 caractères
la source
MySQL - 20 caractères
la source
Ruby (pas intégré / eval) - 47
Tester:
la source
C: 79 caractères
EDIT: supprimé C ++, ne compilerait pas sans en-têtes; avec GCC, les appels de fonction
printf
etstrtol
déclenchent des fonctions intégrées, donc les en-têtes peuvent être ignorés. Merci à @ugoren pour les conseils. Cela se compilera tel quel sans options supplémentaires pourgcc
.EDIT2:
return
est en fait redondant :)la source
Golfscript - 16 caractères
En tant que programme autonome, il est encore plus court à 11.
Extrêmement simple. Évalue la chaîne d'entrée (
~
) et la place dans un tableau[]
. Puisque les.
s dans la chaîne dupliquent le haut de la pile, nous ne prenons que tous les autres termes dans le tableau (2%
). Nous avons maintenant un tableau qui représente essentiellement un nombre de base 256, nous utilisons donc une fonction intégrée pour effectuer la conversion. (256base
).la source
{:B;{\B*+}*}:base
(bien que la fonction réelle soit surchargée pour les conversions dans l'autre sens). Il est intéressant de noter que la conversion de base pour les chaînes est la même que pour les tableaux (car les chaînes ne sont que des tableaux sans imbrication, mais avec un format de sortie différent).base
pour ma réponseBefunge - 2x11 = 22 caractères
Si proche, Befunge gagnera un jour.
Explication
La plus grande caractéristique distinctive de Befunge est qu'au lieu d'être un ensemble linéaire d'instructions comme la plupart des langues; c'est une grille 2D d'instructions à caractère unique, où le contrôle peut circuler dans n'importe quelle direction.
Ces personnages changent la direction du contrôle lorsqu'ils sont touchés, cela fait la boucle principale.
Cela entre un nombre et le pousse sur la pile (
&
), fait sortir les deux premières valeurs de la pile, les ajoute et les repousse sur la pile (+
), entre un seul caractère et place sa valeur ascii sur la pile (~
), puis pousse 1 sur la pile et les ajoute (1+
).L'interpréteur que j'ai utilisé renvoie -1 pour la fin de l'entrée, certains renvoient 0 à la place afin que la
1+
partie puisse être supprimée pour eux.Le
#
fait sauter le caractère suivant, puis le_
saute une valeur de la pile et s'il est nul envoie le contrôle à droite, sinon il le laisse à gauche. Si la valeur était zéro,.
une valeur est supprimée de la pile et sortie sous forme d'entier et@
arrête le programme. Sinon,v
envoie le contrôle à la boucle de retour.Cela multiplie simplement la valeur supérieure de la pile par 256 et renvoie le contrôle au début.
la source
>v<^
qui est en fait la boucle principale de ce programme. Je suppose que dans ce cas, le contrôle ne passe pas réellement par ces 3 derniers espaces en bas, mais je trouve qu'il est plus facile de compter les programmes Befunge comme le plus petit rectangle englobant; et si vous deviez essayer de compter le flux de contrôle, vous avez des problèmes avec les programmes auto-modifiables.Rubis (40)
->
la source
to_i 16
quehex
pour enregistrer quelques caractères.Rubis - 46 caractères
la source
Golfscript - 21 caractères
la source
Python
5645la source
C ++ - beaucoup de caractères
la source
PowerShell
6661Variation sur la réponse de Joey:
la source
AWK en ~ 47 caractères
Débutant ici ... Hum, je ne sais pas comment compter cela, mais sans l '"écho", c'est 47 caractères dans AWK. (Pas exactement le golf de bogey, mais c'est dans le trou.)
Journée complète tôt pour #tbt, aussi, j'ai donc respecté un calendrier !!! * 8-)
Jour de la bannière.
la source
{print $1*16777216+$2*65536+$3*256+$4}
. Bien sûr, vous devez déplacer le séparateur de champs dans le programme, plutôt que de le spécifier comme indicateur.Coup - 46
Table des matières
Vous trouverez 4 versions golfées différemment:
Nouvelle version! 2018-11-15 Plus de golf, 46 car.
Explication
$_
pour plus de golf.${1//./ }
remplacera tous les points.
par des espaces.
printf
va donc rendre quelque chose comme192<<(_-=8)|168<<(_-=8)|1<<(_-=8)|1<<(_-=8)|
0
dernier OU|
et_
à 32 . bash lira la construction de gauche à droite, donc$((_-=8))
faites24
au 1er quart de travail ,16
au deuxième, et ainsi de suite.en action:
Pour le plaisir: essayer d'obtenir du
$_
contenu, après cela:Dans une fonction:
ou en boucle: -> 60
bash (v4.1 +): 47
Premier poste
Explication:
${1//./ }
remplacera tous les points.
par des espaces.
set --
définir les paramètres de position ($@=($1 $2 $3...)
)set -- ${1//./ }
sera divisé$1
par points et ensemble$1
,$2
,$3
et$4
si la chaîne containg3
points (sans espace).en action:
ou dans une fonction:
ou en boucle: -> 61
en action:
Une autre version a joué différemment: 65
Échantillon:
En boucle (+14): 82
* ou un peu plus moche: 70 *
où
printf
donner une chaîne comme|192<<24 |168<<16 |1<<8|1<<24 |0<<16 |0<<8
nous devons enfin couper<<2...
.golfé avec
mapfile
, plus: 68ou avec boucle: 82
la source
set --
partie. Merci.set -- foo bar
va remplir$@
avec foo comme$1
et bar comme$2
.Windows PowerShell, 70
Approche naïve:
Avec l'utilisation de System.Net.IPAddress: 76
Tester:
la source
Befunge-93 - 36 personnages
la source
Perl: DIY (pour oneliners.) (40)
# Utilisez la valeur en $ i
Fonction bricolage (65):
la source
split'.'
plutôt quesplit/\./
split q{.}
de contourner le besoin d'échapper aux citations du shell: /Haskell - 14 caractères
utilisation dans GHCi:
Le seul problème est que vous devez mettre des espaces à gauche ou à droite du point, sinon les nombres seront interprétés comme des virgules flottantes.
la source
C # - 77 caractères
la source
JavaScript (45 caractères)
Nécessite la prise en charge de la
.reduce()
méthode Array introduite dans ES5 et des fonctions fléchées .la source
Powershell,
4743 octetsScript de test:
Production:
la source
C # - 120 caractères
Mon premier golf de code - soyez doux;)
la source
D: 84 caractères
la source
Python 3.2 (69)
la source
PHP (pas de builds / eval) - 54
la source
<?php
, pas seulement<
?Perl, 14 caractères:
la source
Stax , 9 octets
Exécuter et déboguer
la source
05AB1E , 5 octets
Essayez-le en ligne!
la source
Perl 6 , 16 octets
Essayez-le en ligne!
la source
C (gcc)
-m32
/ POSIX, 33 octetsEssayez-le en ligne!
Sur une plate - forme big-endian, vous pouvez définir simplement une macro avec
-Df=inet_aton
pour 13 octets .la source