Cette semaine, c'est Jonathan qui vous propose un #KataOfTheWeek : Code Morse international
Briefing du Kata : Le but est de décoder les phrases avec le code Morse international Le caractère (-) pour le bip long taah et (.) pour le court (ti). Chaque série de caractère forme une lettre, les lettres sont séparées par un espace ( ) et les mots par un (/)
Voici l'alphabet:
a .- h …. o --- u ..- 1 .---- 6 -…. b -… i .. p .--. v …- 2 ..--- 7 --… c -.-. j .--- q --.- w .-- 3 …-- 8 ---.. d -.. k -.- r .-. x -..- 4 ….- 9 ----. e . l .-.. s … y -.-- 5 ….. 0 ----- f ..-. m -- t - z --.. g --. n -.
Exemples: …. . .-.. .-.. --- / - .- -.- .. -- .- → "hello world" …- .. …- . / .-.. . / -.-. --- -. ..-. .. -. . -- . -. - → "vive le confinement"
Arriverez vous à re-décoder les exemples ?
Saurez-vous résoudre le problème ?
Bon courage !
Et voici une solution proposée par l'auteur en Java:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
public class MorseDecoder {
private static final String LETTER_SEPARATOR = " ";
private static final String WORD_SEPARATOR = "/";
public static final Map<String, String> CODES;
static {
CODES = new HashMap<>();
CODES.put(".-", "a");
CODES.put("-...", "b");
CODES.put("-.-.", "c");
CODES.put("-..", "d");
CODES.put(".", "e");
CODES.put("..-.", "f");
CODES.put("--.", "g");
CODES.put("....", "h");
CODES.put("..", "i");
CODES.put(".---", "j");
CODES.put("-.-", "k");
CODES.put(".-..", "l");
CODES.put("--", "m");
CODES.put("-.", "n");
CODES.put("---", "o");
CODES.put(".--.", "p");
CODES.put("--.-", "q");
CODES.put(".-.", "r");
CODES.put("...", "s");
CODES.put("-", "t");
CODES.put("---", "o");
CODES.put(".--.", "p");
CODES.put("--.-", "q");
CODES.put(".-.", "r");
CODES.put("...", "s");
CODES.put("-", "t");
CODES.put("..-", "u");
CODES.put("...-", "v");
CODES.put(".--", "w");
CODES.put("-..-", "x");
CODES.put("-.--", "y");
CODES.put("--..", "z");
CODES.put(".----", "1");
CODES.put("..---", "2");
CODES.put("...--", "3");
CODES.put("....-", "4");
CODES.put(".....", "5");
CODES.put("-....", "6");
CODES.put("--...", "7");
CODES.put("---..", "8");
CODES.put("----.", "9");
CODES.put("-----", "0");
}
public static void main(String[] args) {
System.out.println(decode(".... . .-.. .-.. --- / - .- -.- .. -- .-"));
System.out.println(decode("...- .. ...- . / .-.. . / -.-. --- -. ..-. .. -. . -- . -. -"));
}
public static String decode(String morseCode) {
return Arrays.stream(morseCode.trim().split(WORD_SEPARATOR))
.map(MorseDecoder::decodeWord)
.collect(Collectors.joining(" "));
}
private static String decodeWord(String morseWord) {
return Arrays.stream(morseWord.trim().split(LETTER_SEPARATOR))
.map(MorseDecoder::decodeChar)
.collect(Collectors.joining());
}
public static String decodeChar(String code) {
return CODES.get(code);
}
}
Votre équipe TakiVeille