5.6 KiB
id, title, challengeType, forumTopicId, dashedName
| id | title | challengeType | forumTopicId | dashedName |
|---|---|---|---|---|
| 5a23c84252665b21eecc8029 | Straddling checkerboard | 1 | 302325 | straddling-checkerboard |
--description--
Implement functions to encrypt and decrypt a message using the straddling checkerboard method.
Each function will take two arguments, a message string and an alphabet array. The alphabet array will contain 3 strings representing the 3 rows of the straddling checkerboard.
The output of the straddle() function should be a series of decimal digits. Numbers should be encrypted by inserting the escape character before each digit, then including the digit unencrypted.
This should be reversed for decryption with the unstraddle() function.
--hints--
straddle sollte eine Funktion sein.
assert(typeof straddle == 'function');
straddle("One night-it was on the twentieth of March, 1888-I was returning.",["ESTONIA R", "BCDFGHJKLM", "PQUVWXYZ./"]) sollte einen String zurückgeben.
assert(
typeof straddle(
'One night-it was on the twentieth of March, 1888-I was returning.',
['ESTONIA R', 'BCDFGHJKLM', 'PQUVWXYZ./']
) == 'string'
);
straddle("One night-it was on the twentieth of March, 1888-I was returning.",["ESTONIA R", "BCDFGHJKLM", "PQUVWXYZ./"]) sollte "34045747525284613427502840425027537379697175891898898898584619028294547488" zurückgeben.
assert.equal(
straddle(
'One night-it was on the twentieth of March, 1888-I was returning.',
['ESTONIA R', 'BCDFGHJKLM', 'PQUVWXYZ./']
),
'34045747525284613427502840425027537379697175891898898898584619028294547488'
);
straddle("One night-it was on the twentieth of March, 1888-I was returning",["HOL MES RT", "ABCDFGIJKN", "PQUVWXYZ./"]) sollte "139539363509369743061399059745399365901344308320791798798798367430685972839363935" zurückgeben.
assert.equal(
straddle('One night-it was on the twentieth of March, 1888-I was returning', [
'HOL MES RT',
'ABCDFGIJKN',
'PQUVWXYZ./'
]),
'139539363509369743061399059745399365901344308320791798798798367430685972839363935'
);
straddle("Thecheckerboardcakerecipespecifies3largeeggsand2.25cupsofflour.",["ET AON RIS", "BCDFGHJKLM", "PQ/UVWXYZ."]) sollte "125021250212707204372221327070218600960021823809623283724002424935226226962262521636094232328463769" zurückgeben.
assert.equal(
straddle('Thecheckerboardcakerecipespecifies3largeeggsand2.25cupsofflour.', [
'ET AON RIS',
'BCDFGHJKLM',
'PQ/UVWXYZ.'
]),
'125021250212707204372221327070218600960021823809623283724002424935226226962262521636094232328463769'
);
unstraddle sollte eine Funktion sein.
assert(typeof unstraddle == 'function');
unstraddle("34045747525284613427502840425027537379697175891898898898584619028294547488",["ESTONIA R", "BCDFGHJKLM", "PQUVWXYZ./"]) sollte einen String zurückgeben.
assert(
typeof unstraddle(
'34045747525284613427502840425027537379697175891898898898584619028294547488',
['ESTONIA R', 'BCDFGHJKLM', 'PQUVWXYZ./']
) == 'string'
);
unstraddle("34045747525284613427502840425027537379697175891898898898584619028294547488",["ESTONIA R", "BCDFGHJKLM", "PQUVWXYZ./"]) sollte "ONENIGHTITWASONTHETWENTIETHOFMARCH1888IWASRETURNING." zurückgeben.
assert.equal(
unstraddle(
'34045747525284613427502840425027537379697175891898898898584619028294547488',
['ESTONIA R', 'BCDFGHJKLM', 'PQUVWXYZ./']
),
'ONENIGHTITWASONTHETWENTIETHOFMARCH1888IWASRETURNING.'
);
unstraddle("139539363509369743061399059745399365901344308320791798798798367430685972839363935",["HOL MES RT", "ABCDFGIJKN", "PQUVWXYZ./"]) sollte "ONENIGHTITWASONTHETWENTIETHOFMARCH1888IWASRETURNING" zurückgeben.
assert.equal(
unstraddle(
'139539363509369743061399059745399365901344308320791798798798367430685972839363935',
['HOL MES RT', 'ABCDFGIJKN', 'PQUVWXYZ./']
),
'ONENIGHTITWASONTHETWENTIETHOFMARCH1888IWASRETURNING'
);
unstraddle("125021250212707204372221327070218600960021823809623283724002424935226226962262521636094232328463769",["ET AON RIS", "BCDFGHJKLM", "PQ/UVWXYZ."]) sollte "THECHECKERBOARDCAKERECIPESPECIFIES3LARGEEGGSAND2.25CUPSOFFLOUR." zurückgeben.
assert.equal(
unstraddle(
'125021250212707204372221327070218600960021823809623283724002424935226226962262521636094232328463769',
['ET AON RIS', 'BCDFGHJKLM', 'PQ/UVWXYZ.']
),
'THECHECKERBOARDCAKERECIPESPECIFIES3LARGEEGGSAND2.25CUPSOFFLOUR.'
);
--seed--
--seed-contents--
function straddle(message, alphabet) {
}
function unstraddle(message, alphabet) {
}
--solutions--
function straddle(message, alphabet) {
var prefixes = new Array(
'',
alphabet[0].indexOf(' '),
alphabet[0].lastIndexOf(' ')
);
var out = '';
message = message.toUpperCase();
message = message.replace(/([0-9])/g, '/$1'); // dumb way to escape numbers
for (var i = 0; i < message.length; i++) {
var chr = message[i];
if (chr == ' ') continue;
for (var j = 0; j < 3; j++) {
var k = alphabet[j].indexOf(chr);
if (k < 0) continue;
out += prefixes[j].toString() + k;
}
if (chr == '/') out += message[++i];
}
return out;
}
function unstraddle(message, alphabet) {
var prefixes = new Array(
'',
alphabet[0].indexOf(' '),
alphabet[0].lastIndexOf(' ')
);
var out = '';
var n, o;
for (var i = 0; i < message.length; i++) {
n = message[i] * 1;
switch (n) {
case prefixes[1]:
o = alphabet[1][message[++i]];
break;
case prefixes[2]:
o = alphabet[2][message[++i]];
break;
default:
o = alphabet[0][n];
}
o == '/' ? (out += message[++i]) : (out += o);
}
return out;
}