/
NikolayIvkin
/
TheAlgorithms
Обзор
Документация
Войти
/
NikolayIvkin
/
TheAlgorithms
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/thealgorithms/conversions/MorseCodeConverter.java
98 строк
3 KB
Hardik Pawar
Add `MorseCodeConverter` algorithm (#5749)
14 окт 2024, 10:28
Не верифицирован
14 окт 2024, 10:28
40f2d0c
Код
Авторство
О чём код?
package com.thealgorithms.conversions; import java.util.HashMap; import java.util.Map; /** * Converts text to Morse code and vice-versa. * Text to Morse code: Each letter is separated by a space and each word is separated by a pipe (|). * Example: "HELLO WORLD" -> ".... . .-.. .-.. --- | .-- --- .-. .-.. -.." * * Morse code to text: Each letter is separated by a space and each word is separated by a pipe (|). * Example: ".... . .-.. .-.. --- | .-- --- .-. .-.. -.." -> "HELLO WORLD" * * Applications: Used in radio communications and algorithmic challenges. * * @author Hardvan */ public final class MorseCodeConverter { private MorseCodeConverter() { } private static final Map<Character, String> MORSE_MAP = new HashMap<>(); private static final Map<String, Character> REVERSE_MAP = new HashMap<>(); static { MORSE_MAP.put('A', ".-"); MORSE_MAP.put('B', "-..."); MORSE_MAP.put('C', "-.-."); MORSE_MAP.put('D', "-.."); MORSE_MAP.put('E', "."); MORSE_MAP.put('F', "..-."); MORSE_MAP.put('G', "--."); MORSE_MAP.put('H', "...."); MORSE_MAP.put('I', ".."); MORSE_MAP.put('J', ".---"); MORSE_MAP.put('K', "-.-"); MORSE_MAP.put('L', ".-.."); MORSE_MAP.put('M', "--"); MORSE_MAP.put('N', "-."); MORSE_MAP.put('O', "---"); MORSE_MAP.put('P', ".--."); MORSE_MAP.put('Q', "--.-"); MORSE_MAP.put('R', ".-."); MORSE_MAP.put('S', "..."); MORSE_MAP.put('T', "-"); MORSE_MAP.put('U', "..-"); MORSE_MAP.put('V', "...-"); MORSE_MAP.put('W', ".--"); MORSE_MAP.put('X', "-..-"); MORSE_MAP.put('Y', "-.--"); MORSE_MAP.put('Z', "--.."); // Build reverse map for decoding MORSE_MAP.forEach((k, v) -> REVERSE_MAP.put(v, k)); } /** * Converts text to Morse code. * Each letter is separated by a space and each word is separated by a pipe (|). * * @param text The text to convert to Morse code. * @return The Morse code representation of the text. */ public static String textToMorse(String text) { StringBuilder morse = new StringBuilder(); String[] words = text.toUpperCase().split(" "); for (int i = 0; i < words.length; i++) { for (char c : words[i].toCharArray()) { morse.append(MORSE_MAP.getOrDefault(c, "")).append(" "); } if (i < words.length - 1) { morse.append("| "); } } return morse.toString().trim(); } /** * Converts Morse code to text. * Each letter is separated by a space and each word is separated by a pipe (|). * * @param morse The Morse code to convert to text. * @return The text representation of the Morse code. */ public static String morseToText(String morse) { StringBuilder text = new StringBuilder(); String[] words = morse.split(" \\| "); for (int i = 0; i < words.length; i++) { for (String code : words[i].split(" ")) { text.append(REVERSE_MAP.getOrDefault(code, '?')); } if (i < words.length - 1) { text.append(" "); } } return text.toString(); } }