Source code for submission s554

Fs.java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package basic;
  6.  
  7. import java.io.BufferedReader;
  8. import java.io.InputStreamReader;
  9. import java.util.Arrays;
  10. import java.util.HashMap;
  11. import java.util.Iterator;
  12. import java.util.Map;
  13. import java.util.Map.Entry;
  14. import java.util.StringTokenizer;
  15. import java.util.logging.Level;
  16. import java.util.logging.Logger;
  17.  
  18. /**
  19.  *
  20.  * @author cteam043
  21.  */
  22. public class Fs {
  23.  
  24. static final double EPS = 1E-7;
  25.  
  26. public Fs() {
  27.  
  28. encodingSToM = new HashMap<String, String>();
  29. // first to check
  30. encodingSToM.put("A", ".-");
  31. encodingSToM.put("B", "-...");
  32. encodingSToM.put("C", "-.-.");
  33. encodingSToM.put("D", "-..");
  34. encodingSToM.put("E", ".");
  35. encodingSToM.put("F", "..-.");
  36. encodingSToM.put("G", "--.");
  37. encodingSToM.put("H", "....");
  38. encodingSToM.put("I", "..");
  39. encodingSToM.put("J", ".---");
  40. encodingSToM.put("K", "-.-");
  41. encodingSToM.put("L", ".-..");
  42. encodingSToM.put("M", "--");
  43. encodingSToM.put("N", "-.");
  44. encodingSToM.put("O", "---");
  45. encodingSToM.put("P", ".--.");
  46. encodingSToM.put("Q", "--.-");
  47. encodingSToM.put("R", ".-.");
  48. encodingSToM.put("S", "...");
  49. encodingSToM.put("T", "-");
  50. encodingSToM.put("U", "..-");
  51. encodingSToM.put("V", "...-");
  52. encodingSToM.put("W", ".--");
  53. encodingSToM.put("X", "-..-");
  54. encodingSToM.put("Y", "-.--");
  55. encodingSToM.put("Z", "--..");
  56. encodingSToM.put("_", "..--");
  57. encodingSToM.put(",", ".-.-");
  58. encodingSToM.put(".", "---.");
  59. encodingSToM.put("?", "----");
  60.  
  61. encodingMToS = invertMap(encodingSToM);
  62. inputText = "";
  63. morseText = "";
  64. morseNumbers = "";
  65. outputText = "";
  66. outputNumbers = "";
  67.  
  68.  
  69. }
  70.  
  71. private HashMap<String, String> invertMap(Map<String, String> input) {
  72. HashMap<String, String> output = new HashMap<String, String>();
  73. for (Entry<String, String> entry : input.entrySet()) {
  74. String outputV = entry.getKey();
  75. String outputK = entry.getValue();
  76. output.put(outputK, outputV);
  77. }
  78. return output;
  79. }
  80.  
  81. String nextToken() throws Exception {
  82. while (!st.hasMoreTokens()) {
  83. st = new StringTokenizer(input.readLine());
  84. }
  85. return st.nextToken();
  86. }
  87.  
  88. int nextInt() throws Exception {
  89. return Integer.parseInt(nextToken());
  90. }
  91. HashMap<String, String> encodingSToM;
  92. HashMap<String, String> encodingMToS;
  93. String inputText;
  94. String morseText;
  95. String morseNumbers;
  96. String outputText;
  97. String outputNumbers;
  98. boolean testOutput;
  99.  
  100. private void createMorse() {
  101. String aChar;
  102. String charsMorse;
  103.  
  104. for (int i = 0; i < inputText.length(); i++) {
  105. // CHECK
  106. aChar = Character.toString(inputText.charAt(i));
  107. if (testOutput) {
  108. System.out.println("Char is " + aChar);
  109. }
  110. charsMorse = encodingSToM.get(aChar);
  111. if (testOutput) {
  112. System.out.println("charsMorse is " + charsMorse);
  113. }
  114. if (testOutput) {
  115. System.out.println("charsMorse.length is " + charsMorse.length());
  116. }
  117. morseNumbers = morseNumbers.concat(String.valueOf(charsMorse.length()));
  118. morseText = morseText.concat(charsMorse);
  119. }
  120.  
  121. }
  122.  
  123. private void createPlainText() {
  124. String charsMorse;
  125. String plainChar;
  126. int morsePos = 0;
  127. int morseCharLen = 0;
  128.  
  129. for (int i = 0; i < inputText.length(); i++) {
  130.  
  131. // CHECK = Character.toString(inputText.charAt(i));
  132. morseCharLen = Integer.parseInt(Character.toString(outputNumbers.charAt(i)));
  133. if (testOutput) {
  134. System.out.println("morseCharLen is " + morseCharLen);
  135. }
  136. if (testOutput) {
  137. System.out.println("morsePos is " + morsePos);
  138. }
  139.  
  140. charsMorse = morseText.substring(morsePos, morsePos + morseCharLen);
  141. if (testOutput) {
  142. System.out.println("charsMorse is " + charsMorse);
  143. }
  144. plainChar = encodingMToS.get(charsMorse);
  145. if (testOutput) {
  146. System.out.println("plainChar is " + plainChar);
  147. }
  148. outputText = outputText.concat(plainChar);
  149. morsePos += morseCharLen;
  150. }
  151.  
  152. }
  153.  
  154. private void reverseNumbers() {
  155. String aNumber;
  156. for (int i = 0; i < morseNumbers.length(); i++) {
  157. // CHECK
  158. aNumber = Character.toString(morseNumbers.charAt(morseNumbers.length() - i - 1));
  159. outputNumbers = outputNumbers.concat(aNumber);
  160. }
  161.  
  162. }
  163.  
  164. public void solve() {
  165. testOutput = false;
  166. while (1 == 1) {
  167. try {
  168.  
  169. inputText = nextToken();
  170. } catch (Exception ex) {
  171. return;
  172. }
  173. createMorse();
  174.  
  175. if (testOutput) {
  176. System.out.println("Code:\n" + morseText);
  177. System.out.println("Numbers:\n" + morseNumbers);
  178. }
  179.  
  180. reverseNumbers();
  181. createPlainText();
  182.  
  183. if (testOutput) {
  184. System.out.println("Plaintext:\n" + outputText);
  185. }
  186.  
  187. System.out.println(outputText);
  188.  
  189. }
  190. }
  191.  
  192. /**
  193.   * @param args the command line arguments
  194.   */
  195. public static void main(String[] args) throws Exception {
  196. Fs instance = new Fs();
  197. instance.solve();
  198. }
  199. }
  200.