# | Problem | Pass Rate (passed user / total user) |
---|---|---|
12805 | GEC1506 - Advanced - Decoding |
|
12269 | GEC1506 - Basic - Encoding |
|
Description
In this problem, you will learn how to encode and decode text using a frequency-based encoding rule. You will first create an encoding scheme based on the frequency of characters in a given text, and then use this scheme to decode a given encoded message.
Note:
- Characters should be converted to lower-case using the built-in function
.lower()
. - Consider spaces (' ') when counting character frequencies.
Input
- A string text (1 <= len(text) <= 10^4): represents the text to learn the encoding rule.
- A string message (1 <= len(message) <= 10^5): represents the message to be decoded.
Example Input:
Hello john
000001001100000000001100010101001
Output
Decode the encoded message using the encoding scheme generated from the first line of the input text.
Encoding Rule:
- Count the frequency of each character in the text.
- Sort the characters in descending order based on their frequency. If multiple characters have the same frequency, maintain their order of occurrence.
- Encode the most frequent character with '1'.
- For each subsequent character, add a '0' to the left of the previous character's encoding.
- For the least frequent character, encode it with the same length as the previous character but with all digits turned to '0'.
Example Encoding:
'h': 2 times -> '1'
'l': 2 times -> '01'
'o': 2 times -> '001'
'e': 1 time -> '0001'
' ': 1 time -> '00001'
'j': 1 time -> '000001'
'n': 1 time -> '000000'
Example Output:
john hello
Sample Input Download
Sample Output Download
Tags
Discuss
Description
Given a few lines of text, you are required to parse it and perform the following operations:
- Count the frequency of each character in the text (excluding spaces).
- If multiple characters have the same frequency, order them according to their first occurrence in the text.
- Encode the characters according to their frequency, replacing each character with a corresponding lowercase letter from the alphabet (a-z) in alphabetical order.
Input
The input will consist multiple lines of text.
- 1 <= Number of lines <= 10^2
- 1 <= len(text) <= 10^4
- The text will only contain lowercase alphabetical characters and spaces.
Output
- The output should be the encoded version of the input text, with the most frequent character replaced by 'a', the second most frequent character replaced by 'b', and so on.
- Spaces in the input text should be preserved in the output.(You don't need to encode the space character ' '.)
- You should start to count the frequency after you receive all the input
Example input:
hello john
how are you
Example output:
bcdda eabf
bag hic jak
After counting and sorting the characters based on their frequency and order of occurrence, we have:
- 'o' occurs 4 times
- 'h' occurs 3 times
- 'e', 'l' occurs 2 times
- 'j', 'n', 'w', 'a', 'r', 'y', and 'u' occur 1 time each
Encoding the characters:
- 'o' -> 'a'
- 'h' -> 'b'
- 'e' -> 'c'
- 'l' -> 'd'
- 'j' -> 'e'
- 'n' -> 'f'
- 'w' -> 'g'
- 'a' -> 'h'
- 'r' -> 'i'
- 'y' -> 'j'
- 'u' -> 'k'