7. Крисс-кросс, или Эвристическое составление головоломки
7.
Крисс-кросс,
или Эвристическое составление головоломки
Многие считают кроссворды слишком трудной головоломкой, потому что отгадать слово им не под силу. Но вписывать буквы в клетки нравится. Для подобных людей существует более простая головоломка — крисс-кросс.
Каждый крисс-кросс состоит из списка слов, разбитых для удобства на группы в соответствии с длиной и упорядоченных по алфавиту внутри каждой группы, а также из схемы, в которую нужно вписать слова. Схема подчиняется тому же правилу, что и в кроссворде, — в местах пересечения слова имеют общую букву, однако номера отсутствуют, поскольку слова известны заранее, требуется лишь вписать их в нужные места. Обычно в схемах крисс-кросса гораздо меньше пересечений по сравнению с кроссвордами, а незаполняемые клетки не заштриховываются, если это не приводит к путанице. Крисс-кросс всегда имеет единственное решение, в котором используются все перечисленные слова. Пример головоломки, правда очень маленький, приведен на рис. 7.1. Заметьте, что длина слова служит важным ключом к разгадке.
Рисунок 7.1. Пример головоломки крисс-кросс.
Тема. Напишите программу, читающую список слов и строящую для этого списка правильную схему крисс-кросса. Представьте заполненную схему как доказательство того, что она правильная. Возможно, хотя и маловероятно, что для данного списка слов не существует решения (как и в кроссворде, схема должна быть связной). Ваша программа должна сообщать о всех неудачах при построении схемы и о всех ситуациях, нарушающих однозначность (таких, например, как наличие повторяющихся слов). Попутно решите еще одну задачу — получите красивый графический вывод.
Указания исполнителю. Качество схем крисс-кросса пропорционально их «связанности», т. е., чем теснее в среднем слова переплетены с соседями, тем интереснее головоломка. Связанность можно измерять по-разному: как отношение площади схемы к площади наименьшего объемлющего прямоугольника; как среднее число пересечений на слово; как среднее число пересечений на букву; как минимальное число пересечений на слово. При генерации головоломок крисс-кросс для массовых изданий использовалась коммерческая программа, но головоломки получались неинтересные — слишком длинные и извилистые. Когда ваша программа заработает, позаботьтесь об увеличении связанности.
Предложенная задача — классическая для метода перебора с возвратами. Начните с вписывания слов в фиксированную схему, пока в списке есть подходящие слова. Когда они кончатся, вернитесь на шаг назад, удалив последнее вписанное слово, и попытайтесь вписать другое слово. Необходимо разработать эвристику для выбора очередного кандидата из списка неиспользованных слов. Контроль однозначности должен включать проверку того, что в схеме нельзя поменять местами никакие два слова равной длины. Достаточна ли такая проверка? Нет ли более изящной? Полное алгоритмическое решение, максимизирующее связанность, несомненно, представит значительный теоретический интерес.
Инструментовка. К решению задачи имеется много подходов, но в любом случае нужны гибкие структуры данных, чтобы отслеживать продвижение программы, и средства для удобной работы с цепочками литер и образцами. Напрашиваются языки Снобол и PL/I. В Паскале есть подходящие структуры данных, но средства для работы с цепочками придется создавать самому.
Длительность исполнения. Одному исполнителю на 4 недели. Еще неделя на графический вывод.
Литература
Армбрастер (Armbruster F.). Computer Crosswords, Troubadour Press, San Francisco, CA, 1974.
Именно эта книга подсказала этюд. Сами по себе головоломки, помещенные в ней, не особенно хороши. Возможно, ваше решение окажется лучше.
Мазлак (Mazlack L. J.). Machine Selection of Elements in Crossword Puzzles: An Application of Computational Linguistics. SIAM J. Comput., 5, 1, pp. 51–72, March 1976.
Автор описывает программу, пытающуюся заполнить схему кроссворда словами из очень большого словаря. Схема и словарь даны заранее. Предполагается, что заключительные слова придумывает человек. Эта задача аналогична задаче построения схемы крисс-кросса, и, возможно, книга подскажет вам, как подступиться к решению.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Осуществляем кросс-доменные запросы
Осуществляем кросс-доменные запросы Даже при небольшом опыте работы с AJAX уже должно было возникнуть закономерное возражение: «Это не будет работать из-за кроссдоменной безопасности» (для предотвращения XSS-атак). Давайте рассмотрим и этот вопрос.Для обеспечения
Кросс — браузерность
Кросс — браузерность Как с обычного компьютера, так и с гаджета пользователь может выходить в Интернет с помощью разных браузеров. Добиться полной совместимости сайта с каждым из них – та еще задачка. Так что желательно заранее решить, какие программы — просмотрщики
Составление/разбиение строк
Составление/разбиение строк substrВозвращает участок строки с определенной длиной.Синтаксис:string substr(string str, int start [,int length])Возвращает участок строки str, начиная с позиции start и длиной length. Если length не задана, то подразумевается подстрока от start до конца строки str. Если start больше,
Составление резюме
Составление резюме При поиске работы вас рано или поздно попросят прислать свое резюме. Для работодателей это ваша визитная карточка или одежка, по которой вас встретят. Роль резюме очень велика: оно составляет о вас первое впечатление, которое в дан —ном случае
Составление семантического ядра
Составление семантического ядра Как создается семантическое ядро или поле для подавляющего большинства русскоязычных сайтов?Обычно все начинается с клиента, который приходит в веб-студию или к штатному специалисту и просит создать сайт, посвященный тому, что продает
Составление семантического ядра
Составление семантического ядра Основой для оптимизации сайта является набор поисковых слов, полностью охватывающих тематическое поле компании (или сайта, так как компания может работать в нескольких областях). Этот набор поисковых запросов называется семантическим
Предсказания и составление «индивидуальных» гороскопов
Предсказания и составление «индивидуальных» гороскопов Узнать свое будущее в той или иной степени интересно большинству обывателей. Кто-то для этого учится расшифровывать сны, кто-то ходит к гадалкам, а с появлением Интернета появилась возможность находить и изучать
Глава 4 Расчет и составление смет
Глава 4 Расчет и составление смет Важным этапом при планировании и проведении ремонта или строительства является составление смет на материалы и текущие расходы. В данной главе описаны программные продукты, предназначенные для автоматизации таких учетных
Составление сметы и вывод ее на печать
Составление сметы и вывод ее на печать Для подготовки сметы и вывода ее на печать необходимо перейти в режим редактирования актов выполненных работ. Для этого предназначена команда Вид ? Акты выполненных работ или комбинация клавиш Ctrl+K. После выполнения одного из
Составление смет
Составление смет Порядок составления строительных смет для ремонта квартиры или офиса в программе «Мини-Смета» следующий.Запустите режим формирования смет с помощью команды меню Ремонт ? Сметы. Появится окно Сметы (рис. 4.26), содержащее список ранее подготовленных смет (у
Глава 14 Головоломки
Глава 14 Головоломки • Игра на развитие памяти• Дедукция• Игра "Йога"• Рекурсивные блоки«Пятнашки» и игра совпадений, описанные в прошлой главе, – игры, над которыми стоит думать. Лимит времени при этом не устанавливается. Но кроме этих игр сушествует множество других
Алексей Пажитнов, создатель «Тетриса»: «Сегодня многие головоломки делают просто для умственно отсталых» Степан Чижов
Алексей Пажитнов, создатель «Тетриса»: «Сегодня многие головоломки делают просто для умственно отсталых» Степан Чижов Опубликовано 14 июня 2013 Так совпало, что 6 июня, в 29-й день рождения «Тетриса», у меня появилась возможность взять интервью у
Кросс-сертификация
Кросс-сертификация Кросс-сертификация - это механизм связывания вместе удостоверяющих центров, ранее не имевших связей друг с другом, таким образом, что становятся возможными защищенные коммуникации между соответствующими сообществами субъектов. Фактически
Кросс-сертифицированные корпоративные PKI
Кросс-сертифицированные корпоративные PKI Если две организации или сообщества пользователей постоянно взаимодействуют друг с другом и нуждаются в защищенных коммуникациях, то между их инфраструктурами открытых ключей могут быть установлены одноранговые связи. Рис.
Построение пути для кросс-сертифицированных PKI
Построение пути для кросс-сертифицированных PKI Архитектура кросс-сертифицированных PKI имеет много общего с архитектурами сетевой PKI и расширенных списков доверия. Здесь также разные пользователи строят разные пути сертификации для одного и того же сертификата