Задача от 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 шт):

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

Есть куча способов:

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)

→ Ссылка
Автор решения: Oraz Durdyyew

Вы можете сделать так

module.exports = function(numbers) {
  const alphabet = /0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz _/
  return numbers.map((a) => {
    return alphabet.source[a] ? alphabet.source[a] : alphabet.source[63]



  }).join([])
}

→ Ссылка