В вопросе «Уникальные слова кода Морзе» я столкнулся с проблемой при использовании JavaScript

В этом коде для 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" может быть записано как "-.-..--...", что представляет собой конкатенацию "-.-.", ".-" и "-...". Мы будем называть такую ​​конкатенацию преобразованием слова.

Верните количество различных преобразований среди всех слов, которые у нас есть.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы внимательно посмотрите на два разных примера (массива), которые вы включили, вы обнаружите, что логика преобразования/перевода изменена:

Пример, который работает:

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;
}

Спасибо @Kostas Получил решение после вашего предложения

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)

Другие вопросы по теме