Решение задачи проходит 5/7 тестов

Описание задачи:

На старой заброшенной базе геодезистов вы нашли код, который возвращает секретные послания, зашифрованные среди географических данных. Скрипт содержит несколько синтаксических ошибок и кажется работает очень медленно. Ваша задача - привести его в порядок.

Формат ввода:

const data = [  
    {  
        geometry: [10, 20],  
        text: ’James’  
    },  
    {  
        geometry: [20, 40],  
        text: ’Bond’  
    },  
    {  
        geometry: [5, 40],  
        text: ’Bond’  
    }  
];  
const dictionary = [’James’, ’Bond’];

Формат вывода

Bond James Bond

Примечания:

В файле task.js описан метод, который принимает на вход два аргумента - data и dictionary. В переменной data передается массив объектов вида:

{  
    geometry: [number, number];  
    text: string;  
}

В переменной dictionary передается массив строк - слова, которые мы умеем расшифровывать. dictionary: string[];

Чтобы получить секретное сообщение, требуется отсортировать все объекты из массива data по первой координате из поля geometry по возрастанию, а затем собрать в строку все поля text из отсортированного массива.

К сожалению, сообщение закодировано на иностранном языке, а переводчик знает только слова, заданные в переменной dictionary. Поэтому если в поле text встречается слово, которого нет в массиве dictionary, сообщение невозможно расшифровать.

Программа должна вернуть полученное сообщение или строку "Unreadable message"(в случае, если сообщение содержит слова, которых нет в словаре).

Решение необходимо предоставить в виде исправленного модуля.

Мое решение:

module.exports = function (inputData, inputDictionary) {
    inputData = inputData
        .sort((firstItem, secondItem) => firstItem.geometry[0] - secondItem.geometry[0])
        .map(item => item.text);
    return inputData.every(txt => inputDictionary.includes(txt))
        ? inputData.join(' ')
        : 'Unreadable message';
};

P.S. Не могу понять, что не так в отрефакторенном коде. Хотелось, чтобы кто-то дал наводку, в какую сторону смотреть.


Ответы (1 шт):

Автор решения: UModeL

Если заменить символы одиночной кавычки на любые другие корректные в JS, то код у Вас вполне рабочий:

function exports(inputData, inputDictionary) {
  inputData = inputData.sort((firstItem, secondItem) => firstItem.geometry[0] - secondItem.geometry[0]);
  return inputData.every(obj => inputDictionary.includes(obj.text)) ?
    inputData.map(item => item.text).join(' ') :
    'Unreadable message';
}
const dictionary = ['James', 'Bond'];

const data = [
  { geometry: [10, 20], text: 'James' },
  { geometry: [20, 40], text: 'Bond' },
  { geometry: [5, 40], text: 'Bond' }
];
console.log(exports(data, dictionary));

const wrongData = [
  { geometry: [10, 20], text: 'James' },
  { geometry: [20, 40], text: 'Bond' },
  { geometry: [5, 40], text: 'Ivan' }
];
console.log(exports(wrongData, dictionary));

→ Ссылка