Character Frequency Encoding with TypeScript

Introduction

Hello! Are you ready for an exciting voyage into the wonderful realm of strings and data structures? Today, we will assist Alice, an aspiring cryptographer, with an intriguing string manipulation task. She loves playing with strings and has come up with a unique string encoding scheme. I assure you, this will be an enlightening journey that will stretch your programming muscles. Let's get started!

Task Statement

Alice has devised a unique way of encoding words. She takes a word and replaces each character with the next character in the alphabetical order. In other words, given a string word, for each character, if it is not z, she replaces it with the character that comes next alphabetically. For the character z, she replaces it with a.

Another element of Alice's algorithm involves frequency analysis. After shifting the characters, she counts the frequency of each character in the new string. Then, she creates an association between each character with its frequency and ASCII value. Each character maps to a number, which is a product of the ASCII value of the character and its frequency. Our task is to construct a list containing these products, sorted in descending order.

Example

For the input string "banana", the output should be [294, 222, 99].

The string "banana" will be shifted to "cbobob".

Calculating the product of frequency and ASCII value for each character:

  • The ASCII value for c is 9999; it appears once in the string, so its product is 99â‹…1=9999 \cdot 1 = 99.
  • The ASCII value for b is 9898; it appears three times in the string, so its product is 98â‹…3=29498 \cdot 3 = 294.
  • The ASCII value for o is 111111; it appears twice in the string, so its product is 111â‹…2=222111 \cdot 2 = 222.

Collecting these products into a list gives [99, 294, 222]. Sorting this list in descending order results in [294, 222, 99].

Solution Building: Step 1 - Mapping each character to the next alphabetical character

Our first step involves mapping each character of the input string to the next alphabetical character. We define nextString as a string, storing the shift operation result. We then iterate over each character of the input string. If a character is not z, we replace it with the next alphabetical character. If it is z, we replace it with a.

Here's the updated function in TypeScript:

TypeScript
function characterFrequencyEncoding(word: string): string {
    let nextString: string = '';
    for (let i = 0; i < word.length; i++) {
        let letter: string = word[i];
        if (letter === 'z') {
            nextString += 'a';
        } else {
            nextString += String.fromCharCode(letter.charCodeAt(0) + 1);
        }
    }
    return nextString;
}
Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal