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

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']],
    ];
    function solution(x){
        for(let i=0;i<x.length;i++){
            for(let j=0; j<i;j++){
              x.split('.')
            }
        }
    }

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

  • 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

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


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

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

Собственно номер элемента складывается из: номер строки*3+номер столбца+1

let x = [
    ['op.1',['A','B','V']],
    ['op.2',['no4','no5','no6']],
    ['op.3',['no7','no8','no9']],
    ['op.4',['no10','WWWW','no12']],
    ['op.5',['no13','no14','no15']],
    ['op.6',['no16','no17','no18']],
    ['op.7',['no19','no20','no21']],
    ['op.8',['no22','no23','no24']],
    ['op.9',['no25','no26','no27']],
    ['op.10',['no28','no29','no30']],
];


function solution(x){
    let s=2;
    for(i=0;i<x.length;i++){
        for (j=0; j<x[i][1].length; j++){
            console.log(x[i][1][j]+" = "+(3*i+j+1));
        }
    }
}

Вывод (фрагмент)

A = 1
B = 2
V = 3
no4 = 4
no5 = 5
no6 = 6
no7 = 7
no8 = 8
no9 = 9
no10 = 10
WWWW = 11

Возможно стоит более четко описать задачу. Если вы обращаетесь к элементу x[i][1][j] то его номер по порядку = 3*i+j+1, где 3 это размерность вложенного массива. Если вложенные массивы разной длины, то нужно последовательно суммировать их длины.

Это стандартная задача преобразования линейного массива в двумерный и обратно.

После дополнительных условий мы имеем на входе данные определенной структуры. Нужно вытащить из них числа. Расчет ведем по той же формуле.

var inbox="box.7,no.1";
var data=inbox.split(',');
var boxN=parseInt(data[0].split('.')[1]);
var itemN=parseInt(data[1].split('.')[1]);
var res=3*(boxN-1)+itemN;
→ Ссылка
Автор решения: Vahan Muradyan

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

→ Ссылка