Ответы Mail.ru: По какой формуле можно решить подобную задачу?

Нет, это нельзя решить на языке программирования.

Язык программирования предназначен для записи алгоритма решения, который к тому моменту уже продуман и сформулирован, а не для процесса решения задачи.

Решается это методом исключения за 1 минуту на бумажке:

Миша - не Герасимов

Володя - не Иванов и не Герасимов, значит, Семёнов.

Значит, Герасимов - Петя.

И Мише остаётся быть Ивановым.

По заданным ограничениям из условия задачи:

Если в строке или столбце пустой осталась одна клетка, то это - и есть ответ:

Исключаем клетки в строках и столбцах, где уже есть ответ:

Добиваем последнюю клетку:

А дальше можешь написать на императивном языке (в т.ч. JS, Python) код, который пройдёт по таблице в указанной последовательности и отметит клетки, или код, который просто напечатает зашитый внутри ответ.

Или на SQL или Прологе код, который подберёт ответ, исходя из ограничений.

Или на императивном языке написать требуемое подмножество SQL или Пролога, а на нём уже - код, который подберёт ответ, исходя из ограничений.

В общем, дерзай.