对于这个项目,我正在尝试解码给定的莫尔斯代码字符串。编码字符由单个空格分隔,单词由三个空格分隔。我越来越难以超越单词空间。我一直得到“wordundefinedword”。
decodeMorse = function(morseCode) {
outPut = "";
for (var i = 0; i < morseCode.split(" ").length; i++) {
if (i === " ") {
outPut += " ";
} else {
outPut += MORSE_CODE[morseCode.split(" ")[i]];
}
}
return outPut;
}
示例:“”.... -.--“” - .- - 。“” - &gt; “嗨,老兄” 对不起,奇怪的报价。它不会显示没有外部空间的空间。
答案 0 :(得分:2)
也许有两个嵌套的循环。外部循环将您的摩尔斯电码分成三个空格,内部循环将单词拆分一个空格。这将解析出该字母,然后您可以使用莫尔斯代码字母的枚举来映射字母数字字符。
// message = Halp! Morse code is driving me nuts!
var message = ".... .- .-.. .--. -·-·-- -- --- .-. ... . -.-. --- -.. . .. ... -.. .-. .. ...- .. -. --. -- . -. ..- - ... -·-·--";
var alphabet = {
"-----":"0",
".----":"1",
"..---":"2",
"...--":"3",
"....-":"4",
".....":"5",
"-....":"6",
"--...":"7",
"---..":"8",
"----.":"9",
".-":"a",
"-...":"b",
"-.-.":"c",
"-..":"d",
".":"e",
"..-.":"f",
"--.":"g",
"....":"h",
"..":"i",
".---":"j",
"-.-":"k",
".-..":"l",
"--":"m",
"-.":"n",
"---":"o",
".--.":"p",
"--.-":"q",
".-.":"r",
"...":"s",
"-":"t",
"..-":"u",
"...-":"v",
".--":"w",
"-..-":"x",
"-.--":"y",
"--..":"z",
"/":" ",
"-·-·--":"!",
"·-·-·-":".",
"--··--":","
};
var messageConverted = [];
message.split(" ").map(function (word) {
word.split(" ").map(function (letter) {
messageConverted.push(alphabet[letter]);
});
messageConverted.push(" ");
});
console.log(messageConverted.join(""));
或类似的东西。这个枚举不完整(大写,标点符号),但你明白了。
答案 1 :(得分:2)
以下是使用.map()
,.split()
和.join()
的方法。
function decodeMorse(morseCode) {
var ref = {
'.-': 'a',
'-...': 'b',
'-.-.': 'c',
'-..': 'd',
'.': 'e',
'..-.': 'f',
'--.': 'g',
'....': 'h',
'..': 'i',
'.---': 'j',
'-.-': 'k',
'.-..': 'l',
'--': 'm',
'-.': 'n',
'---': 'o',
'.--.': 'p',
'--.-': 'q',
'.-.': 'r',
'...': 's',
'-': 't',
'..-': 'u',
'...-': 'v',
'.--': 'w',
'-..-': 'x',
'-.--': 'y',
'--..': 'z',
'.----': '1',
'..---': '2',
'...--': '3',
'....-': '4',
'.....': '5',
'-....': '6',
'--...': '7',
'---..': '8',
'----.': '9',
'-----': '0',
};
return morseCode
.split(' ')
.map(
a => a
.split(' ')
.map(
b => ref[b]
).join('')
).join(' ');
}
var decoded = decodeMorse(".-- --- .-. -.. .-- --- .-. -..");
console.log(decoded);
答案 2 :(得分:2)
decodeMorse = function( morseCode ) {
morseCode = morseCode.split( " " ); // get single words
var result = "";
for( var i = 0; i < morseCode.length; i ++ ) {
morseCode[i] = morseCode[i].split( " " ); // get single characters
for( let a = 0; a < morseCode[i].length; a ++ ) {
if( morseCode[i][a] != "" ) {
result += MORSE_CODE[ morseCode[i][a] ];
}
}
if( i < ( morseCode.length -1 ) ) { // add space after word
result += " ";
}
}
return result.trim();
}
decodeMorse('.... . -.-- .--- ..- -.. .') // "HEY JUDE"
decodeMorse(' . ') // "E"
在codewars.com上运行正常。如果不是codewars.com,则需要编写一个变量MORSE_CODE来定义像这样的摩尔斯字符:
var MORSE_CODE = {
"-----":"0",
".----":"1",
"..---":"2",
"...--":"3",
"....-":"4",
".....":"5",
"-....":"6",
"--...":"7",
"---..":"8",
"----.":"9",
".-":"A",
"-...":"B",
"-.-.":"C",
"-..":"D",
".":"E",
"..-.":"F",
"--.":"G",
"....":"H",
"..":"I",
".---":"J",
"-.-":"K",
".-..":"L",
"--":"M",
"-.":"N",
"---":"O",
".--.":"P",
"--.-":"Q",
".-.":"R",
"...":"S",
"-":"T",
"..-":"U",
"...-":"V",
".--":"W",
"-..-":"X",
"-.--":"Y",
"--..":"Z",
"-.-.--":"!",
".-.-.-":".",
"--..--":","
};
希望我的代码可以为您提供帮助。
答案 3 :(得分:1)
莫尔斯电文示例:
var message = ".... .- .-.. .--. -.-.-- -- --- .-. ... . -.-. --- -.. . .. ... -.. .-. .. ...- .. -. --. -- . -. ..- - ... -.-.--";
摩尔斯词典:
var dictionary= {
"-----":"0",
".----":"1",
"..---":"2",
"...--":"3",
"....-":"4",
".....":"5",
"-....":"6",
"--...":"7",
"---..":"8",
"----.":"9",
".-":"a",
"-...":"b",
"-.-.":"c",
"-..":"d",
".":"e",
"..-.":"f",
"--.":"g",
"....":"h",
"..":"i",
".---":"j",
"-.-":"k",
".-..":"l",
"--":"m",
"-.":"n",
"---":"o",
".--.":"p",
"--.-":"q",
".-.":"r",
"...":"s",
"-":"t",
"..-":"u",
"...-":"v",
".--":"w",
"-..-":"x",
"-.--":"y",
"--..":"z",
"-.-.--":"!",
".-.-.-":".",
"--..--":","
};
搜索以.
或-
开头的模式并进行翻译:
var representation = message.replace(/([.-]+[-.]*)/g, (_, x) =>dictionary [x]);
console.log(representation);
答案 4 :(得分:1)
另一个基于2个循环的解决方案。通过split(“”)-(具有3个分隔符)在莫尔斯电码中分离单词的方式-当它识别3个分隔符时,将莫尔斯电码拆分为单词。现在您有了一个x字符串数组。为了访问摩尔斯电码中的每个元素(一个字母),您应该通过遍历字符串数组(您可以使用“地图”)进行另一次拆分,但是现在 带split(“”)-(带有1个分隔符)。现在您有了一个包含子数组的数组,每个子数组代表一个单词(当然是摩尔斯电码)。 为了遍历摩尔斯电码的字典(一个对象) 您可以通过Object.keys等将其转换为数组,然后在转换后的数组中找到特定的字母(以摩尔斯为单位)(搜索特定的键)。
莫尔斯电码示例:
decodeMorse('.... . -.-- .--- ..- -.. .');
//should return:"HEY JUDE"
功能:
decodeMorse = function(morseCode){
var ind=0;
var answer = [];
const TOT_MORSE_CODE = {
".-": "a", "-...":"b", "-.-.": "c", "-..": "d", ".":"e",
"..-.":"f", "--.":"g", "....":"h", "..":"i", ".---":"j",
"-.-
":"k", ".-..":"l", "--":"m", "-.":"n", "---":"o", ".-
-.":"p",
"--.-":"q", ".-.":"r", "...":"s", "-":"t", "..-":"u", "...-
":"v", ".--":"w", "-..-":"x", "-.--":"y", "--..":"z", ".----
":"1", "..---":"2", "...--":"3", "....-":"4", ".....":"5",
"-....":"6", "--...":"7", "---..":"8", "----.":"9", "-----
":"0", "|":" "
};
const moerse_keys = Object.keys(TOT_MORSE_CODE);/*converting
the object into an array*/
const moerse_values = Object.values(TOT_MORSE_CODE);
var words_in_morse = morseCode.split (' ');
/*sperating the morse code by words*/
var letters_in_morse =
words_in_morse.map(word => word.split(' '));
/*sperating the morse code by letters for each word*/
for (i=0 ; i<letters_in_morse.length ; i++) {
for (j=0 ; j<letters_in_morse[i].length ; j++) {
if ( moerse_keys.includes(letters_in_morse[i][j]) ) {
ind = moerse_keys.indexOf( letters_in_morse[i][j] );
answer.push(moerse_values[ind]);
}
if (j===letters_in_morse[i].length-1 ) { /*for seperate
words by ' '*/
answer.push(' ');
}
}
}
answer.pop(); /*to remove the last ' ' (avoiding getting
"HEY JUDE ")*/
return answer.join('').toUpperCase();
}
答案 5 :(得分:0)
const MorseCode = str => {
var dictionary = {
"-----": "0",
".----": "1",
"..---": "2",
"...--": "3",
"....-": "4",
".....": "5",
"-....": "6",
"--...": "7",
"---..": "8",
"----.": "9",
".-": "a",
"-...": "b",
"-.-.": "c",
"-..": "d",
".": "e",
"..-.": "f",
"--.": "g",
"....": "h",
"..": "i",
".---": "j",
"-.-": "k",
".-..": "l",
"--": "m",
"-.": "n",
"---": "o",
".--.": "p",
"--.-": "q",
".-.": "r",
"...": "s",
"-": "t",
"..-": "u",
"...-": "v",
".--": "w",
"-..-": "x",
"-.--": "y",
"--..": "z",
"-.-.--": "!",
".-.-.-": ".",
"--..--": ","
};
var words = ''
str.split(" ").forEach(cur => {
if(cur === ""){
words += " "
}else{
if(dictionary[cur]){
words += dictionary[cur]
}
}
});
return (words.split(" ")).join(" ")
}
const getPhrase = MorseCode(".... . -.-- .--- ..- -.. .")
console.log(getPhrase);
答案 6 :(得分:0)
let STR = "hello".split("");
// % = space
let morse = ".-%-...%-.-.%-..%.%..-%--.%....%..%.---%-.-%.-..%--%-.%---%.--.%--.-%.-.%...%-%..-%...-%.--%-..-%-.--%--..".split("%");
let alphabet = "abcdefghijklmnopqrstuvwxyz".split("")
let output = [];
for(let i = 0; i < STR.length; i++){
output.push(morse[alphabet.indexOf(STR[i])])
}
console.log(output.join(" "));
这是为一个小写单词制作的,如您所见,它将文本转换为莫尔斯电码,而不是将莫尔斯电码转换为文本
答案 7 :(得分:0)
这是一个使用 .map()、.split()、.join() 和 .trim() 的方法。它在代码战中对我来说很好用。摩尔斯电码表已预先加载为 MORSE_CODE 上的字典。因此,无需像我在此示例中那样编写整个字典。
function decodeMorse(morseCode) {
var letter = {
'.-': 'a',
'-...': 'b',
'-.-.': 'c',
'-..': 'd',
'.': 'e',
'..-.': 'f',
'--.': 'g',
'....': 'h',
'..': 'i',
'.---': 'j',
'-.-': 'k',
'.-..': 'l',
'--': 'm',
'-.': 'n',
'---': 'o',
'.--.': 'p',
'--.-': 'q',
'.-.': 'r',
'...': 's',
'-': 't',
'..-': 'u',
'...-': 'v',
'.--': 'w',
'-..-': 'x',
'-.--': 'y',
'--..': 'z',
'.----': '1',
'..---': '2',
'...--': '3',
'....-': '4',
'.....': '5',
'-....': '6',
'--...': '7',
'---..': '8',
'----.': '9',
'-----': '0',
};
return morseCode
.split(' ')
.map(
a => a
.split(' ')
.map(
b => letters[b]
).join('')
).join(' ')
.trim() ;
}
var decoded = decodeMorse(" .-- --- .-. -.. .-- --- .-. -..");
console.log(decoded);
答案 8 :(得分:0)
可以在 https://github.com/zizwiz/Convert-Text-to-Morse-and-Play-it 中找到一个简单的 C# 示例,允许将文本转换为 tp Morse,并将 morse 转换为 Text 并且还会播放 Morse。
使用间距如下
<summary>
Dot = 1 unit
Dash = 3 units
Between dots and dashes in letter = 1 unit
Between Chars = 3 units
Between words = 7 units
</summary>