Source code for submission s779

fs.c

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. void code(char iter, char **iter2, int **iter3){
  6. switch(iter){
  7. case 'A':
  8. **iter2 = '.';
  9. (*iter2)++;
  10. **iter2 = '-';
  11. (*iter2)++;
  12.  
  13. **iter3 = 2;
  14. (*iter3)++;
  15. break;
  16. case 'B':
  17. **iter2 = '-';
  18. (*iter2)++;
  19. **iter2 = '.';
  20. (*iter2)++;
  21. **iter2 = '.';
  22. (*iter2)++;
  23. **iter2 = '.';
  24. (*iter2)++;
  25.  
  26. **iter3 = 4;
  27. (*iter3)++;
  28. break;
  29. case 'C':
  30. **iter2 = '-';
  31. (*iter2)++;
  32. **iter2 = '.';
  33. (*iter2)++;
  34. **iter2 = '-';
  35. (*iter2)++;
  36. **iter2 = '.';
  37. (*iter2)++;
  38.  
  39. **iter3 = 4;
  40. (*iter3)++;
  41. break;
  42. case 'D':
  43. **iter2 = '-';
  44. (*iter2)++;
  45. **iter2 = '.';
  46. (*iter2)++;
  47. **iter2 = '.';
  48. (*iter2)++;
  49.  
  50. **iter3 = 3;
  51. (*iter3)++;
  52. break;
  53. case 'E':
  54. **iter2 = '.';
  55. (*iter2)++;
  56.  
  57. **iter3 = 1;
  58. (*iter3)++;
  59. break;
  60. case 'F':
  61. **iter2 = '.';
  62. (*iter2)++;
  63. **iter2 = '.';
  64. (*iter2)++;
  65. **iter2 = '-';
  66. (*iter2)++;
  67. **iter2 = '.';
  68. (*iter2)++;
  69.  
  70. **iter3 = 4;
  71. (*iter3)++;
  72. break;
  73. case 'G':
  74. **iter2 = '-';
  75. (*iter2)++;
  76. **iter2 = '-';
  77. (*iter2)++;
  78. **iter2 = '.';
  79. (*iter2)++;
  80.  
  81. **iter3 = 3;
  82. (*iter3)++;
  83. break;
  84. case 'H':
  85. **iter2 = '.';
  86. (*iter2)++;
  87. **iter2 = '.';
  88. (*iter2)++;
  89. **iter2 = '.';
  90. (*iter2)++;
  91. **iter2 = '.';
  92. (*iter2)++;
  93.  
  94. **iter3 = 4;
  95. (*iter3)++;
  96. break;
  97. case 'I':
  98. **iter2 = '.';
  99. (*iter2)++;
  100. **iter2 = '.';
  101. (*iter2)++;
  102.  
  103. **iter3 = 2;
  104. (*iter3)++;
  105. break;
  106. case 'J':
  107. **iter2 = '.';
  108. (*iter2)++;
  109. **iter2 = '-';
  110. (*iter2)++;
  111. **iter2 = '-';
  112. (*iter2)++;
  113. **iter2 = '-';
  114. (*iter2)++;
  115.  
  116. **iter3 = 4;
  117. (*iter3)++;
  118. break;
  119. case 'K':
  120. **iter2 = '-';
  121. (*iter2)++;
  122. **iter2 = '.';
  123. (*iter2)++;
  124. **iter2 = '-';
  125. (*iter2)++;
  126.  
  127. **iter3 = 3;
  128. (*iter3)++;
  129. break;
  130. case 'L':
  131. **iter2 = '.';
  132. (*iter2)++;
  133. **iter2 = '-';
  134. (*iter2)++;
  135. **iter2 = '.';
  136. (*iter2)++;
  137. **iter2 = '.';
  138. (*iter2)++;
  139.  
  140. **iter3 = 4;
  141. (*iter3)++;
  142. break;
  143. case 'M':
  144. **iter2 = '-';
  145. (*iter2)++;
  146. **iter2 = '-';
  147. (*iter2)++;
  148.  
  149. **iter3 = 2;
  150. (*iter3)++;
  151. break;
  152. case 'N':
  153. **iter2 = '-';
  154. (*iter2)++;
  155. **iter2 = '.';
  156. (*iter2)++;
  157.  
  158. **iter3 = 2;
  159. (*iter3)++;
  160. break;
  161. case 'O':
  162. **iter2 = '-';
  163. (*iter2)++;
  164. **iter2 = '-';
  165. (*iter2)++;
  166. **iter2 = '-';
  167. (*iter2)++;
  168.  
  169. **iter3 = 3;
  170. (*iter3)++;
  171. break;
  172. case 'P':
  173. **iter2 = '.';
  174. (*iter2)++;
  175. **iter2 = '-';
  176. (*iter2)++;
  177. **iter2 = '-';
  178. (*iter2)++;
  179. **iter2 = '.';
  180. (*iter2)++;
  181.  
  182. **iter3 = 4;
  183. (*iter3)++;
  184. break;
  185. case 'Q':
  186. **iter2 = '-';
  187. (*iter2)++;
  188. **iter2 = '-';
  189. (*iter2)++;
  190. **iter2 = '.';
  191. (*iter2)++;
  192. **iter2 = '-';
  193. (*iter2)++;
  194.  
  195. **iter3 = 4;
  196. (*iter3)++;
  197. break;
  198. case 'R':
  199. **iter2 = '.';
  200. (*iter2)++;
  201. **iter2 = '-';
  202. (*iter2)++;
  203. **iter2 = '.';
  204. (*iter2)++;
  205.  
  206. **iter3 = 3;
  207. (*iter3)++;
  208. break;
  209. case 'S':
  210. **iter2 = '.';
  211. (*iter2)++;
  212. **iter2 = '.';
  213. (*iter2)++;
  214. **iter2 = '.';
  215. (*iter2)++;
  216.  
  217. **iter3 = 3;
  218. (*iter3)++;
  219. break;
  220. case 'T':
  221. **iter2 = '-';
  222. (*iter2)++;
  223.  
  224. **iter3 = 1;
  225. (*iter3)++;
  226. break;
  227. case 'U':
  228. **iter2 = '.';
  229. (*iter2)++;
  230. **iter2 = '.';
  231. (*iter2)++;
  232. **iter2 = '-';
  233. (*iter2)++;
  234.  
  235. **iter3 = 3;
  236. (*iter3)++;
  237. break;
  238. case 'V':
  239. **iter2 = '.';
  240. (*iter2)++;
  241. **iter2 = '.';
  242. (*iter2)++;
  243. **iter2 = '.';
  244. (*iter2)++;
  245. **iter2 = '-';
  246. (*iter2)++;
  247.  
  248. **iter3 = 4;
  249. (*iter3)++;
  250. break;
  251. case 'W':
  252. **iter2 = '.';
  253. (*iter2)++;
  254. **iter2 = '-';
  255. (*iter2)++;
  256. **iter2 = '-';
  257. (*iter2)++;
  258.  
  259. **iter3 = 3;
  260. (*iter3)++;
  261. break;
  262. case 'X':
  263. **iter2 = '-';
  264. (*iter2)++;
  265. **iter2 = '.';
  266. (*iter2)++;
  267. **iter2 = '.';
  268. (*iter2)++;
  269. **iter2 = '-';
  270. (*iter2)++;
  271.  
  272. **iter3 = 4;
  273. (*iter3)++;
  274. break;
  275. case 'Y':
  276. **iter2 = '-';
  277. (*iter2)++;
  278. **iter2 = '.';
  279. (*iter2)++;
  280. **iter2 = '-';
  281. (*iter2)++;
  282. **iter2 = '-';
  283. (*iter2)++;
  284.  
  285. **iter3 = 4;
  286. (*iter3)++;
  287. break;
  288. case 'Z':
  289. **iter2 = '-';
  290. (*iter2)++;
  291. **iter2 = '-';
  292. (*iter2)++;
  293. **iter2 = '.';
  294. (*iter2)++;
  295. **iter2 = '.';
  296. (*iter2)++;
  297.  
  298. **iter3 = 4;
  299. (*iter3)++;
  300. break;
  301. case '_':
  302. **iter2 = '.';
  303. (*iter2)++;
  304. **iter2 = '.';
  305. (*iter2)++;
  306. **iter2 = '-';
  307. (*iter2)++;
  308. **iter2 = '-';
  309. (*iter2)++;
  310.  
  311. **iter3 = 4;
  312. (*iter3)++;
  313. break;
  314. case '.':
  315. **iter2 = '-';
  316. (*iter2)++;
  317. **iter2 = '-';
  318. (*iter2)++;
  319. **iter2 = '-';
  320. (*iter2)++;
  321. **iter2 = '.';
  322. (*iter2)++;
  323.  
  324. **iter3 = 4;
  325. (*iter3)++;
  326. break;
  327. case ',':
  328. **iter2 = '.';
  329. (*iter2)++;
  330. **iter2 = '-';
  331. (*iter2)++;
  332. **iter2 = '.';
  333. (*iter2)++;
  334. **iter2 = '-';
  335. (*iter2)++;
  336.  
  337. **iter3 = 4;
  338. (*iter3)++;
  339. break;
  340. case '?':
  341. **iter2 = '-';
  342. (*iter2)++;
  343. **iter2 = '-';
  344. (*iter2)++;
  345. **iter2 = '-';
  346. (*iter2)++;
  347. **iter2 = '-';
  348. (*iter2)++;
  349.  
  350. **iter3 = 4;
  351. (*iter3)++;
  352. break;
  353. }
  354.  
  355. }
  356.  
  357. typedef struct
  358. {
  359. char znak;
  360. char* morse;
  361. } ALPHA;
  362.  
  363. static ALPHA alpha[] = {
  364. {'A', ".-"},
  365. {'B', "-..."},
  366. {'C', "-.-."},
  367. {'D', "-.."},
  368. {'E', "."},
  369. {'F', "..-."},
  370. {'G', "--."},
  371. {'H', "...."},
  372. {'I', ".."},
  373. {'J', ".---"},
  374. {'K', "-.-"},
  375. {'L', ".-.."},
  376. {'M', "--"},
  377. {'N', "-."},
  378. {'O', "---"},
  379. {'P', ".--."},
  380. {'Q', "--.-"},
  381. {'R', ".-."},
  382. {'S', "..."},
  383. {'T', "-"},
  384. {'U', "..-"},
  385. {'V', "...-"},
  386. {'W', ".--"},
  387. {'X', "-..-"},
  388. {'Y', "-.--"},
  389. {'Z', "--.."},
  390. {'_', "..--"},
  391. {'.', "---."},
  392. {',', ".-.-"},
  393. {'?', "----"}
  394. };
  395.  
  396. void decode(int iter3, char **iter2){
  397. int i;
  398. char za = (*iter2)[iter3];
  399. (*iter2)[iter3] = 0;
  400. for (i = 0; i < 30; i++)
  401. {
  402. if (!strcmp(alpha[i].morse, *iter2))
  403. {
  404. printf("%c", alpha[i].znak);
  405. break;
  406. }
  407. }
  408.  
  409. (*iter2)[iter3] = za;
  410. (*iter2) += iter3;
  411. }
  412.  
  413. int main(){
  414.  
  415. char *str = malloc(sizeof(char) * 1000);
  416. char *morse = malloc(4000 * sizeof(char));
  417. int *cisla = malloc(1000 * sizeof(int));
  418. char *iter;
  419. char *iter2;
  420. int *iter3;
  421. int i;
  422.  
  423. while (scanf("%s", str) == 1)
  424. {
  425. iter = str;
  426. iter2 = morse;
  427. iter3 = cisla;
  428. while(*iter != 0){
  429. code(*iter, &iter2, &iter3);
  430.  
  431. iter += sizeof(char);
  432. }
  433.  
  434. iter3--;
  435. iter2 = morse;
  436. for(; iter3 >= cisla; iter3--){
  437. decode(*iter3, &iter2);
  438. }
  439. printf("\n");
  440. }
  441. return 0;
  442. }
  443.