@@ -9,10 +9,15 @@
/**
* Bacon definitions.
*/
-
-export const BACON_ALPHABET_REDUCED = "ABCDEFGHIKLMNOPQRSTUWXYZ";
-export const BACON_ALPHABET_COMPLETE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-export const BACON_CODES_REDUCED = [0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23];
+export const BACON_ALPHABETS = {
+ "Standard (I=J and U=V)": {
+ alphabet: "ABCDEFGHIKLMNOPQRSTUWXYZ",
+ codes: [0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23]
+ },
+ "Complete": {
+ alphabet: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ }
+};
export const BACON_TRANSLATION_01 = "0/1";
export const BACON_TRANSLATION_AB = "A/B";
export const BACON_TRANSLATION_CASE = "Case";
@@ -8,7 +8,7 @@
import Operation from "../Operation";
import {
- BACON_ALPHABET_REDUCED, BACON_ALPHABET_COMPLETE,
+ BACON_ALPHABETS,
BACON_TRANSLATION_CASE, BACON_TRANSLATION_AMNZ, BACON_TRANSLATIONS, BACON_CLEARER_MAP, BACON_NORMALIZE_MAP,
swapZeroAndOne
} from "../lib/Bacon";
@@ -33,7 +33,7 @@ class BaconCipherDecode extends Operation {
{
"name": "Alphabet",
"type": "option",
- "value": [BACON_ALPHABET_REDUCED, BACON_ALPHABET_COMPLETE]
+ "value": Object.keys(BACON_ALPHABETS)
},
"name": "Translation",
@@ -55,10 +55,11 @@ class BaconCipherDecode extends Operation {
run(input, args) {
const [alphabet, translation, invert] = args;
- // split text into groups of 5 characters
+ const alphabetObject = BACON_ALPHABETS[alphabet];
// remove invalid characters
input = input.replace(BACON_CLEARER_MAP[translation], "");
+
// normalize to unique alphabet
if (BACON_NORMALIZE_MAP[translation] !== undefined) {
input = input.replace(/./g, function (c) {
@@ -95,7 +96,7 @@ class BaconCipherDecode extends Operation {
for (let index = 0; index < inputArray.length; index++) {
const code = inputArray[index];
const number = parseInt(code, 2);
- output += number < alphabet.length ? alphabet[number] : "?";
+ output += number < alphabetObject.alphabet.length ? alphabetObject.alphabet[number] : "?";
}
return output;
@@ -8,11 +8,10 @@
BACON_TRANSLATIONS_FOR_ENCODING, BACON_TRANSLATION_AB,
-import { BACON_CODES_REDUCED } from "../lib/Bacon.mjs";
* BaconCipherEncode operation
@@ -34,7 +33,7 @@ class BaconCipherEncode extends Operation {
@@ -62,6 +61,7 @@ class BaconCipherEncode extends Operation {
const [alphabet, translation, keep, invert] = args;
const charCodeA = "A".charCodeAt(0);
const charCodeZ = "Z".charCodeAt(0);
@@ -69,8 +69,8 @@ class BaconCipherEncode extends Operation {
const charCode = c.toUpperCase().charCodeAt(0);
if (charCode >= charCodeA && charCode <= charCodeZ) {
let code = charCode - charCodeA;
- if (alphabet === BACON_ALPHABET_REDUCED) {
- code = BACON_CODES_REDUCED[code];
+ if (alphabetObject.codes !== undefined) {
+ code = alphabetObject.codes[code];
const bacon = ("00000" + code.toString(2)).substr(-5, 5);
return bacon;
@@ -6,9 +6,9 @@
* @license Apache-2.0
import TestRegister from "../TestRegister";
-import { BACON_ALPHABET_REDUCED, BACON_ALPHABET_COMPLETE, BACON_TRANSLATIONS } from "../../../src/core/lib/Bacon";
+import { BACON_ALPHABETS, BACON_TRANSLATIONS } from "../../../src/core/lib/Bacon";
-const alphabets = [BACON_ALPHABET_REDUCED, BACON_ALPHABET_COMPLETE];
+const alphabets = Object.keys(BACON_ALPHABETS);
const translations = BACON_TRANSLATIONS;
TestRegister.addTests([