@Katsimoto

В чём может быть ошибка в коде?

Ребят, такая ситуация, решил задачу на ресурсе типа codewars, загружаю туда код, а он выдаёт ошибку. Где - не показывает, просто типа ошибка и всё. В хэлпе говорят что это код скорее всего неправильный, но в консоле и в девтулс (в девтулс через prompt получаем input_data) всё работает нормально, никаких ошибок нет, код исполняется. Подскажите пожалуйста, в чём может быть ошибка в коде?

Внутренние тесты, доступные на самом ресурсе, тоже проходит нормально. То есть input_data ввод ловит. Но при загрузке и полной проверке отклоняет, в хэлпе говорят типа не проходит дополнительные внутренние тесты, смотрите типа код.

Код должен принимать цифры, и возвращать все возможные варианты при условии что каждая цифра может принимать несколько значений, все возможные значения в массиве base_data.

Нужно чтобы код исполнялся за 1 секунду, максимальный ввод - 8 цифр. Ограничение памяти 64 мб. Подскажите пожалуйста варианты оптимизации кода.

Код:
spoiler
const readline = require('readline')

const rl = readline.createInterface({
  input: process.stdin
})

rl.on('line', function(line){
	console.log(main(line))
})

function main(input_data) {

	let base_data = [
	  {number: '0', value: '08'},
	  {number: '1', value: '124'},
	  {number: '2', value: '1235'},
	  {number: '3', value: '236'},
	  {number: '4', value: '1457'},
	  {number: '5', value: '24568'},
	  {number: '6', value: '3569'},
	  {number: '7', value: '478'},
	  {number: '8', value: '05789'},
	  {number: '9', value: '689'}
	]
	
	let final_data
	let i = 0
	
	if (input_data.length == 1) {
		final_data = base_data.find(item => item.number == input_data)
		return final_data = final_data.value.split('').join(',')
	}

	final_data = []
	input_data = input_data.split('')
	input_data.sort()
	
	while (i < input_data.length) {
	  final_data[i] = base_data.find(item => item.number == input_data[i])
	  final_data[i] = final_data[i].value.split('')
	  ++i
	}

	let result = final_data.reduce((acc1, num1) => acc1.reduce((acc2, num2) => acc2.concat(num1.map(num3 => [].concat(num2, num3))), []))

	result = result.map(acc1 => acc1.join(''))

	return result = result.join(',')
}
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
final_data.reduce((acc1, num1) => acc1.reduce((acc2, num2) => acc2.concat(num1.map(num3 => [].concat(num2, num3))), []))

Вот это выглядит прям очень нехорошо - acc2.concat следует заменить на acc2.push, нет никакой необходимости в создании нового массива на каждом шаге (и, соответственно, копировании всех его элементов), можно добавлять новые элементы в существующий массив:

final_data.reduce((acc1, num1) => {
  return acc1.reduce((acc2, num2) => {
    acc2.push(...num1.map(num3 => [...num2, ...num3]));
    return acc2;
  }, [])
})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы