Last active
February 19, 2021 03:20
-
-
Save kaelri/56f24342224b7d544ed520deafa58474 to your computer and use it in GitHub Desktop.
My solution to this week’s Hunt a Killer “Mystery Mondays” cipher.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 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