/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package basic;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author cteam043
*/
public class Fs {
static final double EPS = 1E-7;
public Fs() {
encodingSToM
= new HashMap
<String, String
>(); // first to check
encodingSToM.put("A", ".-");
encodingSToM.put("B", "-...");
encodingSToM.put("C", "-.-.");
encodingSToM.put("D", "-..");
encodingSToM.put("E", ".");
encodingSToM.put("F", "..-.");
encodingSToM.put("G", "--.");
encodingSToM.put("H", "....");
encodingSToM.put("I", "..");
encodingSToM.put("J", ".---");
encodingSToM.put("K", "-.-");
encodingSToM.put("L", ".-..");
encodingSToM.put("M", "--");
encodingSToM.put("N", "-.");
encodingSToM.put("O", "---");
encodingSToM.put("P", ".--.");
encodingSToM.put("Q", "--.-");
encodingSToM.put("R", ".-.");
encodingSToM.put("S", "...");
encodingSToM.put("T", "-");
encodingSToM.put("U", "..-");
encodingSToM.put("V", "...-");
encodingSToM.put("W", ".--");
encodingSToM.put("X", "-..-");
encodingSToM.put("Y", "-.--");
encodingSToM.put("Z", "--..");
encodingSToM.put("_", "..--");
encodingSToM.put(",", ".-.-");
encodingSToM.put(".", "---.");
encodingSToM.put("?", "----");
encodingMToS = invertMap(encodingSToM);
inputText = "";
morseText = "";
morseNumbers = "";
outputText = "";
outputNumbers = "";
}
private HashMap
<String, String
> invertMap
(Map
<String, String
> input
) { HashMap
<String, String
> output
= new HashMap
<String, String
>(); for (Entry
<String, String
> entry
: input.
entrySet()) { String outputV
= entry.
getKey(); String outputK
= entry.
getValue(); output.put(outputK, outputV);
}
return output;
}
while (!st.hasMoreTokens()) {
}
return st.nextToken();
}
return Integer.
parseInt(nextToken
()); }
HashMap
<String, String
> encodingSToM
; HashMap
<String, String
> encodingMToS
; boolean testOutput;
private void createMorse() {
for (int i = 0; i < inputText.length(); i++) {
// CHECK
aChar
= Character.
toString(inputText.
charAt(i
)); if (testOutput) {
System.
out.
println("Char is " + aChar
); }
charsMorse = encodingSToM.get(aChar);
if (testOutput) {
System.
out.
println("charsMorse is " + charsMorse
); }
if (testOutput) {
System.
out.
println("charsMorse.length is " + charsMorse.
length()); }
morseNumbers
= morseNumbers.
concat(String.
valueOf(charsMorse.
length())); morseText = morseText.concat(charsMorse);
}
}
private void createPlainText() {
int morsePos = 0;
int morseCharLen = 0;
for (int i = 0; i < inputText.length(); i++) {
// CHECK = Character.toString(inputText.charAt(i));
if (testOutput) {
System.
out.
println("morseCharLen is " + morseCharLen
); }
if (testOutput) {
System.
out.
println("morsePos is " + morsePos
); }
charsMorse = morseText.substring(morsePos, morsePos + morseCharLen);
if (testOutput) {
System.
out.
println("charsMorse is " + charsMorse
); }
plainChar = encodingMToS.get(charsMorse);
if (testOutput) {
System.
out.
println("plainChar is " + plainChar
); }
outputText = outputText.concat(plainChar);
morsePos += morseCharLen;
}
}
private void reverseNumbers() {
for (int i = 0; i < morseNumbers.length(); i++) {
// CHECK
aNumber
= Character.
toString(morseNumbers.
charAt(morseNumbers.
length() - i
- 1)); outputNumbers = outputNumbers.concat(aNumber);
}
}
public void solve() {
testOutput = false;
while (1 == 1) {
try {
inputText = nextToken();
return;
}
createMorse();
if (testOutput) {
System.
out.
println("Code:\n" + morseText
); System.
out.
println("Numbers:\n" + morseNumbers
); }
reverseNumbers();
createPlainText();
if (testOutput) {
System.
out.
println("Plaintext:\n" + outputText
); }
System.
out.
println(outputText
);
}
}
/**
* @param args the command line arguments
*/
Fs instance = new Fs();
instance.solve();
}
}