Задача от Yandex
Участвовал в YandexCup. Алгоритм тестов от этой компании не принимал моё решение к их задаче.
Вот сама задача.
Задача
Вам нужно написать функцию в виде CommonJS модуля, которая на вход принимает массив чисел (примитив Number) и возвращает строку.
Сигнатура
function(numbers: Number[]): string
Пример оформления задачи
module.exports = function(numbers) {
// code
};
Условия:
- Ваше устройство вывода не исправно и умеет выводить только цифры, латинские буквы, пробел и символ нижнего подчеркивания;
- Нельзя использовать кавычки (литеральные и шаблонные строки) – ', ", ` ;
- Нельзя использовать и создавать объекты String и Symbol;
- Функция на вход принимает массив чисел вида [17,40,47,47,50,62,34,36,12,56,51,62,2,0,2,2];
- Функция должна возвращать сообщение одной последовательностью символов;
- Неизвестные символы программа должна заменять на _
Решение оформлено в виде CommonJS модуля;
Алфавит:
Сообщения, которые удалось расшифровать. Пока полный алфавит не известен.
[14,12,22,10,28,38,53,44,51,55,62,2,0,1,5] === 'ECMAScript 2015'
Примеры: Пример 1
const numbers = [17,40,47,47,50,62,34,36,12,56,51,62,2,0,2,2];
// Hello YaCup 2022
Пример 2
const numbers = [17,40,47,47,50,62,32,50,53,47,39,-1];
// Hello World_
Вот моё решение:
Из условия понятно, что алфавит для расшифровки выглядит таким образом.
const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz _'
Мой код:
module.exports=function(numbers){
return numbers.map((a)=>{
if(a>=63||a<0){
return String.fromCharCode(95)
}
if(a===62){
return String.fromCharCode(32)
}
if(a<=9){
return a
}
if(a<=35){
return String.fromCharCode(a+55)
}
return String.fromCharCode(a+61)
}).join([])
}
Я предполагаю, что из-за String.fromCharCode моё решение не принимало. Интересно посмотреть на другие решения. Каким образом можно ещё получить символы без использования кавычек?
Ответы (2 шт):
Есть куча способов:
console.log(/That's not a string/.source)
console.log((12).toString(36).toUpperCase())
console.log((55-26).toString(36))
console.log(Object.keys({Q:1,_:1,A:1}).join([]))
console.log(0 + ({}+[])[7] + 1)
Вы можете сделать так
module.exports = function(numbers) {
const alphabet = /0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz _/
return numbers.map((a) => {
return alphabet.source[a] ? alphabet.source[a] : alphabet.source[63]
}).join([])
}