Даже без функций.
Один из секретов - придумать такую структуру данных, которая будет моделировать ситуацию из задачи и с которой будет удобно проводить вычисления. Остальное - алгоритмизация вокруг нее.
Пример подхода:
- Сгенерировать матрицу данных
- Сгенерировать узлы таблицы из матрицы данных, положить их в соответствующие массивы. Некоторые массивы - массивы массивов (или двумерные массивы)
var columnsNodes = [[td, td, td], [td,td,td] ...]
var rowsNodes = [[td,td,td], [td,td,td] ...]
var columnsResultsNodes = [td,td,td]
var rowsResultsNodes = [td,td,td]
2.1 В момент создания узла навесить обработчик клика. В объекте события есть свойство .target - это ссылка на узел по которому кликнули.
Имея эту ссылку, можно найти его какой индекс массива в columnsNodes в который входит узел по которому кликнули. Это не единственный способ получить индекс массива с элементами ряда и колонки. Может найдешь более удобный/понятный тебе.
Этому индексу будет/должна соответствовать ячейка из columnsResultsNodes
innerHTML-ем обновляешь значение ячейки по которой кликнули, пересчитываешь сумму для всего ряда (данные можно брать прямо из дом-узлов. Это проще но менее правильно. Правильно можно научиться потом). Тоже самое для колонки.