Inspiré par...
Réseau - Comment puis-je déterminer le nombre d'adresses IP dans une plage donnée?
Écrivez un programme ou une fonction qui prend deux chaînes en entrée, chacune étant une adresse IPv4 exprimée en notation pointillée standard et génère ou renvoie le nombre d'adresses IP couvertes par cette plage, y compris les deux adresses IP entrées.
- Vous ne devez pas utiliser de code externe, de bibliothèques ou de services conçus pour analyser une adresse IP. (D'autres fonctions de bibliothèque standard de traitement de chaîne sont acceptables.)
- Toutes les adresses IP 2 ^ 32 sont égales. Aucune distinction n'est faite pour la diffusion, la classe E, etc.
- Les règles normales du code-golf s'appliquent.
Par exemple:
"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.
Réponses:
GolfScript, 20 octets
Essayez-le en ligne.
Cas de test
Comment ça marche
la source
$
à éviterabs
.~]
est aussi très intelligent.Python 2-106
Voyez-le ici .
Exemple d'entrée
Exemple de sortie
la source
def a():return reduce(lambda c,d:c*256+d,map(int,raw_input().split(".")))
est beaucoup plus courta=lambda:
au lieu dedef a():return
sauvegarde 6 caractèresCJam - 15
Essayez-le sur http://cjam.aditsu.net/
Merci Dennis, wow, je ne sais pas comment tirer le meilleur parti de ma propre langue: p
la source
:i
(b
semble convertir en entier) et un en utilisant à la{r...}2*
place deqS/{...}/
Pure bash, 66 octets
Remarques:
p
laquelle est passée une adresse IP décimale en pointillés et génère la représentation hexadécimale de cette adresse:${1//./ }
est une extension de paramètre qui remplace.
parl'adresse IP transmise à
p()
printf
est principalement explicite. Puisqu'il n'y a qu'un spécificateur de format%02x
et quatre arguments restants, le spécificateur de format est réutilisé pour chaque argument restant, concaténant efficacement les 2 chiffres hexadécimaux de chacun des 4 octets ensemble$[]
provoque une expansion arithmétique. Nous faisons une soustraction de base et affectons à la variabler
${r/-}
est une extension de paramètre pour supprimer un-
caractère possible - effectivement abs ()Sortie:
la source
printf
etecho
. Cela fait-il partie debash
?Python 2.7 -
96919087Fait une fonction.
Usage:
Modifier: Suppression inutile
int()
de laf
fonction. Merci à isaacgEdit2: supprimé
LF
à la fin du fichier (grâce à @Rusher) et supprimémap()
au prix de l'reduce()
initialisation (merci à @ njzk2)la source
,0
paramètre à votre fonction de réduction)GolfScript, 27 octets
Exemples:
la source
/
au lieu de%~
.CoffeeScript -
94,92,79, 72Non-golfé :
JavaScript équivalent :
Essayez-le en ligne .
la source
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
J'ai l' impression de perdre beaucoup d'espace , mais je ne peux rien proposer de plus court.(z>0)*z||-z
est le meilleur que j'ai (même longueur, et il a besoin d'une entrée à un seul caractère). Avez-vous quelque chose de plus intelligent que ça?dc, 61 caractères
Je pense que c'est assez étonnant que cela puisse être résolu avec dc car il n'a pas la capacité d'analyser les chaînes. L'astuce est que 192.168.123.185 va sur la pile comme
et
dXIr^*
déplace la virgule décimale vers la droite autant de chiffres de fraction qu'il y a et cela fonctionne même pour .100.Soustrayez un caractère si vous laissez l'entrée déjà sur la pile.
la source
Powershell -
1121089278 bytesC'est ma première fois au golf. Rien ne va ici:
Golfé (ancien):
Golfé (nouveau)
Ungolfed:
Usage
Enregistrez en tant que fichier (dans ce cas getipamount.ps1), puis appelez à partir de la console
la source
C # avec LINQ - 139 octets
(À partir de 140 après avoir appliqué la suggestion de Bob.)
Non golfé ....
https://dotnetfiddle.net/XPTDlt
la source
a.b.c.d
est équivalent à(a << 24) | (b << 16) | (c << 8) | (d << 0)
est équivalent à(((a << 8) << 8) << 8) + ((b << 8) << 8) + (c << 8) + d)
. Fondamentalement, chaque itération de l'agrégation prend la somme existante et la décale d'un octet vers la gauche, puis ajoute l'octet suivant.c*256
place de(c<<8)
.e-f
avece<f?f-e:e-f
et laisser tomber leMath.Abs()
Perl, 43 octets
Compter le shebang comme deux octets.
Exemple d'utilisation:
Remarques
vec eval,0,32
est un rendez-vous pourip2long
. Perl permet aux littéraux de caractères d'être exprimés sous la forme d'un préfixe ordinal avec av
, par exemple,v0
peut être utilisé pour le caractère nul. Ceux-ci peuvent également être enchaînés ensemble, par exemplev65.66.67.68
→ABCD
. Lorsque trois valeurs ou plus sont présentes, l'initialev
n'est pas nécessaire. Lavec
fonction interprète une chaîne comme un tableau d'entiers, chaque cellule ayant le nombre spécifié de bits (ici, 32).unpack N,eval
aurait également fonctionné.la source
JavaScript ES6 - 68 octets
Essayez-le avec la console (appuyez sur F12) de Firefox.
la source
alert
ouconsole.log
. La sortie de la console est bon marché.console.log
et sortie directe. C'est du code-golf, il ne s'agit pas de faire du code propre.Python 2.7, 104 octets
la source
Perl, 72 octets
Usage:
C'est déjà plus long que le programme Perl de primo , donc pas trop intéressant.
Perl, 119 octets, pour un format d'adresse IP obsolète
Usage:
Ce programme accepte le format obsolète des adresses IP! Cela inclut les adresses avec 1, 2 ou 3 parties, ou avec des parties hexadécimales ou octales. Citant la page de manuel inet_addr (3) ,
La plupart des programmes n'acceptent plus ce format obsolète, mais
ping 0177.1
fonctionnaient toujours dans OpenBSD 5.5.la source
PHP,
138110 octetsla source
explode('.',"$a.$b")
parsplit('\.',"$a.$b")
.Mathematica 9, 108 octets
Ungolfed:
la source
PHP, 46 octets
Essayez-le en ligne!
ip2long
la source
C # - 135
Bien formaté
https://dotnetfiddle.net/Q0jkdA
la source
Rubis, 93 octets
Sortie
la source
J, 25 octets
Prend les chaînes IP à quatre points comme arguments gauche et droit.
A expliqué:
Exemples:
la source
Facteur, 73 octets
Traduction de la réponse CoffeeScript.
la source
Javascript ES6, 81 caractères
Tester:
PS: je vais essayer de l'optimiser un peu plus tard.
la source
Lua, 153 octets
Dommage que lua n'ait pas de fonction split, j'ai dû définir la mienne!
Ungolfed
la source
Gelée , 12 octets, défi de postdates de langue
Essayez-le en ligne!
Explication
Le nombre d'éléments dans une plage inclusive est la différence absolue de leurs points d'extrémité, plus 1.
la source
Axiome, 385 octets
dé-golfer et tester
la source