একটি আইপি ঠিকানা মাস্ক করুন এবং এর সম্প্রচার দিন


12

পটভূমি

এই ইউনিক্স.এসই প্রশ্ন থেকে অনুপ্রাণিত (এবং অবশ্যই আমার নিজের উত্তর )।

যখন কোনও ইন্টারফেসের জন্য একটি আইপি ঠিকানা নির্দিষ্ট করা থাকে, তখন প্রায়শই এটি বিন্দুযুক্ত দশমিক আকারে দেওয়া হয়:

a.b.c.d e.f.g.h

a.b.c.dআসল ঠিকানাটি কোথায় এবং e.f.g.hনেটমাস্ক।

নেটমাস্ক, যখন বাইনারিতে উপস্থাপিত হয়, মূলত 1বিটের একটি গুচ্ছ হয় তারপরে বিটের একটি গুচ্ছ হয় 0। নেটমাস্কটি প্রদত্ত আইপি ঠিকানার বিপরীতে যখন অ্যান্ডয়েড হয়, তখন ফলাফলটির ঠিকানায় নেটওয়ার্কের অংশ বা কেবলমাত্র নেটওয়ার্ক ঠিকানা হবে । এটি হোস্টের রুট টেবিলের মধ্যে প্রোগ্রাম করা হবে যাতে হোস্ট হোস্টটি এই ইন্টারফেসটির বাইরে এই নেটওয়ার্কটির জন্য নির্ধারিত কিছু পাঠাতে জানতে পারে।

কোনও নেটওয়ার্কের সম্প্রচারের ঠিকানাটি নেটওয়ার্কের ঠিকানাটি (উপরে থেকে) নেওয়া এবং সমস্ত হোস্ট-বিটকে 1 এ সেট করে নেওয়া হয় ব্রডকাস্ট ঠিকানাটি প্রদত্ত নেটওয়ার্কের মধ্যে সমস্ত ঠিকানায় প্রেরণে ব্যবহৃত হয় ।

চ্যালেঞ্জ

একটি বিন্দুযুক্ত দশমিক আইপি ঠিকানা এবং ইনপুট হিসাবে বৈধ নেটমাস্ক দেওয়া, আউটপুট হিসাবে নেটওয়ার্ক ঠিকানা এবং সম্প্রচার ঠিকানা প্রদান করুন, বিন্দু-দশমিক বিন্যাসে।

  • ইনপুট অবশ্যই বিন্দু-দশমিক বিন্যাসে দুটি স্ট্রিং হিসাবে ঠিকানা এবং মাস্ক হতে হবে। আপনি এটি 2 টি পৃথক স্ট্রিং হিসাবে 2 স্ট্রিং উপাদানগুলির তালিকা বা অ্যারের হিসাবে বা কোনও সংবেদনশীল বিভাজক দ্বারা পৃথক ঠিকানা এবং মাস্ক সহ একটি একক স্ট্রিং হিসাবে পাস করতে পারেন।
  • আউটপুট ফর্ম্যাট ইনপুট ফর্ম্যাট হিসাবে একই সীমাবদ্ধতার সাপেক্ষে।

উদাহরণ

Input                              Output

192.168.0.1 255.255.255.0          192.168.0.0 192.168.0.255
192.168.0.0 255.255.255.0          192.168.0.0 192.168.0.255
192.168.0.255 255.255.255.0        192.168.0.0 192.168.0.255
100.200.100.200 255.255.255.255    100.200.100.200 100.200.100.200
1.2.3.4 0.0.0.0                    0.0.0.0 255.255.255.255
10.25.30.40 255.252.0.0            10.24.0.0 10.27.255.255

2
নেটমাস্কটিতে কি কেবল 255 এবং 0 টি থাকবে?
xnor

1
@ এক্সনর এর শেষ উদাহরণ রয়েছে 252
ব্যবহারকারী 81655

2
শেষ আউটপুট করা উচিত নয় 10.24.0.0 10.27.255.255?
পূর্কাকাডারী

2
@ Pietu1998 নং, 255.252.0.0 একটি বৈধ মাস্ক। বাইনারি এ এটি 11111111.11111100.00000000.00000000
ডিজিটাল ট্রমা

2
@ পিটু 1998 ওহ - হ্যাঁ - দুঃখিত - এটি এখন ঠিক।
ডিজিটাল ট্রমা

উত্তর:


5

জাভাস্ক্রিপ্ট (ES6), 92 বাইট

(a,m)=>a.split`.`.map((n,i)=>(v=m[i],m[i]=n&v|v^255,n&v),m=m.split`.`).join`.`+" "+m.join`.`

ব্যাখ্যা

(a,m)=>
  a.split`.`
  .map((n,i)=>(
      v=m[i],
      m[i]=n&v|v^255,
      n&v
    ),
    m=m.split`.`
  ).join`.`
  +" "+m.join`.`

পরীক্ষা


4

এমএটিএল , 47 বাইট

এই উত্তরটি ভাষার বর্তমান সংস্করণ (4.0.0) ব্যবহার করে।

'%i.%i.%i.%i't32whh2:"j'\d+'XXU]tbZ&tb255Z~+hYD

উদাহরণ

>> matl
 > '%i.%i.%i.%i't32whh2:"j'\d+'XXU]tbZ&tb255Z~+hYD
 > 
> 192.168.0.1
> 255.255.255.0
192.168.0.0 192.168.0.255

ব্যাখ্যা

'%i.%i.%i.%i't32whh      % format string: '%i.%i.%i.%i %i.%i.%i.%i'
2:"                      % for loop: do this twice
    j'\d+'XXU            % input string and parse into 4-vector with the numbers
]                        % end
tbZ&                     % compute network address
tb255Z~+                 % compute broadcast address
hYD                      % concatenate into 8-vector and apply format string


0

পিএইচপি, 126 বাইট

ইনপুট সহ $ n:

preg_filter(~Ð×£ÔÖÐ,~Û¤¢Â×ÛÎÖÑ×ÛÔÔÁÌÀ×ÛÑÂ×ÛÂÛÁÊÀÝÑÝÅÝÝÖÑ×Û¤ÛÒÊ¢ÙÛÎÖÖÑ×ÛÑÂÛÑ×Û¤ÛÒÊ¢ÍÊÊÙÛÎÖÖÅÝÝÖ,$n);echo"$c $b";

Hexdump:

0000000: 7072 6567 5f66 696c 7465 7228 7ed0 d7a3  preg_filter(~...
0000010: 9bd4 d6d0 9a2c 7edb 9ea4 a2c2 d7db ced6  .....,~.........
0000020: d1d7 db96 d4d4 c1cc c0d7 db9c d1c2 d7db  ................
0000030: 8bc2 db96 c1ca c0dd d1dd c5dd ddd6 d1d7  ................
0000040: db9e a4db 96d2 caa2 d9db ced6 d6d1 d7db  ................
0000050: 9dd1 c2db 8bd1 d7db 9ea4 db96 d2ca a283  ................
0000060: cdca cad9 81db ced6 d6c5 dddd d62c 246e  .............,$n
0000070: 293b 6563 686f 2224 6320 2462 223b       );echo"$c $b";

এবং আরও পঠনযোগ্য সংস্করণ:

preg_filter( /* PCRE regex on input */
    '/(\d+)/e', /* match all digits, execute the code for each one */
    '$a[]=($1) /* push the matched value to the array $a */
        .($i++>3 /* if we're at the 5th or higher digit */
            ?($c.=($t=$i>5?".":"").($a[$i-5]&$1)) /* append to $c bitwise AND-ed number */
                .($b.=$t.($a[$i-5]|255&~$1)) /* append to $b the broadcast address */
            :"")',
    $n);
echo"$c $b"; /* output $c and $b */

preg_filtereপতাকাটি ব্যবহার করার সময় প্রতিস্থাপনের প্যাটার্নে একক বিবৃতি প্রয়োজন , সুতরাং আমি the এ এর ​​5 ম এবং উচ্চতর মানেরগুলিতে গণনার ফলাফলকে 'সংযুক্ত' করি, কারণ সেগুলি কখনই পুনরায় ব্যবহার হয় না।


0

পার্ল, 90 85 বাইট

জন্য +6 অন্তর্ভুক্ত -pF/\D/

for(0..3){push@a,$F[$_]&1*($y=$F[$_+4]);push@b,$F[$_]|~$y&255}$"='.';$_="@a @b"

ব্যবহার:

echo "192.168.0.1 255.255.255.0" | perl -pF/\\D/ file.pl

আরও পঠনযোগ্য:

for(0..3) {
    push @a, $F[$_] & 1*($y=$F[$_+4]);  # calc/add network address 'byte'
    push @b, $F[$_] | ~$y & 255         # calc/add broadcast address 'byte'
}
$"='.';                                 # set $LIST_SEPARATOR
$_="@a @b"                              # set output to network address and broadcast

-F/\D/অ-সংখ্যা এবং এটি দোকানে ইনপুট splits @F


0

ফ্যাক্টর, 103 বাইট

[ [ ipv4-aton ] bi@ 2dup bitand -rot dup bit-count 32 - abs on-bits pick bitor 2nip [ ipv4-ntoa ] bi@ ]

খুশী হলাম।

Ungolfed:

: mask-and-broadcast ( ip mask -- netaddr broadcast )
  [ ipv4-aton ] bi@ 2dup bitand -rot dup bit-count 32 - abs on-bits pick bitor 2nip
  [ ipv4-ntoa ] bi@ ;

0

পিএইচপি , 74 বাইট

<?=long2ip($i=ip2long($argv[1])&$m=ip2long($argv[2])),' ',long2ip($i|~$m);

স্বতন্ত্র হিসাবে, ইনপুটটি কমান্ড লাইনের মাধ্যমে হয়:

$ php ip.php 192.168.0.1 255.255.255.0
192.168.0.0 192.168.0.255

এটি অনলাইন চেষ্টা করুন!

বা একটি ফাংশন হিসাবে, 80 বাইট :

function($a,$b){return[long2ip($i=ip2long($a)&$m=ip2long($b)),long2ip($i|~$m)];}

এটি অনলাইন চেষ্টা করুন!

Ungolfed

function ip( $a, $b ) {
    $i = ip2long( $a );          // string IP to 32 bit int
    $m = ip2long( $b );          // string netmask to 32 bit int
    $n = $i & $m;                // network is bitwise AND of IP and netmask
    $c = $i | ~$m;               // broadcast is bitwise OR of IP and inverse netmask
    return [ long2ip( $n ), long2ip( $c ) ];
}

বাইনারি এবং পিছনে আইপিভি 4 ডটেড-স্ট্রিং পরিচালনা করতে পিএইচপি-র সুন্দর (দীর্ঘ ফাংশন নাম থাকা সত্ত্বেও) বিল্ট-ইন রয়েছে।

আউটপুট

192.168.0.1 255.255.255.0   => 192.168.0.0 192.168.0.255
192.168.0.0 255.255.255.0   => 192.168.0.0 192.168.0.255
192.168.0.255 255.255.255.0 => 192.168.0.0 192.168.0.255
100.200.100.200 255.255.255.255 => 100.200.100.200 100.200.100.200
1.2.3.4 0.0.0.0 => 0.0.0.0 255.255.255.255
10.25.30.40 255.252.0.0 => 10.24.0.0 10.27.255.255
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.