Herausforderung
Bestimmen Sie bei einem IPv4 address
in Punkt-Vierfach-Notation und einem IPv4 subnet
in CIDR-Notation , ob das address
in der Liste steht subnet
. Geben Sie einen eindeutigen und konsistenten Wert aus, wenn er sich im befindet subnet
, und einen eindeutigen und konsistenten Wert, wenn er sich nicht im befindet subnet
. Die Ausgabewerte müssen in Ihrer Sprache nicht unbedingt wahr oder falsch sein.
Kurze Einführung in die CIDR-Subnetznotation
IPv4-Netzwerkadressen haben eine Länge von 32 Bit und sind zur Erleichterung des Lesens in vier Gruppen zu je 8 Bit unterteilt. Die CIDR-Subnetznotation ist eine Maske mit der angegebenen Anzahl von Bits, beginnend ganz links. Für ein /24
Subnetz bedeutet dies beispielsweise, dass die am weitesten rechts stehenden 8 Bits der Adresse in diesem Subnetz verfügbar sind. Somit befinden sich zwei Adressen, die durch höchstens getrennt 255
sind und dieselbe Subnetzmaske aufweisen, im selben Subnetz. Beachten Sie, dass bei einem gültigen CIDR alle Host-Bits (auf der rechten Seite) nicht gesetzt (Nullen) sind.
xxxxxxxx xxxxxxxx xxxxxxxx 00000000
^--- subnet mask ---^ ^-hosts-^
In einem anderen Beispiel gibt ein /32
Subnetz an, dass alle Bits die Subnetzmaske sind, was im Wesentlichen bedeutet, dass pro Host nur ein Host zulässig ist /32
.
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
^--- subnet mask ---^
Beispiele:
Verwenden Sie True
für "im Subnetz" und False
für "nicht im Subnetz" als Ausgabe:
127.0.0.1
127.0.0.0/24
True
127.0.0.55
127.0.0.0/23
True
127.0.1.55
127.0.0.0/23
True
10.4.1.33
10.4.0.0/16
True
255.255.255.255
0.0.0.0/0
True
127.1.2.3
127.0.0.0/24
False
127.1.2.3
127.1.2.1/32
False
10.10.83.255
10.10.84.0/22
False
Regeln und Erläuterungen
- Da das Parsen von Eingaben nicht der interessante Punkt dieser Herausforderung ist, erhalten Sie garantiert gültige IPv4-Adressen und Subnetzmasken.
- Die Ein- und Ausgabe kann auf jede bequeme Weise erfolgen .
- Sie können das Ergebnis an STDOUT drucken oder als Funktionsergebnis zurückgeben. Bitte geben Sie bei Ihrer Übermittlung an, welche Werte die Ausgabe annehmen kann.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
10.0.0.1/10.0.0.0”/16
. B. ?1.255.1.1/8
ist ein gültiger CIDR- Ausdruck , der den Host1.255.1.1
innerhalb des Netzwerks1.0.0.0
mit einer Subnetzmaske von darstellt255.0.0.0
. Allerdings fordert die Herausforderung für die Netzwerknummer und Subnetz speziell in CIDR - Notation, die1.255.1.1/8
keine gültige Netzwerknummer und Subnet - Kombination ist.Antworten:
Python 3 (62 Bytes)
Sehr einfach:
quelle
ip_adress
Objekt und einip_network
Objektany convenient method
Python gewinnen lassen, es sei denn, eine Python-basierte Golfsprache hat diese als Typ.(host^net)>>(32-mask)
ist nur 10 Bytes. Bei Aufgaben, die keine Listen enthalten, oder bei denen eine Funktion auf eine Liste abgebildet wird, liegt die Zeit jedoch in der Mitte, da viele skalare Operationen mit einem 2- oder 3-Byte-Befehl ausgeführt werden können und Schleifen innerhalb weniger Bytes erstellt werden können.C # (Visual C # -Compiler) , 250 + 31 = 281 Byte
Bytecount enthält
using System;using System.Linq;
Probieren Sie es online!
Ich schrieb dies in JS, sobald die Herausforderung veröffentlicht wurde, aber Arnauld schlug mich mit einer viel besseren Antwort, also hier ist es stattdessen in C #.
Auf jeden Fall viel Platz zum Golfen.
Erläuterung:
Die Funktion besteht aus einer Unterfunktion mit dem Namen
h
:Diese Unterfunktion teilt die IP-Adresse auf
.
, konvertiert jede Zahl in eine Binärzeichenfolge, füllt jede Zeichenfolge mit einem Links-Pad mit0
einer Länge von 8 Bit und verknüpft die Zeichenfolgen dann zu einer 32-Bit-Binärzeichenfolge.Dies erfolgt sofort an Ort und Stelle mit
a=h(a);
der angegebenen IP-Adresse.Anschließend teilen wir die Subnetzmaske in eine IP-Adresse und eine Maskennummer mit auf
c=b.Split('/');
Die IP-Adressenkomponente wird auch durch unsere Unterfunktion übergeben:
b=h(c[0]);
und die Maskennummer wird in eine Ganzzahl umgewandelt:var d=int.Parse(c[1]);
Schließlich nehmen wir die ersten
d
Bits beider Binärzeichenfolgen (wobeid
die Maskennummer ist) und vergleichen sie:return a.Substring(0,d)==b.Substring(0,d);
quelle
rPad
Saiten bereits eingebaut sind. Pastebin-Link zu TIO-Link, der zu lang istLinux POSIX-Shell (mit net-tools / iputils) (34 Bytes nicht terminierend, 47 Bytes terminierend)
Was eignet sich am besten zum Analysieren von Netzwerkmasken und -adressen als die Netzwerkdienstprogramme selbst? :)
Warnung: Das Skript kann möglicherweise Ihre Internetverbindung beschädigen. Führen Sie es mit Sorgfalt aus.
Eingabe: Das Skript verwendet die getestete IP-Adresse als erstes Argument und das getestete Subnetz. als zweites Argument.
Ausgabe: Das Skript gibt einen Wahrheitswert (0) zurück, wenn das erste Argument des Skripts zu dem im zweiten Argument angegebenen Subnetz gehört. Andernfalls wird es niemals beendet.
Annahmen: Das Skript muss als Root-Benutzer in einer sauberen Umgebung ausgeführt werden ( dh , der Administrator hat keine andere Blackhole-Route festgelegt, und wenn eine vorherige Instanz des Skripts ausgeführt wurde, wurde die von ihm erstellte Blackhole-Route entfernt ). Das Skript geht auch von einer "funktionierenden Internetverbindung" aus ( dh es liegt eine gültige Standardroute vor).
Erläuterung:
Wir erstellen eine Blackhole- Route zum angegebenen Subnetz. Anschließend testen wir die Konnektivität zur angegebenen IP-Adresse mithilfe von Ping . Wenn die Adresse nicht zum Subnetz gehört (und eine ordnungsgemäß eingerichtete Internetverbindung vorausgesetzt wird ), versucht Ping , Pakete an diese Adresse zu senden. Beachten Sie, dass es keine Rolle spielt, ob diese Adresse tatsächlich antwortet, da Ping es für immer versucht. Wenn die Adresse zum Subnetz gehört, schlägt der Ping mit ENETUNREACH fehl und gibt 2 zurück. Da wir den Befehl negiert haben, ist das Skript erfolgreich.
Beispiel
Prüfen Sie, ob 5.5.5.5 zu 8.8.8.0/24 gehört
(Reinigen Sie mit,
sudo ip route del 8.8.8.0/24
nachdem Sie den Befehl ausgeführt haben).Testen Sie, ob 5.5.5.5 zu 5.5.5.0/24 gehört:
(Reinigen Sie mit,
sudo ip route del 5.5.5.0/24
nachdem Sie den Befehl ausgeführt haben).Testen Sie, ob 8.8.8.8 zu 5.5.5.0/24 gehört:
(Reinigen Sie mit,
sudo ip route del 5.5.5.0/24
nachdem Sie den Befehl ausgeführt haben).47-Byte-Version, wenn nicht terminierende Skripte nicht zulässig sind
Laut @ Grimys Kommentar ist hier die Version, die immer endet und 0 (wahr) zurückgibt, wenn sich die Adresse im Subnetz befindet, und 1 (falsch), wenn dies nicht der Fall ist. Wir lassen Ping mit dem
-c1
Flag enden, das die Anzahl der gesendeten Pakete auf 1 begrenzt. Wenn die Adresse geantwortet hat, gibt Ping 0 zurück, und wenn nicht, gibt Ping 1 zurück. Nur wenn die Adresse zum Blackholed-Subnetz gehört, gibt Ping 2 zurück. Daran testen wir also im letzten Befehl.quelle
ping
auch, dass SIGPIPE sterben würde, wenn es mit stdout + stderr in einem anderen Programm laufen würde und der Leser die Pipe schloss. Und das ist der wahrscheinlichste Anwendungsfall, da der Beendigungsstatus in beiden Fällen erfolgreich sein kann (wenn wir eine-c1
Option zum Ping hinzugefügt haben , um die Anzahl festzulegen). Aber sicher, das Lesen der Ausgabe mitvar=$(/a.sh)
würde fehlschlagen. Sie brauchen einen Leser, der nach der Entscheidung stehen bleibt, anstatt die gesamte Ausgabe zu lesen und sie sich dann anzusehen.ping
diese bei einer Blackholed-Adresse in weniger als einer Sekunde enden werden). Ich habe eine abschließende Version für zusätzliche 13 Bytes hinzugefügt! :)JavaScript (ES6), 82 Byte
Übernimmt die Eingabe als
(address)(subnet)
. Gibt einen Booleschen Wert zurück.Probieren Sie es online!
quelle
PHP ,
1019288 Bytes-13 Bytes von @gwaugh
Probieren Sie es online!
quelle
function($i,$r){return!((ip2long($i)^ip2long(strtok($r,'/')))>>32-strtok(_));}
strtok()
. Ihre ist 4 Bytes kürzer als meine sehr ähnliche Antwort unten. Requisiten!PowerPC / PPC64 C,
116114 Bytes(Getestet unter x86_64 Ubuntu 18.04 mit powerpc64-linux-gnu-gcc -static und qemu-user.)
Das Programm nimmt die beiden Zeilen bei der Standardeingabe und gibt als Exit-Code 1 zurück, wenn die Adresse übereinstimmt, und 0, wenn dies nicht der Fall ist. (Dies hängt also von der Spezifikation ab, die keinen Wahrheitswert für eine Übereinstimmung und keinen Falschwert für eine Nichtübereinstimmung erfordert.) Beachten Sie, dass Sie bei interaktiver Ausführung
^D
nach Eingabe der zweiten Zeile dreimal EOF ( ) signalisieren müssen .Dies setzt voraus, dass PowerPC ein Big-Endian ist und dass diese Plattform 0 zurückgibt, um einen vorzeichenlosen 32-Bit-Wert um 32 nach rechts zu verschieben. Dabei werden die Oktette einzeln in vorzeichenlose Werte eingelesen, zusammen mit der Netzmaskenlänge in einem anderen Byte ; dann nimmt es das xor der beiden vorzeichenlosen 32-Bit-Adressen und verschiebt die irrelevanten Bits heraus. Schließlich gilt
!
es, die Anforderung zu erfüllen, nur zwei unterschiedliche Werte zurückzugeben.Hinweis: Es könnte möglich sein , zwei Bytes abrasieren durch Ersetzen
u+3
mitp
und erfordern Kompilierung mit-O0
. Das ist allerdings gefährlicher, als es mir wichtig ist.Vielen Dank an Peter Cordes für die Inspiration für diese Lösung.
Portableres C,
186171167 BytesHier behalte ich eine portablere Version bei, die 167 Byte lang ist.
Dieses Programm nimmt die beiden Zeilen der Standardeingabe und gibt den Exit-Code 1 zurück, wenn sich die Adresse im Subnetz befindet, und 0, wenn dies nicht der Fall ist. (Dies hängt also von der Spezifikation ab, dass für Übereinstimmungen kein Wahrheitswert und für Nichtübereinstimmungen ein Falschwert erforderlich ist.)
Eine Aufschlüsselung des Kernausdrucks:
a^e
,b^f
,c^g
,d^h
Berechnet die xor der Adresse und die Maske Byte- für -Byte.(((a^e)<<8|b^f)<<8|c^g)<<8|d^h
kombiniert sie dann nach einer Horner-ähnlichen Methode zu einem einzelnen vorzeichenlosen 32-Bit-Wert....>>32-n
verschiebt dann die Bits der xor-Differenz, die für die Subnetzmaske nicht relevant sind (wobei zu beachten ist, dass-
C eine höhere Priorität hat als<<
)~0U<<32
wird ein undefiniertes Verhalten ausgegeben, vorausgesetzt,unsigned
es sind 32 Bit (was auf praktisch allen aktuellen Plattformen der Fall ist). Wenn andererseits n = 0 istn&&...
, stimmt jede Adresse überein, sodass das richtige Ergebnis erzielt wird (unter Ausnutzung des Kurzschlussverhaltens von&&
).!
den Ausgang 0 oder 1 an.-15 Byte aufgrund von Kommentaren von ceilingcat und AdmBorkBork
-4 Bytes aufgrund eines Kommentars von Peter Cordes
quelle
unsigned
. zB mitchar*p=&a
thenp++,p++,p++,...
oderp--,...
als scanf args. Die Formatzeichenfolge müsste"%hhu.%hhu..."
allerdings so sein , dass es ein bedeutender Kompromiss zwischen dieser zusätzlichen Größe und der Angabe weniger Variablen und der Möglichkeit ist, dies zu tun(a^b)>>(32-count)
Stax , 22 Bytes
Führen Sie es aus und debuggen Sie es
Die Eingabeparameter werden bei der Standardeingabe durch Leerzeichen getrennt.
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
x86-64-Maschinencodefunktion,
5348 BytesÄnderungsprotokoll:
jz
über die Verschiebung, anstatt eine 64-Bit-Verschiebung zu verwenden, um den>>(32-0)
Sonderfall zu behandeln .setnz al
.(Siehe auch die darauf basierende 32-Bit-Maschinencode-Antwort von Daniel Schepler , die sich dann weiterentwickelte, um einige andere Ideen zu verwenden, die wir hatten. Ich füge meine neueste Version davon am Ende dieser Antwort hinzu.)
Gibt ZF = 0 für den Host zurück, der sich nicht im Subnetz befindet, und ZF = 1 für den Host im Subnetz, sodass Sie mit auf das Ergebnis verzweigen können
je host_matches_subnet
Aufrufbar mit der x86-64-System-V-Aufrufkonvention, als
bool not_in_subnet(int dummy_rdi, const char *input_rsi);
ob Sie hinzufügensetnz al
.Die Eingabezeichenfolge enthält sowohl den Host als auch das Netzwerk, getrennt durch genau 1 nichtstelliges Zeichen. Der Speicher nach dem Ende der CIDR-Breite muss vor dem Ende einer Seite mindestens 3 nicht-stellige Bytes enthalten. (Sollte in den meisten Fällen kein Problem sein, wie bei einem Cmdline-Argument.) Daniels 32-Bit-Version hat diese Einschränkung nicht.
Wir führen dieselbe gepunktete Quad-Parse-Schleife dreimal aus, ermitteln die beiden IPv4-Adressen und ermitteln die
/mask
Ganzzahl im High-Byte eines Dwords. (Aus diesem Grund muss nach dem ein lesbarer Speicher vorhanden sein/mask
, aber es spielt keine Rolle, ob ASCII-Ziffern vorhanden sind.)Wir
(host ^ subnet) >> (32-mask)
verschieben die Host-Bits (die nicht übereinstimmen dürfen), sodass nur der Unterschied zwischen dem Subnetz und dem Host übrig bleibt. Um den/0
speziellen Fall zu lösen , dass wir um 32 verschieben müssen, überspringen wir die Verschiebung bei count = 0. (neg cl
Legt ZF fest, auf das verzweigt und der Rückgabewert verwendet werden kann, wenn keine Verschiebung erfolgt.) Beachten Sie, dass bei32-mask mod 32 = -mask
x86-Skalarverschiebungen die Anzahl durch& 31
oder maskiert wird& 63
.(nicht mit der neuesten Version aktualisiert) Probieren Sie es online!
Einschließlich eines
_start
, der es aufruftargv[1]
und einen Beendigungsstatus zurückgibt.Es funktioniert einwandfrei, wenn Sie ein Befehlszeilenargument übergeben, das eine neue Zeile anstelle eines Leerzeichens enthält. Aber es muss stattdessen nicht so gut sein.
x86 32-Bit-Maschinencodefunktion, 38 Byte
Führe 9 Integer -> uint8_t-Parser aus und "push" sie auf den Stack, wo wir sie als Dwords ablegen oder den letzten, der noch in CL enthalten ist. Vermeidet es, über das Ende der Zeichenkette hinaus zu lesen.
Ist auch
dec
nur 1 Byte im 32-Bit-Modus.Anrufer testen
quelle
cmp/jcc
Ihnen erwähnten etwas wiexor edx,edx;neg cl;cmovz eax,edx;shr eax,cl
- oder vielleicht haben Sie bereits irgendwo einen 0-Wert. (Und dann würden Sie diesub cl,32
Anweisung nicht brauchen .)edi
sollte 0 sein, wenn die Schleife beendet wird,xor eax,edx;neg cl;cmovz eax,edi;shr eax,cl
sollte also funktionieren.cmove eax,edi
hat das 3 Bytes, was ein Überlauf über das entfernte ist,sub cl,32
dannshr cl,eax
spart man ein Byte übershr cl,rax
und 32-Bitdec edi
spart ein Byte über 64-Bitdec edi
. Meine Assembly gibt dann.byte 0x33
(in GNU-Binutils-Syntax) = 51 fürin_subnet.size
.shr eax,cl
, gegenübershr %cl, %eax
in AT & T - Syntax, die letzte Bemerkung , dass umgekehrt.) Es ist ein bisschen mühsam zu aktualisieren Maschinencode - Antworten (und Port den_start
Anrufer und neu beschreibt die Aufrufkonvention für 32-Bit - Modus .. .), also komme ich vielleicht nicht dran vorbei. Faul heute. >. <edi
, Schreiben der Ausgabe usw. wurden 2 Bytes gespart im Netz. (Mindestens einmal wurde mir klar, dasspush ecx;push ecx;push ecx
es kürzer war alssub esp,12
; und es schien eine Wäsche zu sein, ob ich vorab dekrementiertedi
und verwendet habestd;stosb;cld
oder ob ich nur mit aufbewahrt habedec edi;mov [edi],al
.Jelly , 23 Bytes
Probieren Sie es online!
Monadischer Link, der die durch einen Schrägstrich getrennte Adresse und das Subnetz verwendet und 1 für wahr und 0 für falsch zurückgibt.
Vielen Dank an @gwaugh für den Hinweis auf einen Fehler im Original - es konnte nicht sichergestellt werden, dass die Binärliste 32 Zeichen lang ist.
quelle
Perl 5
-Mbigint -MSocket=:all -p
, 72 BytesProbieren Sie es online!
quelle
05AB1E , 21 Bytes
Übernimmt das Subnetz vor der Adresse.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
R 120 Bytes
eine Funktion - Ich habe ".32" in das erste Glied eingefügt
w=function(a,b){f=function(x)as.double(el(strsplit(x,"[./]")));t=f(paste0(a,".32"))-f(b);sum(t[-5]*c(256^(3:0)))<2^t[5]}
und nur zum Spaß:
require("iptools");w=function(a,b)ips_in_cidrs(a,b)[[2]]
Das sind 56 Bytes
quelle
PHP ,
757371 BytesEin Auszug aus der Antwort von @Luis felipe De jesus Munoz als Standalone, der Eingaben von Kommandozeilenargumenten entgegennimmt. Ausgaben
'1'
für Truthy''
(leere Zeichenfolge) für Fasley.Probieren Sie es online!
-2 Bytes, die @Christophs kleinen Trick für entlehnen
strtok()
. Seine Antwort ist allerdings noch kürzer!quelle
x86-Montagefunktion,
4943 BytesDies geschieht hauptsächlich, um die Anfrage von Peter Cordes nach der überarbeiteten Version, die ich erstellt habe, zu erfüllen. Es kann wahrscheinlich einmal verschwinden / wenn er es in seine Antwort aufnimmt.
Diese Funktion erwartet
esi
, auf eine Eingabezeichenfolge zu verweisen, wobei die Adress- und Subnetzteile entweder durch ein Leerzeichen oder ein Zeilenumbruchzeichen getrennt sind, und der Rückgabewert im ZF-Flag (das per Definition nur zwei mögliche Werte enthält).Und der x86 Linux Wrapper Teil:
-6 Byte aufgrund des Vorschlags von Peter Cordes, den Wert in ZF zurückzugeben.
quelle
xor edx,edx
und Ersetzencmovz eax,edx
mitjz .nonzero; xor eax,eax; .nonzero:
.cmovz
gewinnt immer noch, wenn wir Konvention habenebx=0
.jz
übershr
die setz oder die ret? Wir können dassetnz
zu tauschensetz
und1
für ein Match zurückkehren, wenn das hilft. Oder sogar sagen , dass unser Rückgabewert ist ZF. Ich hätte das in meiner Antwort tun sollen. (Aber ich glaube nicht, dass wir es rechtfertigen können, dass der Aufrufer Konstanten für uns erstellt, wieebx=0
. Meine Antwort auf Tipps zum Golfen im x86 / x64-Maschinencode besagt , dass eine benutzerdefinierte Aufrufkonvention zu weit gedehnt würde.cut
einige Spalten aus der NASM Listenausgabe zu entfernen , weil alle meine Anweisungen sind kurz:nasm -felf foo.asm -l/dev/stdout | cut -b -34,$((34+6))-
. Außerdem habe ich in meinem_start
Aufrufer mov anstelle von movzx verwendet, da der Beendigungsstatus vom Low-Byte des Arg-to-Befehls stammtsys_exit()
. Der Kernel ignoriert die höheren Bytes.setnz al
nachdemcall in_subnet
in der Verpackung.call
/ istje
, anstatt das Ergebnis zu drucken oder weiterzugeben. Wie ich in den "Tipps" ausgeführt habe, tun dies einige Aufrufkonventionen für Systemaufrufe bereits im realen Leben (normalerweise mit CF = error).Java
215 211 207 202 200 199 198 190180 BytesAusgänge
true
für wahr undfalse
für falsch.Hinweis: Dies wird
long
anstelleint
der möglichen Rechtsverschiebung von 32 verwendet.Probieren Sie es online!
Dank ceilingcat 1 Byte gespart
Dank Peter Cordes 10 Bytes gespart
quelle
host ^ net
, um die zu entfernenden Bits herauszuschieben, anstatt tatsächlich eine Maske zu erstellen. Aber ich denke, Java benötigt einen Vergleich, um einen Booleschen Wert aus einer Ganzzahl zu erstellen. Vielleicht a!
, weil es keine Rolle spielt, welches von beiden Sie für welche Ausgabe produzieren. (Ich habe das OP um Klärung gebeten, ob sie beabsichtigen, 0 / nicht-Null auszuschließen, und sie haben zugesagt, dass sie die Konsequenzen dieser Formulierung kennen:long
, gehen mir einige Bytes verloren, aber ich kann das wieder wettmachen, indem ich das Ternäre entfernen und das XOR ausführen kann, wie Sie es vorschlagen. Ich überprüfe, was ich sonst noch Golf spielen kann, bevor ich etwas posteKohle , 36 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt das Subnetz als ersten Parameter und gibt
-
nur dann aus, wenn die Adresse innerhalb des Subnetzes liegt. Erläuterung:Teilen Sie das Subnetz auf
/
.Entfernen Sie die Maske und wandeln Sie sie in eine Ganzzahl um.
Übertragen Sie die Adresse auf das Array.
Teilen Sie beide Adressen auf
.
, konvertieren Sie sie in Ganzzahlen, interpretieren Sie sie als Basis 256 und verwerfen Sie die maskierten Bits.Vergleichen Sie die beiden Werte.
quelle
Japt , 26 Bytes
Versuch es
-3 Bytes dank @Shaggy!
Input ist ein Array mit 2 Elementen
[address, subnet]
. Transpiled JS unten:quelle
++
.g
Methode nervt mich; Ich kann überhaupt keinen Ausweg finden. Zumindest nicht einer, der dir ein Byte erspart.C # (Visual C # Interactive Compiler) , 187 Byte
Ich kann definitiv mehr Golf spielen.
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 134 Byte
Probieren Sie es online!
LINQ-Anweisung, die ein String-Array mit zwei Elementen als Eingabe in verwendet
[address, subnet]
Format verwendet.Jedes gepunktete Viereck wird unter Verwendung von Bitmanipulation in 32 Bits einer Länge umgewandelt. Die Bits werden um die Subnetzgröße nach rechts verschoben und Elemente werden auf Gleichheit verglichen.
Zu dem Zeitpunkt, als diese Antwort veröffentlicht wurde, gab es ein paar C # -Antworten, aber keine, die eine reine Bit-Manipulation verwendeten.
quelle
Ruby (48 Bytes)
quelle
====