Вообще согласен, если это действительно будет CRM, описанное в вопросе - это так, мелочи. Потому что основная часть работы - это инструменты сотрудника в личном кабинете. А о них что-то ни слова.
Руслан Шадура: повторяю: ТЗ не будет. То, что вы с заказчиком сейчас считаете ТЗ, с тем, что ему действительно нужно, будет иметь довольно мало общего. Если, конечно, вы собираетесь делать рабочий инструмент, а не просто выполнить заказ от сих до сих.
Aves: да, я ошибался. Дешевле все писать в линейный массив и перебирать его тупо подряд, даже когда понадобится доступ по координатам. А если он требуется часто - кэшировать.
dom1n1k: Это уже забота JS-движка. Обычно их делают люди, которые уж такую-то ерунду способны предвидеть и сделать оптимально. Как правило, можно уверенно считать, что любой разреженный массив - это объект со всеми вытекающими плюсами и минусами.
По условиям имеем чрезвычайно разреженный массив, в котором при последовательном переборе проверок на undefined будет на несколько порядков больше, чем собственно элементов.
Собственно, индексы могут быть отрицательными, массив все равно станет объектом.
Что встроенные методы языка будут не хуже самодельных велосипедов с картами и хэшами - это, по-моему, настолько очевидно, что даже нет смысла обсуждать.
a16a: делая, как легче - никогда ничему новому не научишься.
Всякая мелкая фигня - отличное место для непринужденного знакомства с новыми технологиями. Потом, распробовав, их уже можно будет уверенно применять на чем-нибудь серьезном.
В данной задаче, например, можно было попробовать SVG...
Vernal96: экспоненциальная зависимость - от количества цифр, которые нужно найти. У каждой следующей - от 1 до 8 вариантов. Но в судоку всего 81 цифра, так что это, конечно, не страшно при нынешних мощностях.
Vernal96: открою вам один секрет судоку: цифры не имеют значения. Если поменять местами все 9 с 1, головомка останется ровно так же однозначно решаемой. Так что при двух цифрах на поле можно вообще сгенерить ЛЮБУЮ готовую судоку и заменить соответствующие цифры.
Если они одинаковы, а в готовой - нет (или наоборот), то ее можно повернуть, отзеркалить, переставить тройки столбцов или строк - и получить нужное попадание.
Vernal96: ну, тогда, может быть, и имеет смысл перебор с возвратом.
Хотя я не представляю, зачем это может быть нужно. Время-то в таком переборе растет по экспоненте, а у вас исходных данных - чуть.
Быстрее может оказаться пятьсот раз подряд нагенерить дополнительных случайных цифр в надежде наткнуться на тот набор, который даст единственное решение.
Vernal96: судоку с парой цифр имеет несколько решений. Если вам нужно именно создавать их, то стоит идти от противного - создать непротиворечивый ответ и убирать из него цифры, пока решение получается однозначным.
Ну, или поискать в интернете исходники программ, которые это делают уже лет пятнадцать...