Японские кроссворды
Но написать просто интерфейс пользователя - ето же не интересно. Хочу чтоб решала прога кроссворды (причем больших розмеров). Видел код на сайте, мне бы словами кто обяснил если не сложно.
Помогите пожалуйста с алгоритмом.
А где видел, не подскажешь?
Я тут хочу японские кроссворды написать на Builder-e.
Но написать просто интерфейс пользователя - ето же не интересно. Хочу чтоб решала прога кроссворды (причем больших розмеров). Видел код на сайте, мне бы словами кто обяснил если не сложно.
Помогите пожалуйста с алгоритмом.
Я когда-то писал такую штуку. Для начала было бы неплохо если б Ты сам умел их очен хорошо решать.
У меня была следующая идея решения:
во первых набор функций которые раставляют кубики которые однозначно закрашены. Потом, когда их уже не достаточно запускается функция которая устроена следующим образом. Рассмотрим на примере горизонтальных полос. У на есть горизонтальня полоса в которой n закрашеных отрезков разной длины. Функция строит в памяти все варианты их расстановки, которые возможны по правилам. При этом процессе могут появиться новые закрашенные/незакрашенные клетки.
Когда уже и это не помагает, то запускаеться рекурсивная функция которая строит следующие варианты построения. Если она приходит к противоречию значит можно удалять ветку построения и соответствующий ей вариант расстановки закрашеных клеток.
Вобщем эта тема решала довольно непростые кроссворды. Может решала бы и более серйозные. Но я закинул ее написание еще на стадии продвижения рекурсивного алгоритма. Кстати работала довольно быстро.
А где видел, не подскажешь?
http://www.codenet.ru/progr/alg/chines.php
Но не пробовал как работает
Я когда-то писал такую штуку. Кстати работала довольно быстро.
Спасибо большое за идею. Обязательно реализую.
И вот еще одна идейка:
Сначала делаем то что Ты сказал (но без рекурсии)
Можно припускать что какаято клетка закрашена, пробовать упорядочить кросворд с ней? и если противоречие - она точно незакрашена.
А потом опять можно Твои функции запускать.
А если их не для каждой строчки и столбца колбасить, а только для тех где недавно были изменения то должно работать бистрее.
Ну а уж потом и рекурсию :-)
Надеюсь на етом тема не закроется. Пишите пожалуйста.
Можно припускать что какаято клетка закрашена, пробовать упорядочить кросворд с ней? и если противоречие - она точно незакрашена.
Да, хорошо так.
Если есть желание и время, то можно написать решатель кроссвордов, котороый решал бы практически все что имеет однозначное решение.
Можно общими усилиями, типа опенсорц. Кому не лень может функции писать. Надо только утвердить способ представления данных.
Вобщем я на выходных закину свою идею представления, тогда ее можно будет либо выкинуть, либо изменить и использывать :)
P.S. я на WINAPI
Это где и на каком я зыке написано?
Да, хорошо так.
Если есть желание и время, то можно написать решатель кроссвордов. Надо только утвердить способ представления данных.
Вобщем я на выходных закину свою идею представления
Желание есть, а времени нет. Но как я люблю говорить "В шею никто не гонит". Можно пробовать.
Извени что лезу перед Тобой, но виходные уже прошли, а кое-что у меня уже настрочено на С++ Билдере (хотя оно и на ином наверное скомпилится).
Вобщем ето класи для хранения даных. Последний все вместе держит. Оно конечно сырое. А так как я не то чтобы програмист хороший, то ето еще переделивать ... А возможно и вообще не подойдет. Короче посмотриш. Уже работаю над компонентом, который будет ето все рисовать на екране. Напиши пожалуйсто свое мнение.
2. for Ungleg.
Вообщето на паскаль похоже :-). Но я не компилировал.
Извени что лезу перед Тобой, но виходные уже прошли, а кое-что у меня уже настрочено на С++ Билдере
Да, выходные прошли и за сроком я провтыкал. Но у меня тоже есть кое-чего наработаного (с графическим интерфейсом), но оно было сделанно давно и кривовато. Вот поправлю, тогда выложу сюда. Ато я знаю как тут могут код обхарить.
Я уже нашкрябал кое-какой интерфейс (вернее сказать пародию на интерфейс).
Может всетаки присоединится кто ??? :)
Выкладываю все что успел (Builder 5)
За код не ругайте. Я и сам знаю что плохо програмирую :)
Надо 2 вещи.
1 - главное - решатель (сам я не потяну такое сделать)
2 - проверка пользовательского решения (ето не сложно)
Структура даных в модуле kernel
draw - компонента для отображения кросворда
Жду с нетерпением.