Skip to content

Instantly share code, notes, and snippets.

@kaelri
Last active February 19, 2021 03:20
Show Gist options
  • Select an option

  • Save kaelri/56f24342224b7d544ed520deafa58474 to your computer and use it in GitHub Desktop.

Select an option

Save kaelri/56f24342224b7d544ed520deafa58474 to your computer and use it in GitHub Desktop.
My solution to this week’s Hunt a Killer “Mystery Mondays” cipher.
// https://www.facebook.com/groups/huntakiller/permalink/2867593840175865/
function decode( encodedPhrase = '' ) {
let key = [
[ 'A', 'B', 'C', 'D', 'E' ],
[ 'F', 'G', 'H', 'IJ', 'K' ],
[ 'L', 'M', 'N', 'O', 'P' ],
[ 'Q', 'R', 'S', 'T', 'U' ],
[ 'V', 'W', 'X', 'Y', 'Z' ]
];
let encodedWords = encodedPhrase.split( ' / ' );
let decodedWords = [];
for (let w = 0; w < encodedWords.length; w++) {
let encodedLetters = encodedWords[ w ].split(' ');
let decodedLetters = [];
for (let l = 0; l < encodedLetters.length; l++) {
let encodedPair = encodedLetters[ l ].split(' ');
let x = encodedPair[0].length;
let y = encodedPair[1].length;
let decodedLetter = key[ x - 1 ][ y - 1 ];
decodedLetters.push( decodedLetter );
}
let decodedWord = decodedLetters.join( '' );
decodedWords.push( decodedWord );
}
let decodedPhrase = decodedWords.join( ' ' );
return decodedPhrase;
}
function encode( decodedPhrase = '' ) {
let key = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ];
// Sanitize.
decodedPhrase = decodedPhrase.replace( /[^A-Za-z\s]+/g, '' )
.replace( /\s+/g, ' ' )
.toUpperCase()
.replace( 'J', 'I' );
let decodedWords = decodedPhrase.split(' ');
let encodedWords = [];
for (let w = 0; w < decodedWords.length; w++) {
let decodedLetters = decodedWords[w].split('');
let encodedLetters = [];
for (let l = 0; l < decodedLetters.length; l++) {
let decodedLetter = decodedLetters[l];
let i = key.indexOf( decodedLetter );
let x = Math.floor( ( i / 5 ) + 1 );
let y = ( i % 5 ) + 1;
let xDots = '';
for (let ix = 0; ix < x; ix++) {
xDots += '.';
}
let yDots = '';
for (let iy = 0; iy < y; iy++) {
yDots += '.';
}
let encodedLetter = [ xDots, yDots ].join(' ');
encodedLetters.push( encodedLetter );
}
encodedWords.push( encodedLetters.join(' ') );
}
let encodedPhrase = encodedWords.join( ' / ' );
return encodedPhrase;
}
var encodedPhrase = '.. ... .... ..... ... ... .... .... / . . / . ... .. .... ... . ... . . ..... .... ..';
var decodedPhrase = decode( encodedPhrase ); // HUNT A CIJLLER
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment