Canonicalize CIDR: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: changed a comment, updated example nodes.) |
(→{{header|Wren}}: Changed to cope with the extra examples.) |
||
Line 522: | Line 522: | ||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
||
{{libheader|Wren-str}} |
{{libheader|Wren-str}} |
||
<lang ecmascript>import " |
<lang ecmascript>import "/fmt" for Fmt, Conv |
||
import "/fmt" for Fmt, Conv |
|||
import "/str" for Str |
import "/str" for Str |
||
// canonicalize a CIDR block: make sure none of the host bits are set |
// canonicalize a CIDR block: make sure none of the host bits are set |
||
var |
var canonicalize = Fn.new { |cidr| |
||
⚫ | |||
var cidr = (args.count > 0) ? args[0] : Fiber.abort("Please pass the CIDR to be canonicalized.") |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
var binary = dotted.split(".").map { |n| Fmt.swrite("$08b", Num.fromString(n)) }.join() |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
binary = binary[0...size] + "0" * (32 - size) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
binary = binary[0...size] + "0" * (32 - size) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
⚫ | |||
var tests = [ |
|||
⚫ | |||
⚫ | |||
⚫ | |||
"36.18.154.103/12", |
|||
"62.62.197.11/29", |
|||
"67.137.119.181/4", |
|||
"161.214.74.21/24" , |
|||
"184.232.176.184/18" |
|||
] |
|||
for (test in tests) { |
|||
Fmt.print("$-18s -> $s", test, canonicalize.call(test)) |
|||
}</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
87.70.141.1/22 -> 87.70.140.0/22 |
|||
36.18.154.103/12 -> 36.16.0.0/12 |
|||
⚫ | |||
62.62.197.11/29 -> 62.62.197.8/29 |
|||
67.137.119.181/4 -> 64.0.0.0/4 |
|||
161.214.74.21/24 -> 161.214.74.0/24 |
|||
184.232.176.184/18 -> 184.232.128.0/18 |
|||
</pre> |
</pre> |