diff options
author | Marvin Borner | 2018-05-29 15:38:05 +0200 |
---|---|---|
committer | Marvin Borner | 2018-05-29 15:38:05 +0200 |
commit | 4d90186b4f1a91ca830b333490c5865d4fadb061 (patch) | |
tree | 39505f0ab6aa7e52ce83a565b56849eb30db5713 /main/app/sprinkles/core/assets | |
parent | c30f8508edef6d80ff1a9925fd66bd2751ef5529 (diff) |
Added decode function - not perfectly working right now
Diffstat (limited to 'main/app/sprinkles/core/assets')
-rw-r--r-- | main/app/sprinkles/core/assets/SiteAssets/js/asemica.js | 69 | ||||
-rw-r--r-- | main/app/sprinkles/core/assets/SiteAssets/js/asemica.pl | 1 |
2 files changed, 60 insertions, 10 deletions
diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/asemica.js b/main/app/sprinkles/core/assets/SiteAssets/js/asemica.js index 464514a..c2abc45 100644 --- a/main/app/sprinkles/core/assets/SiteAssets/js/asemica.js +++ b/main/app/sprinkles/core/assets/SiteAssets/js/asemica.js @@ -10,14 +10,20 @@ function asemica(Text, CorpusUrl, Intent = "enc") { if (!VerifyExists(Transitions)) { throw new Error("Please choose another text."); } else { - console.log(Encode("LOL", Transitions, Tokens)); + switch (Intent) { + case "enc": + console.log(Encode("LOL", Transitions, Tokens)); + break; + case "dec": + console.log(Decode("know their relationship with no surrender of free programs copyright law. version ever published by some manner, permitted by software interchange, for them to 60 days after the freedom of free programs everyone is fundamentally incompatible with two", Transitions, Tokens)); + } } }); }); /** - * Encodes an input file using the transition matrix calculated from the corpus + * Encodes an input string using the transition matrix calculated from the corpus * * @return {string} */ @@ -47,14 +53,37 @@ function asemica(Text, CorpusUrl, Intent = "enc") { return EncodedText; } - /* - * Breaks the input corpus into a series of processable "tokens" - * - * Example output: ['The','Project','Gutenberg', ... ,'about','new','eBooks'] - */ - function TokenizeCorpus(CorpusString) { - // Clean up things - const StrippedCorpus = CorpusString + /** + * Pieces an arbitrary binary sequence back together from ASCII input + */ + function Decode(Input, Transitions, Tokens) { + Input = CleanInput(Input); + var DecodedText = ""; + var Words = Input.split(/\s+/); + + Words.slice(0, -1).forEach(function (Word, i) { + if ("meaningful" in Transitions[Words[i].toLowerCase()]) { + var NumDoors = Transitions[Words[i].toLowerCase()]["door"]; + NumDoors.forEach(function (NumDoor, j) { + var OnDoor = (Transitions[Words[i].toLowerCase()]["door"][j]).toLowerCase(); + if (OnDoor === Words[i + 1].toLowerCase()) { + console.log(j); + var Binary = dec2bin(j); + while (Binary.length < 4) { + Binary = "0" + Binary; + } + DecodedText += Binary; + } + }) + } + }); + + console.log(DecodedText); + } + + + function CleanInput(Input) { + Input .replace(/\n/g, " ") // newlines .replace(/<\/?[^>]+(>|$)/g, "") // html .replace(/[^\w']/g, " ") // non-word characters @@ -63,6 +92,19 @@ function asemica(Text, CorpusUrl, Intent = "enc") { .replace(/^\s+/, "") // leading whitespace .replace(/\s+$/, ""); // trailing whitespace + return Input; + } + + + /* + * Breaks the input corpus into a series of processable "tokens" + * + * Example output: ['The','Project','Gutenberg', ... ,'about','new','eBooks'] + */ + function TokenizeCorpus(CorpusString) { + // Clean up things + const StrippedCorpus = CleanInput(CorpusString); + Tokens = StrippedCorpus.split(/\s/); return Tokens; @@ -137,4 +179,11 @@ function asemica(Text, CorpusUrl, Intent = "enc") { return Count >= 7; } + /** + * Converts a decimal value to binary + */ + function dec2bin(dec) { + return (dec >>> 0).toString(2); + } + } diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/asemica.pl b/main/app/sprinkles/core/assets/SiteAssets/js/asemica.pl index f4bdc27..5fd8c25 100644 --- a/main/app/sprinkles/core/assets/SiteAssets/js/asemica.pl +++ b/main/app/sprinkles/core/assets/SiteAssets/js/asemica.pl @@ -388,6 +388,7 @@ sub encode { use Data::Dumper; print Dumper($nibbles); + print $input; my $token = $tokens->[int(rand(scalar(@$tokens)))]; my $encoded_text = ''; |