add kata
This commit is contained in:
8
5kyu/count-ip-addresses/description.md
Normal file
8
5kyu/count-ip-addresses/description.md
Normal file
@@ -0,0 +1,8 @@
|
||||
Implement a function that receives two IPv4 addresses, and returns the number of addresses between them (including the first one, excluding the last one).
|
||||
|
||||
All inputs will be valid IPv4 addresses in the form of strings. The last address will always be greater than the first one.
|
||||
|
||||
Examples
|
||||
* With input "10.0.0.0", "10.0.0.50" => return 50
|
||||
* With input "10.0.0.0", "10.0.1.0" => return 256
|
||||
* With input "20.0.0.10", "20.0.1.0" => return 246
|
||||
17
5kyu/count-ip-addresses/solution.ts
Normal file
17
5kyu/count-ip-addresses/solution.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Regards an IP address as a number with 4 digits.
|
||||
* Each digit can be between 0 and 255.
|
||||
* The result of this function is the total number of possible IPs 'lower' than the given IP.
|
||||
*/
|
||||
const ipToNum = (ip: string): number => {
|
||||
const digits = ip.split('.').map(Number) as [number, number, number, number];
|
||||
console.log(digits);
|
||||
if(digits.length !== 4) {
|
||||
throw new Error('Invalid IP address');
|
||||
}
|
||||
return digits.reduce((sum, digit) => sum * 256 + digit, 0);
|
||||
}
|
||||
|
||||
export function ipsBetween(start: string, end: string): number {
|
||||
return ipToNum(end) - ipToNum(start);
|
||||
}
|
||||
11
5kyu/count-ip-addresses/tests.ts
Normal file
11
5kyu/count-ip-addresses/tests.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
// See https://www.chaijs.com for how to use Chai.
|
||||
import { assert } from "chai";
|
||||
import { ipsBetween } from "./solution";
|
||||
|
||||
// TODO Add your tests here
|
||||
describe("example", function() {
|
||||
it("test", function() {
|
||||
assert.equal(ipsBetween("10.0.0.0", "10.0.0.50"), 50, 'ipsBetween("10.0.0.0", "10.0.0.50")');
|
||||
assert.equal(ipsBetween("20.0.0.10", "20.0.1.0"), 246, 'ipsBetween("20.0.0.10", "20.0.1.0")');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user