Обратный процесс - из картинки получить кроссворд - понятно. Решить кроссворд кодом - зачем?
Автоматически получить из картинки корректный кроссворд невозможно без автоматической процедуры его решения. Посчитать пиксели по битмапу - дело нехитрое, но как вы убедитесь, что полученый кроссворд имеет решение? Если вручную - то это, скорее, полу-автоматическое построение кроссворда. К тому же, вручную легко ошибиться "в свою пользу" - вы ведь уже знаете, что должно получиться.
Quote (Hugo)
Обратный процесс - из картинки получить кроссворд - понятно. Решить кроссворд кодом - зачем?
Автоматически получить из картинки корректный кроссворд невозможно без автоматической процедуры его решения. Посчитать пиксели по битмапу - дело нехитрое, но как вы убедитесь, что полученый кроссворд имеет решение? Если вручную - то это, скорее, полу-автоматическое построение кроссворда. К тому же, вручную легко ошибиться "в свою пользу" - вы ведь уже знаете, что должно получиться.Формуляр
Я такими кроссвордами не увлекаюсь - как-то времени жалко. В дороге всегда за рулём - а когда ещё решать? Но мне кажется, что составить кроссворд из готовой картинки несложно, и код будет простым - посчитать количество непрерывных групп и количество заполненных ячеек в каждой легко. И смысл есть - продать журналу. А вот наоборот - и сложнее, и смысл только собственно в написании кода, но не в применении.
Я такими кроссвордами не увлекаюсь - как-то времени жалко. В дороге всегда за рулём - а когда ещё решать? Но мне кажется, что составить кроссворд из готовой картинки несложно, и код будет простым - посчитать количество непрерывных групп и количество заполненных ячеек в каждой легко. И смысл есть - продать журналу. А вот наоборот - и сложнее, и смысл только собственно в написании кода, но не в применении.Hugo
Но мне кажется, что составить кроссворд из готовой картинки несложно, и код будет простым - посчитать количество непрерывных групп и количество заполненных ячеек в каждой легко.
Фокус в том, что кроссворд, составленный по такому, например, битмапу: 0X X0 - не будет иметь единственно верного решения. Понятное дело, для кроссворда, скажем,40х60 аналитическое доказательство "сходимости" решения - задача непостижимая. (Если вдруг найдутся на форуме профессиональные математики, было бы очень интересно их мнение - решаема ли эта задача в принципе). Так что, остаётся только эмпирическая проверка.
Quote (Hugo)
Но мне кажется, что составить кроссворд из готовой картинки несложно, и код будет простым - посчитать количество непрерывных групп и количество заполненных ячеек в каждой легко.
Фокус в том, что кроссворд, составленный по такому, например, битмапу: 0X X0 - не будет иметь единственно верного решения. Понятное дело, для кроссворда, скажем,40х60 аналитическое доказательство "сходимости" решения - задача непостижимая. (Если вдруг найдутся на форуме профессиональные математики, было бы очень интересно их мнение - решаема ли эта задача в принципе). Так что, остаётся только эмпирическая проверка.Формуляр
Тема заинтересовала, долго вынашивал идею, наконец дошли руки реализовать (раза два переписывал с нуля) Кроссворд ограничен 50х50 и не более 10 чисел, но это несложно исправить, задав нужные диапазоны
Алгоритм решения: постоянная итерация, пробегаем по строкам и по столбцам пытаясь найти решение с помощью перебора Данный алгоритм будет медленно работать на больших кроссвордах. В качестве идеи по ускорению, можно сортировать линии по приоритетности, и пробегать вначале по тем, в которых наибольшее количество открытых клеток, а также наименьшее количество различных сочетаний, но пока лень реализовывать.
PS: В 2003 код работает значительно быстрее чем в 2007/2010, связано с отрисовкой экрана, т.к. на листе используется условное форматирование. можно конечно отключить обновление экрана, но тогда пропадает красота разгадывания кроссворда
Тема заинтересовала, долго вынашивал идею, наконец дошли руки реализовать (раза два переписывал с нуля) Кроссворд ограничен 50х50 и не более 10 чисел, но это несложно исправить, задав нужные диапазоны
Алгоритм решения: постоянная итерация, пробегаем по строкам и по столбцам пытаясь найти решение с помощью перебора Данный алгоритм будет медленно работать на больших кроссвордах. В качестве идеи по ускорению, можно сортировать линии по приоритетности, и пробегать вначале по тем, в которых наибольшее количество открытых клеток, а также наименьшее количество различных сочетаний, но пока лень реализовывать.
PS: В 2003 код работает значительно быстрее чем в 2007/2010, связано с отрисовкой экрана, т.к. на листе используется условное форматирование. можно конечно отключить обновление экрана, но тогда пропадает красота разгадывания кроссвордаMCH
А кто-то говорил, что не знает, как макросы писать :)
[offtop]Здесь задача не на макросы, а в большей степени на математику (комбинаторику), я в своем коде практически не использую объектную модель Excel[/offtop]
Цитата (vikttur)
А кто-то говорил, что не знает, как макросы писать :)
[offtop]Здесь задача не на макросы, а в большей степени на математику (комбинаторику), я в своем коде практически не использую объектную модель Excel[/offtop]MCH
Большой кроссворд (100 на 100 и по 20 чисел) реализовал давно, но забыл выложить. Исправляюсь. Заложенный алгоритм перебора большие кроссворды решает медленно.
Большой кроссворд (100 на 100 и по 20 чисел) реализовал давно, но забыл выложить. Исправляюсь. Заложенный алгоритм перебора большие кроссворды решает медленно.MCH
Добрый вечер. Поднимаю данную тему потому, что появился вопрос по алгоритму. Не решает он вот такой кроссворд, как во вложении. Остается область, которую даже подбором не заполняет. Есть конечно вероятность, что ошибка в числах, но брал его не из газеты или журнала, где опечатки встречаются,а с одного сайта. А там пишут, что проверяются кроссворды на вменяемость перед тем, как выложить. Правда руками я его тоже пока не могу решить пока что)
Добрый вечер. Поднимаю данную тему потому, что появился вопрос по алгоритму. Не решает он вот такой кроссворд, как во вложении. Остается область, которую даже подбором не заполняет. Есть конечно вероятность, что ошибка в числах, но брал его не из газеты или журнала, где опечатки встречаются,а с одного сайта. А там пишут, что проверяются кроссворды на вменяемость перед тем, как выложить. Правда руками я его тоже пока не могу решить пока что)Retar