В этом коде для 1 теста он не работает, для 2-го теста он работает. Не найти, где проблема. Может кто-нибудь помочь мне понять о его проблеме.
var arr1 = [".-","-...","-.-.","-..",".","...-.","--.","... .","..",".---","-.-",".-..","--","-.","---",".--." ,"--.-",".-....","-","..-","...-",".--","-..-","-. --","--.."];
var arr2 = ['a','b','c','d','e','f','g','h','i','j','k','l ','m','n','o','p','q','r','s','t','u','v','w','x', 'у', 'з'];
varwords = ["джин","дзен","концерт","msg"]
var mapping = {};
for(let i=0;i<arr1.length;i++) {
mapping[arr1[i]]=arr2[i];
}
const res = word => word.split('').map(c => mapping[c]).join('');
var result = new Set(words.map(res)).size;
console.info(result)
Для этого ввода он работает, но для вышеуказанного массива он не работает, может кто-нибудь помочь мне, почему?
var arr1 = ['z','y','x'];
var arr2 = ['a','b','c'];
var слова = ['zzz','xz','zzz','yzx']
Международная азбука Морзе определяет стандартную кодировку, в которой каждая буква сопоставляется с рядом точек и тире следующим образом:
'a' сопоставляется с ".-", 'b' сопоставляется с "-...", 'c' сопоставляется с "-.-.", и так далее. Для удобства ниже приведена полная таблица для 26 букв английского алфавита:
Дан массив строк-слов, где каждое слово может быть записано как конкатенация азбуки Морзе каждой буквы.
Например, "cab" может быть записано как "-.-..--...", что представляет собой конкатенацию "-.-.", ".-" и "-...". Мы будем называть такую конкатенацию преобразованием слова.
Верните количество различных преобразований среди всех слов, которые у нас есть.
Если вы внимательно посмотрите на два разных примера (массива), которые вы включили, вы обнаружите, что логика преобразования/перевода изменена:
Пример, который работает:
var arr1 = ['z','y','x']; // <- Alphabet A
var arr2 = ['a','b','c']; // <- Alphabet B
var words = ['zzz','xz','zzz','yzx'] // <- Words in Alphabet A
Второй случай:
var arr1 = [".-","-...","-.-." ... ,"--.."]; // <- Alphabet A
var arr2 = ['a','b','c','d','e' ... ,'z']; // <- Alphabet B
var words = ["gin","zen","gig","msg"] // <- Words in Alphabet B
Поскольку порядок трансляции отличается, вы не должны видеть, что первый набор массивов работает точно так же, как второй набор массивов.
Ожидается, что ваш код будет работать так или иначе, поэтому не забудьте соответствующим образом преобразовать операции.
Чтобы обнаружить точку отказа, нужно разбить процесс преобразования на части и console.info
понять, что именно происходит в каждом состоянии:
Принесите этот код:
const res = word => word.split('').map(c => mapping[c]).join('');
К этой форме и внимательно проверяйте, что происходит на каждом шагу. Присмотревшись к выходным данным, вы сможете обнаружить точку разрыва и соответствующим образом провести рефакторинг:
const res = word => {
const wordSplit = word.split('');
console.info({wordSplit}); // <- Check #1: OK
const mapped = wordSplit.map(c => {
console.info(c, mapping[c]); // <- Check #2 FAIL: Problem arises at this point
return mapping[c]
});
console.info({mapped}); // <- Check #3 FAIL
const result = mapped.join('');
console.info({result}); // <- Check #4 FAIL
return result;
}
var arr1 = [".-","-...","-.-.","-..","-","..-.","--.","....","..",".---","-.-",".-..","--","--.","---",".--.","--.-",".-....","-","..-","...-",".--","-..-","-.--","--..","--"];
var arr2 = ['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 = ["gin","zen","gig","msg","mgr","mgr","gig","abp","apb",'bpr']
var mapping = {};
for(let i=0;i<arr1.length;i++) {
mapping[arr2[i]]=arr1[i];
}
const res = word => word.split('').map(c => mapping[c]).join('');
var result = new Set(words.map(res)).size;
console.info(result)