Помогите понять структуру кода и решение задачи(многомерные массивы) [вопрос о парсинге чисел из строки]

`let x = [
    ['box.1',['no.1','no.2','no.3']],
    ['box.2',['no.1','no.2','no.3']],
    ['box.3',['no.1','no.2','no.3']],
    ['box.4',['no.1','no.2','no.3']],
    ['box.5',['no.1','no.2','no.3']],
    ['box.6',['no.1','no.2','no.3']],
    ['box.7',['no.1','no.2','no.3']],
    ['box.8',['no.1','no.2','no.3']],
    ['box.9',['no.1','no.2','no.3']],
    ['box.10',['no.1','no.2','no.3']],
];`

Вопрос из сайта с задачами: есть коробки, внутри которых помещаются три маленьких коробки: номера первых трёх маленьких коробок։

  • box.1,no.1
  • box.1,no.2
  • box.1,no.3

По той же логике можем сказать, что box.3,no.2 это 8-ая маленькая коробка. нужно написать функцию solution которая на входе получает код box а на выходе получает порядковый номер маленьких коробок, на пример:

  • на входе: box.6,no.1, на выходе։ 16
  • на входе: box.7,no.1, на выходе։ 19
  • на входе: box.8,no.1, на выходе։ 22
  • на входе: box.10,no.2, на выходе։ 29

Правильно ли понимаю структуру матрицы?

Вопрос не понятен. Не вижу примера твоего понимания задачи/структуры.

1 лайк

На мой взгляд тут матрица даже не нужна. Например берём box.6 no1. Это значит, что было уже 5 коробок с 3мя вложенными и ещё надо прибавить одну коробку. Итого 5x3+1.
Box 10 no2 = 9x3+2

1 лайк

А если надо решать с помощью матриц, то да нужен код…

1 лайк

мой пример, это массив(матрица),вопрос правильное ли у меня представление насчёт структуры этой матрицы в соответствии с условиями задачи? если да то вопрос второй как решить эту задачу разделив все числа с помощью split() и умножив их

Структура данных из описания - она дана или это то как ты видишь задачу?

@Anton_Kolyadin подсказывает что можно обойтись и без матрицы. Как раз как ты предполагаешь: достав числа из имен коробок.

Чтобы достать числа нужно:

function getNum(boxNum) {
    return parseInt(boxNum.split('.')[1])
}
console.log(getNum('box.7')) // 7
console.log(getNum('no.2')) // 2
1 лайк

Можно дословное условие задачи?

1 лайк

Структура данных из описания -то как я вижу задачу, но увы ответ не сработал, может знаете какой ни будь другой подход?

это дословное условие, переводил с армянского и уверен что правильно перевёл

Я правильно понимаю что "box.10,no.2" - имеется в виду строка?

Давай сразу на “ты” (если удобно, конечно).

1 лайк

@Vahan_Muradyan, предложенная тобой структура массива в принципе подойдёт. Вопрос больше стоит в ее обработке, то есть в извлечении данных из массива и в алгоритме подсчёта порядкого номера. Как вариант можно просто задать многомерный массив, состоящий из маленьких коробок. i-строка массива означает номер большой коробки.

2 лайка

ок), да это строка

если не затруднит можешь показать свой пример массива?

Если твою задачу разделить на 2 части:

  1. Парсинг входной строки
  2. Поиск позиции в массиве
    В итоге:
    Решение по первой задаче подсказал @dmitry.
    Решение по второй задаче я написал такой код: https://jsfiddle.net/AntonKolyadin/kmtbovjr/34/
1 лайк

Однако, увлекла задачка…
https://jsfiddle.net/AntonKolyadin/kmtbovjr/81/

1 лайк
function getBoxIndex(boxStr) {
	var splittedString = boxStr.split(',')
	var parentBoxNum = parseInt(splittedString[0].split('.')[1])
	var childBoxNum = parseInt(splittedString[1].split('.')[1])
	return (parentBoxNum - 1) * 3 + childBoxNum
}

Представление в виде матриц - корректный подход к моделированию задачи в общем виде. Но в частности можно обойтись парсингом чисел из строки идентификатора.

1 лайк

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

1 лайк