DEV Community

No Framework - Eps#1: I am Bored!

Unveiling the Enigma of Text Transformation with a Personalized JavaScript Algorithm

In the domain of programming, the art of manipulating textual content holds great significance. Occasionally, we encounter situations that demand ingenious solutions for encoding and decoding text. In this exposition, we shall embark on a journey to unravel a bespoke algorithm to accomplish this feat using the eloquence of JavaScript.

Prelude

Envision a scenario where words metamorphose into an array of numerical symphonies, orchestrated by a unique pattern, only to be transmuted back to their original lyrical essence. This artistic rendition has myriad applications, ranging from the shroud of obfuscation to the creation of an exclusive lexicon of representation.

The Algorithmic Ballet

Two protagonists grace our stage: ste() Stupid Text Encoder, the enigmatic encoder, and std() Stupid Text Decoder, the illuminating decoder. The symphony of encoding is orchestrated by ste(), where text and an optional boolean parameter coalesce. Its counterpart, the melodious decoder std(), waltzes in tandem, decoding the encoded text, poised with the same boolean flourish.

The choreography is thus:

Step 1. A tapestry of ALPHABET unfurls, adorned with characters earmarked for encoding and decoding.

const ALPHABET = 'abcdefghijklmnopqrstuvwxyz <>?,./\':;[]=+-_(ABCDEFGHIJKLMNOPQRSTUVWXYZ)*&^%$#@!~`0123456789';
Enter fullscreen mode Exit fullscreen mode

Step 2. The overture commences with ste(), a pas de deux with each character of the input text:

function ste(text, reverse = false) {
  const translated = [];

  for (let i = 0; i < text.length; i++) {
    const char = text[i];
    const index = ALPHABET.indexOf(char);

    if (index !== -1) {
      const numericalOrder = index + 1;
      translated.push(numericalOrder);
    } else {
      translated.push(text[i]);
    }
  }

  return reverse ? translated.reverse().join(' ') : translated.join(' ');
}
Enter fullscreen mode Exit fullscreen mode
  • Index within the ALPHABET is ascertained.
  • For each found character, its numerical embodiment is calculated, a token for the translated tapestry.
  • For characters not in the ALPHABET, they are woven intact into the translated fabric.

Step 3. The second act unfolds with std(), unthreading the encoded text into a quilt of numerical notes and original characters:

function std(translatedText, reverse = false) {
  const numericalOrderArray = translatedText.split(' ');
  const decoded = [];

  for (let i = 0; i < numericalOrderArray.length; i++) {
    const value = numericalOrderArray[i];
    if (!isNaN(value)) {
      const index = parseInt(value) - 1;
      if (index >= 0 && index < ALPHABET.length) {
        decoded.push(ALPHABET[index]);
      }
    } else {
      decoded.push(value);
    }
  }

  return reverse ? decoded.reverse().join('') : decoded.join('');
}
Enter fullscreen mode Exit fullscreen mode
  • Each element undergoes scrutiny as number or character.
  • A numerical reverie leads to indexing within the ALPHABET, and the veil lifts to reveal the corresponding character, gracefully nestled into the decoded keepsake.
  • Characters unacquainted with numerals journey unscathed into the bosom of the decoded collection.

Step 4. A scene-stealing twist: should the reverse cipher be invoked with a true decree, the characters execute a spectral dance, reversing arrays before their final symphonic reunion as strings.

Illustrative Melody

Observe our algorithm pirouette with elegance in this illustrative pas de deux:

const inputText = 'Hello 12345';

// Initiating the dance of encoding and decoding
const encodedText = ste(inputText, true);
console.log("Encoded:", encodedText);

const decodedText = std(encodedText, true);
console.log("Decoded:", decodedText);
Enter fullscreen mode Exit fullscreen mode

Epilogue

With this bespoke algorithmic composition, you inherit the power to transmute text into numerical melodies and back again, a chameleon canvas for an array of scenarios. This arcane artistry, malleable and reversible, adds another color to your programming palette.

Feel the urge to wield this enigma in your creative quests, to harness the allure of text transformation in the orchestral symphony of programming. In the grand theater of code, let your creativity resonate. Happy coding!

Top comments (0)