Как составить красфорд


Загрузить PDF


Загрузить PDF

Кроссворды и другие интеллектуальные игры способны обеспечить несчетное количество часов веселья и являются отличной зарядкой для мозгов. Они представляют собой замечательные образовательные инструменты, позволяя увлечь учеников и способствуя запоминанию связей между термином и определением. Некоторым людям нравится составлять кроссворды не меньше, чем решать их. В зависимости от уровня вашего интереса, этот процесс может быть как очень простым, так и достаточно многоуровневым.

  1. Изображение с названием Make Crossword Puzzles Step 1

    1

    Определитесь с размером сетки. Если вы хотите составить обычный, стандартный кроссворд, то вам следует придерживаться конкретных размеров. Если же вы составляете более свободный кроссворд, то размер может быть любым.

    • Используя онлайн-инструмент для создания кроссвордов или специальную программу, вы можете быть ограничены рядом конкретных размеров. При составлении кроссворда от руки все зависит только от вашей фантазии.[1]
      [2]
  2. Изображение с названием Make Crossword Puzzles Step 2

    2

    Составьте список слов для своего кроссворда. Обычно слова следует подбирать в соответствии с заданной темой.[3]
    Тема или намек на нее может выступать заголовком кроссворда. Среди общепринятых тем можно назвать известные места или языки, слова определенного периода времени, знаменитостей или спорт.

  3. Изображение с названием Make Crossword Puzzles Step 3

    3

    Расположите слова в формате сетки. Эта часть задачи по сложности сопоставима собственно с решением кроссворда. Завершив расположение слов, заштрихуйте все неиспользованные клетки.

    • В кроссвордах американского типа не принято использование «подвешенных слов», которые не соединяются с другими словами. Каждая буква должна соответствовать горизонтальному и вертикальному слову для обеспечения полного пересечения.[4]
      В кроссвордах британского типа допускается использование подвешенных слов.
    • Если ответом на вопрос выступает фраза, а не одно слово, то составляющие ее слова должны идти без пробелов.
    • Не нужно переживать о написании имен собственных с большой буквы, поскольку кроссворды обычно заполняются большими печатными буквами. Также в ответах не должно быть знаков пунктуации.
    • Многие программы по созданию кроссвордов готовы автоматически расположить слова вместо вас. Вам нужно лишь указать размер кроссворда, а также задать список слов и вопросов к ним.[5]
      [6]
  4. Изображение с названием Make Crossword Puzzles Step 4

    4

    Пронумеруйте первую клетку каждого слова. Начинайте с левого верхнего угла кроссворда и разделяйте слова согласно расположению по вертикали или горизонтали, чтобы у вас получалось «1 по вертикали», «1 по горизонтали» и так далее. Такая задача может оказаться весьма непростой, поэтому многие предпочитают использовать программы, а не делать все вручную.

    • При использовании программы-помощника она пронумерует слова автоматически.[7]
      [8]
  5. Изображение с названием Make Crossword Puzzles Step 5

    5

    Сделайте копию кроссворда. В этот раз первые клетки каждого слова должны быть пронумерованы, но оставаться незаполненными. При создании кроссворда вручную это потребует дополнительных усилий, но программа все сделает за вас. Отложите заполненную сетку, чтобы использовать ее в качестве ключа. Сделайте столько копий незаполненных сеток, сколько вам нужно.

    Реклама

  1. Изображение с названием Make Crossword Puzzles Step 6

    1

    Начните с простых вопросов. Их обычно называют «быстрыми» или «простыми» вопросами, которые проще всего решить. Например: «Ездовое животное» = КОНЬ.

    • Если ваш кроссворд задуман как образовательный инструмент или вы просто не хотите ничего усложнять, то можно обойтись одними быстрыми вопросами, но при создании более сложного кроссворда такие вопросы лучше опустить или не использовать слишком часто.[9]
  2. Изображение с названием Make Crossword Puzzles Step 7

    2

    Повысьте уровень сложности косвенными вопросами. Обычно в них присутствует определенная метафора или требуется нестандартное мышление. Пример: «Половина танца» = ЧА или КАН (от Ча-ча или Канкан).

    • Обычно такие вопросы составители кроссвордов начинают словами «возможно», «вероятно» или вопросительным знаком в конце.
  3. Изображение с названием Make Crossword Puzzles Step 8

    3

    Используйте зашифрованные вопросы. Они более всего распространены в Великобритании. Такие вопросы часто встречаются в специальных «криптических кроссвордах», а в обычных кроссвордах обозначаются вопросительным знаком в конце. Они основаны на игре слов и обычно задействуют несколько уровней решения. В категории криптических вопросов существует множество подвидов.[10]

    • Полностью криптические вопросы обычно представляют собой каламбуры. Например, «Множественная личность или ячейка общества» = СЕМЬЯ, так как слово можно разделить на два: «семь» и «я».[11]
    • Инверсионные вопросы требуют перевернутого ответа. Например, «Вечный город без войны» = МИР. Рим называют вечным городом, который превращается из «Рим» в «мир». Обратите внимание, что вторая часть вопроса также является подсказкой, «без войны».[12]
    • Палиндромы часто требуют поиска анаграммы, которая станет решением всего вопроса. Например, “Отверстие и громкий звук из него как элемент двигателя» = РОТОР, поскольку отверстием выступает «рот», из которого раздается громкий крик – «ор», а вместе получается часть двигателя «ротор», при этом слово одинаково читается в обоих направлениях.[13]
  4. Изображение с названием Make Crossword Puzzles Step 9

    4

    Организуйте вопросы в форме списка. Пронумеруйте их согласно расположению ответов в сетке кроссворда. Объедините вопросы для ответов по горизонтали в отдельный блок, расположив их в порядке возрастания номера, а затем проделайте то же самое с вопросами для ответов по вертикали.[14]
    [15]

    Реклама

  1. Изображение с названием Make Crossword Puzzles Step 10

    1

    Используйте сетки стандартных размеров. Издательский дом «Simon & Schuster» является одним из первых издателей кроссвордов, который ввел в обиход принятые стандарты для профессиональных составителей кроссвордов. Среди прочего, стандарты предусматривают один из пяти размеров сетки: 15×15, 17×17, 19×19, 21×21 или 23×23 клетки.[16]
    Чем крупнее сетка, тем сложнее кроссворд.[17]

  2. Изображение с названием Make Crossword Puzzles Step 11

    2

    Схема кроссворда должна обладать осевой симметрией на 180 градусов. Под «схемой» следует понимать расположение заштрихованных клеток в вашей сетке. Их нужно расположить таким образом, чтобы при отражении схемы заштрихованные клетки оставались на тех же местах.[18]

  3. Изображение с названием Make Crossword Puzzles Step 12

    3

    Старайтесь не использовать короткие слова. Двухбуквенные слова вообще не используются, а слова из трех букв лучше задействовать как можно реже.[19]
    [20]
    Если не получается придумать длинное слово, то всегда можно использовать целую фразу.[21]

  4. Изображение с названием Make Crossword Puzzles Step 13

    4

    Используйте слова, упоминаемые в официальных источниках. За редкими исключениями, слова в кроссвордах должны быть такими, которые можно найти в словаре, атласе, художественном произведении, учебнике или справочнике.[22]
    Некоторые тематические кроссворды могут требовать отступления от данного правила, но не нужно переусердствовать.[23]

  5. Изображение с названием Make Crossword Puzzles Step 14

    5

    Одно слово может использоваться только один раз. Если в кроссворде встречается фраза «Северное море», то не следует использовать фразу «Северное сияние». Опять же, некоторые тематические кроссворды допускают определенную степень гибкости, но во всем важна умеренность.[24]

  6. Изображение с названием Make Crossword Puzzles Step 15

    6

    Длинные слова должны иметь важное значение. Фирменным признаком грамотного кроссворда будет максимальная привязка длинных слов в ключевой теме. [25]
    Не все кроссворды являются тематическими, но лучшие образцы всегда имеют центральную тему.[26]

    Реклама

Об этой статье

Эту страницу просматривали 87 219 раз.

Была ли эта статья полезной?

В Microsoft Word нет функционала для автоматического создания кроссвордов. Поэтому для начала нужно самостоятельно придумать слова и собрать его из них, например, на листе бумаги. После этого с помощью популярного текстового редактора можно красиво оформить его с помощью самой обычной таблицы. В этой статье подробно описано, как сделать кроссворд в Ворде на компьютере.

Для начала создаем таблицу необходимого размера

Шаг 1. Запустите Microsoft Word и создайте новый документ или откройте тот, в который необходимо добавить кроссворд.

Как сделать кроссворд в Word: это проще, чем кажется

Шаг 2. Перейдите в раздел «Вставка» в верхнем ленточном меню приложения, нажмите на кнопку «Таблица» и выберите возможность «Вставить таблицу».

Как сделать кроссворд в Word: это проще, чем кажется

Шаг 3. Определите число столбцов и строк в соответствующих ячейках на основании придуманного кроссворда.

Как сделать кроссворд в Word: это проще, чем кажется

Вот результат:

Как сделать кроссворд в Word: это проще, чем кажется

Далее делаем все ячейки в ней квадратными

Шаг 1. Наведите курсор на таблицу, нажмите на кнопку в виде крестика в ее левом верхнем углу правой кнопкой мыши и выберите пункт «Свойства таблицы».

Как сделать кроссворд в Word: это проще, чем кажется

Шаг 2. Перейдите в раздел «Строка» и выберите высоту ячейки с помощью поля «Высота».

Как сделать кроссворд в Word: это проще, чем кажется

Шаг 3. Перейдите в раздел «Ячейка» и выберите ширину ячейки с помощью соответствующего поля, а потом подтвердите изменение свойств таблицы с помощью кнопки «ОК».

Как сделать кроссворд в Word: это проще, чем кажется

Вот результат:

Как сделать кроссворд в Word: это проще, чем кажется

Удаляем ненужные линии с помощью ластика

Шаг 1. Нажмите на таблицу, перейдите в раздел «Макет» в верхнем ленточном меню приложения и выберите возможность «Ластик».

Как сделать кроссворд в Word: это проще, чем кажется

Шаг 2. Сотрите лишние границы ячеек, чтобы воссоздать задуманный кроссворд.

Вот результат:

Как сделать кроссворд в Word: это проще, чем кажется

Проставляем цифры согласно заданному плану

По задумке, которая используется в примере, нужно получить ключевое слово по горизонтали под номером «0», вписав в кроссворд все слова по вертикали под цифрами «1», «2», «3», «4», «5» и «6» согласно заданиям.

Вот рузультат:

Как сделать кроссворд в Word: это проще, чем кажется

Устанавливаем необходимые параметры выравнивания

Если в этом есть необходимость, выделите таблицу и перейдите в раздел «Макет» в верхнем ленточном меню приложения, а потом установите необходимое выравнивание — обычно используется вариант «Выровнять сверху по левому краю».

Вот результат:

Как сделать кроссворд в Word: это проще, чем кажется

Занимаемся дополнительными украшательствами

На финальном этапе можно заняться наведением красоты: можно, к примеру, выделить рамку ключевого слова с помощью инструмента «Стили границ» в разделе «Конструктор таблиц», а также залить его фон с помощью инструмента «Заливка» здесь же.

Как сделать кроссворд в Word: это проще, чем кажется

Вот итоговый результат:

Как сделать кроссворд в Word: это проще, чем кажется

Нет разницы, насколько сложный кроссворд вы придумали, — для его оформления без проблем подойдет алгоритм, описанный в данной инструкции.

⚠️ Если инструкция перестала работать или у вас возникли проблемы на каком-то шаге — пожалуйста, сообщите об этом в комментариях. Мы обязательно изучим проблему и обновим статью.

МЕТОДИЧЕСКИЕ
РЕКОМЕНДАЦИИ ПО СОСТАВЛЕНИЮ КРОССВОРДОВ

Составление кроссвордов – это
разновидность отображения информации в графическом виде и вид контроля знаний
по ней. Работа по составлению кроссворда требует от студента владения
материалом, умения концентрировать свои мысли и гибкость ума.

Составление кроссвордов рассматривается
как вид аудиторной или внеаудиторной самостоятельной работы и требует от
студентов не только тех же качеств, что необходимы при разгадывании
кроссвордов, но и умения систематизировать информацию. Кроссворды могут быть
различны по форме и объёму слов.

Затраты времени на составление кроссвордов
зависят от объёма информации, её сложности и определяются преподавателем.
Ориентировочное время на подготовку одного кроссворда объёмом не менее 10 слов
– 1 ч.

Алгоритм самостоятельной работы по
составлению кроссворда:

1.    внимательно прочитайте учебный
материал по изучаемой теме (конспекты, дополнительные источники);

2.    определите круг понятий по
изучаемой теме, из которых будет состоять Ваш кроссворд;

3.    составьте вопросы к выбранным
понятиям (каждому понятию надо дать правильное, лаконичное толкование);

4.    продумайте дизайн кроссворда, его
эстетическое оформление;

5.    начертите кроссворд и оформите
список вопросов к нему;

6.    оформите ответы на кроссворд на
отдельном листе;

7.    проверьте правильность выполненной
работы (грамотность написания понятий и определений, соответствие нумерации,
количество соответствующих ячеек).

Общие правила составления кроссвордов:

·        
загаданные
слова должны быть в именительном падеже и единственном числе, кроме слов,
которые не имеют единственного числа;

·        
не
используются слова, пишущиеся через тире и имеющие уменьшительно – ласкательную
окраску;

·        
не
используются аббревиатуры и сокращения;

·        
в каждую белую
клетку кроссворда вписывается одна буква;

·        
каждое слово
начинается в клетке с номером, соответствующим его определению, и заканчивается
чёрной клеткой или краем фигуры;

·        
имён
собственных в кроссворде может быть не более 1/3 от всех слов;

·        
не следует
применять при составлении кроссвордов слова, которые могут вызвать негативные
эмоции, жаргонные и нецензурные слова;

·        
не желательно
при создании кроссвордов употреблять малоизвестные названия, устаревшие и
вышедшие из обихода слова;

·        
начинать
составлять кроссворд рекомендуется с самых длинных слов.

Правила оформления кроссвордов:

·        
кроссворд
может быть оформлен от руки на листах формата А 4 или набран на компьютере с
использованием любого текстового или табличного редактора и распечатан на
принтере;

·        
при
составлении кроссворда можно использовать специальные компьютерные программы
типа «Hot Potatoes», «Eclipse Crossword», «Decalion» или бесплатные онлайновые
сервисы типа «Фабрика кроссвордов». При этом кроссворд должен быть сохранён на
электронный носитель в виде исполняемого файла и может быть представлен в
электронном виде;

·        
рисунок
кроссворда должен быть чётким;

·        
сетка
кроссворда должна быть выполнена в двух экземплярах:

1-й экземпляр – с заполненными словами;

2-й экземпляр – пустая сетка только с
цифрами позиций.

·        
толкования
слов (определения) должны быть строго лаконичными. Не следует делать их
пространными, излишне исчерпывающими, многословными, несущими избыточную
информацию. В определениях не должно быть однокоренных слов;

·        
каждому слову
в сетке кроссворда присваивается номер. При этом номера расставляются
последовательно слева направо, от верхней строчки к нижней;

·        
ответы на
кроссворд оформляются на отдельном листе.

·        
готовая работа
предоставляется на контроль в установленный срок.

Примечание: интересные и оригинальные кроссворды могут
быть рекомендованы к использованию в учебных целях для тестирования.

КРИТЕРИИ
ОЦЕНКИ САМОСТОЯТЕЛЬНОЙ РАБОТЫ ПО СОСТАВЛЕНИЮ КРОССВОРДА

Оценка «5» (отлично) выставляется, если термины и определения написаны
грамотно, допускается 1 ошибка; в содержан кроссворда используются термины по
изучаемой теме; определение терминов не вызывает у обучающегося затруднений;
определения терминов не повторяют дословно текст учебника или конспекта;
кроссворд содержит не менее 15-10 слов информации; эстетически, аккуратно и
точно оформлен в соответствии с правилами оформления; кроссворд оформлен
иллюстрациями; сетка кроссворда имеет заливку, красочно оформлен; при
оформлении кроссворда использовано специальное программное
обеспечение; содержание соответствует теме; грамотная формулировка
вопросов; кроссворд выполнен без ошибок; представлен на контроль в срок.

Оценка «4» (хорошо) выставляется, если содержание материала в
таблице соответствует заданной теме, но есть недочёты: ячейки таблицы
заполнены материалом, подходящим по смыслу, но представляет собой пространные
пояснения и многословный текст; кроссворд содержит не менее 10 слов
информации; не достаточно грамотная формулировка вопросов; в
оформлении таблицы имеются незначительные недочеты и небольшая
небрежность; эстетически оформлен; представлен на контроль в срок.

Оценка «3» (удовлетворительно) выставляется, если студент работу не
выполнил в полном объёме: кроссворд содержит менее 8 – 9 слов информации;
содержание ячеек таблицы не соответствует заданной теме; имеются не заполненные
ячейки; оформлен небрежно; содержание не вполне соответствует теме; не
точная формулировка вопросов; кроссворд выполнен с ошибками; не представлен на
контроль в срок.

Содержание

  • Создаем кроссворд на компьютере
    • Способ 1: Онлайн-сервисы
    • Способ 2: Microsoft Excel
    • Способ 3: Microsoft PowerPoint
    • Способ 4: Microsoft Word
    • Способ 5: Программы для создания кроссвордов
  • Вопросы и ответы

Как создать кроссворд на компьютере

Разгадывание кроссвордов помогает не только скоротать немного времени, но и является зарядкой для ума. Раньше были популярны журналы, где присутствовало множество подобных головоломок, но сейчас их решают и на компьютере. Любому пользователю доступно множество средств, с помощью которых создаются кроссворды.

Создаем кроссворд на компьютере

Создать подобную головоломку на компьютере очень просто, а помогут в этом несколько несложных способов. Следуя простым инструкциям, вы сможете быстро составить кроссворд. Давайте рассмотрим каждый из способов более подробно.

Способ 1: Онлайн-сервисы

Если нет желания скачивать программы, предлагаем вам воспользоваться специальными сайтами, где создаются головоломки этого типа. Минусом этого способа является невозможность добавить вопросы в сетку. Их придется доделывать с помощью дополнительных программ или выписывать на отдельном листе.

Создание кроссворда в Biouroki

От пользователя требуется только вписать слова, выбрать схему расположения строк и указать вариант сохранения. Сайт предлагает создать картинку формата PNG или сохранить проект в виде таблицы. Все сервисы работают примерно по этому принципу. На некоторых ресурсах есть функция переноса готового проекта в текстовый редактор или создание версии для печати.

Подробнее: Создаем кроссворды онлайн

Способ 2: Microsoft Excel

Microsoft Excel идеально подойдет для создания головоломки. Нужно только сделать из прямоугольных ячеек квадратные, после чего можно приступить к составлению. Вам остается придумать или позаимствовать где-то схему строк, подобрать вопросы, проверить на правильность и совпадение по словам.

Готовый кроссворд в Excel

Кроме всего, обширный функционал Excel позволяет создать алгоритм автопроверки. Делается это с помощью функции «Сцепить», объединяя буквы в одно слово, а также потребуется использовать функцию «ЕСЛИ», чтобы проверять правильность ввода. Проделать подобные действия нужно будет с каждым словом.

Подробнее: Создание кроссворда в программе Microsoft Excel

Способ 3: Microsoft PowerPoint

PowerPoint не предоставляет пользователям единого инструмента, с помощью которого можно было бы легко создать кроссворд. Но в нем есть множество других полезных функций. Некоторые из них и пригодятся во время выполнения данного процесса. В презентацию доступна вставка таблицы, что идеально подойдет для основы. Далее каждый пользователь вправе сам настроить внешний вид и расположение строк с помощью редактирования границ. Остается только добавить надписи, предварительно настроив межстрочный интервал.

Готовый кроссворд в PowerPoint

С помощью тех же надписей осуществляется добавление нумерации и вопросов, если это необходимо. Внешний вид листа каждый пользователь настраивает так, как посчитает нужным, в этом нет каких-то точных инструкций и рекомендаций. Готовый кроссворд позже может использоваться в презентациях, достаточно просто сохранить готовый лист, чтобы в будущем вставлять его в другие проекты.

Подробнее: Создание кроссворда в PowerPoint

Lumpics.ru

Способ 4: Microsoft Word

В Word можно добавить таблицу, разделить ее на ячейки и всячески редактировать, а это значит, что в этой программе вполне реально быстро создать красивый кроссворд. С добавления таблицы и стоит начать. Укажите число строк и столбцов, после чего приступайте к настройкам строк и границ. Если потребуется дополнительно настроить таблицу, обратитесь к меню «Свойства таблицы». Там выставляются параметры столбцов, ячеек и строк.

Готовый кроссворд Word

Остается только заполнить таблицу вопросами, предварительно сделав схематический макет на проверку совпадений всех слов. На этом же листе, если есть место, добавьте вопросы. Сохраните или распечатайте готовый проект после завершения финального этапа.

Подробнее: Делаем кроссворд в программе MS Word

Способ 5: Программы для создания кроссвордов

Существуют специальные программы, с помощью которых осуществляется составление кроссворда. Давайте возьмем за пример CrosswordCreator. В данном софте присутствует все необходимое, что используется во время создания кроссвордов. А сам процесс выполняется за несколько простых шагов:

  1. В отведенную таблицу введите все необходимые слова, их может быть неограниченное количество.
  2. Ввод слов CrosswordCreator

  3. Выберите один из предустановленных алгоритмов для составления кроссворда. Если созданный результат не понравится, то с легкостью осуществляется смена его на другой.
  4. Выбор алгоритма создания CrosswordCreator

  5. Если необходимо, осуществите настройку оформления. Доступно изменение шрифта, его размера и цвета, а также присутствуют различные цветовые схемы таблицы.
  6. Настройка оформления CrosswordCreator

  7. Кроссворд готов. Теперь его можно скопировать или сохранить в виде файла.
  8. Сохранение готового кроссворда CrosswordCreator

Для выполнения данного способа была применена программа CrosswordCreator, однако существует и другое ПО, помогающее составлять кроссворды. Все они обладают уникальными функциями и инструментами.

Подробнее: Программы для составления кроссвордов

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

Алгоритм формирования кроссвордов

Время на прочтение
10 мин

Количество просмотров 34K

Эта история начинается с публикации «Самый сложный кроссворд, составленный компьютером». В ней приведен один из самых сложных кроссвордов, составленных программой (см. ниже).

Я был уверен, что все кроссворды давным-давно генерируются программно и был несколько удивлен тем, что это может быть проблемой. Замечу, что речь идет именно о «канадских» кроссвордах, в которых каждое слово имеет пересечение с другим словом на каждой букве или очень близких к ним по сложности. В моей работе аналитика, не так много действительно сложных задач, поэтому мне стало интересно попробовать разработать алгоритм, который мог бы это сделать. Результат размышлений, подкрепленный программой для генерации кроссвордов, приводится в этой статье.

Для заполнения кроссворда всегда используется перебор. Мы ставим первое слово, затем все следующие, проверяя, чтобы буквы на пересечениях совпадали с буквами в словах, поставленных ранее. И так, пока все слова не будут поставлены. Казалось бы – нет ничего проще. Однако простой подсчет количества итераций подбора слов для кроссворда средней длины на 50 слов может изменить это мнение. Так, для установки любого слова, кроме первого, при наличии 1 000 слов соответствующей длины в базе и наличия всего одного заполненного ранее слова на пересечении, в среднем понадобится 1 000/33 = 30 итераций (нам, в среднем, нужно будет просмотреть 30 слов, прежде чем нам попадется слово, имеющее нужную букву на позиции заполненного ранее пересечения). При наличии более одного заполненного ранее слова-пересечения, это количество будет резко расти. Простой подсчет показывает, что для заполнения 50 слов, нам нужно выполнить 30^(50-1) итераций. Это миллиарды миллиардов итераций. Даже на современных компьютерах, это потребует дни и месяцы работы. И здесь на первое место выходит уже не собственно перебор, а алгоритм, который позволит сократить время генерации кроссворда на много порядков.

На дорожку…

Сразу, «на берегу», мы должны принять то, что генерация кроссворда будет состоять из двух этапов:

  • Анализ – создание плана генерации, основным результатом которого является определенная последовательность генерации слов кроссворда и другие данные, которые будут помогать на этапе генерации.
  • Генерация – последовательное заполнение сетки кроссворда словами, методом полного перебора всех возможных вариантов, с учетом данных, полученных на этапе анализа.

Исходя из этого, я буду помечать решения, приведенные далее, к какому этапу они применимы.
Все опыты будут ставиться на кроссворде, приведенном на рисунке ниже.

Это далеко не самый сложный кроссворд, однако решения, актуальные для него, будут актуальны и для всех остальных кроссвордов. А небольшое количество слов гарантирует нам сравнительно быстрое получение результата.

И последнее. В статье будет опущено все, что касается генерации базы слов для программы. Эта часть «стоила» не менее 50% всего затраченного времени. Сейчас в базе более 158 тыс. слов, из которых более 125 тыс. являются уникальными. База в максимальной степени вычищена программным способом, однако все еще требует к себе внимания в ручном режиме. Я не стал каким либо способом закрывать или шифровать базу – она лежит открытая в текстовом виде и простейшем key-value формате. Вы можете удалить или добавить в ней слова, подкорректировать описания или полностью заменить своей (например, на другом языке).

Начало пути

Первое, что нужно определить – последовательность заполнения слов. Для этого имеются весьма простые и очевидные решения.

Решение № 1: Слова будут генерироваться в последовательности, зависящей в первую очередь, от их длины. Чем длиннее слово, тем больше у него может быть пересечений и тем труднее будет найти слово для установки. Напротив, самые короткие слова, длиной в 2 или 3 буквы, будут иметь минимальное количество пересечений и их максимально удобно подбирать на завершающем этапе генерации. Данное решение используется на этапе анализа.

Решение № 2: Из слов с одинаковой длиной, в первую очередь будут устанавливаться слова с наибольшей сложностью установки. Сложность установки – расчетный параметр, который показывает «насколько сложно будет подобрать значение в это слово» и «насколько большая будет цена ошибки, если слово подобрать не удастся». Понятно, что слова одинаковой длины, например, 5 букв, могут пересекаться как с одним словом, так и сразу с пятью, при этом сложность установки будет совершенно разная. Данное решение используется на этапе анализа.

Решение № 3: C учетом предыдущих решений, слова у нас расположены в такой последовательности, которая не гарантирует пересечение двух соседних слов между собой. Это означает, что если мы не нашли слово для установки, тогда нужно изменить не предыдущее слово, а одно из ранее установленных слов, которые пересекаются с этим словом и по сути задают для него условия подбора. Логично из всех ранее установленных слов-пересечений, заменить слово, установленное последним, чтобы откатиться на минимальное количество слов генерации. Данное решение используется на этапе генерации.

Фрагменты

Если отследить установку слов в той последовательности, которая была определенна на основании решений № 1 и № 2, можно заметить, что установка некоторых слов образует локально независимые фрагменты. Посмотрите на рисунок ниже.

На рисунке цветами показана последовательность установки первых слов в сетку кроссворда в порядке, соответствующем известному «Каждый охотник желает знать, где сидит фазан». Первым будет установлено слово, помеченное красным. После него – слово, помеченное желтым и т.д. После установки всего 2-х слов в кроссворде образовался локальный фрагмент, помеченный голубым цветом.

Прежде, чем продолжить, определимся сначала с терминологией:

  • Фрагмент – группа слов в количестве от 1 слова до 50% от общего количества слов кроссворда, генерация которых никак не зависит от всех остальных, еще не поставленных слов.
  • Стартовое слово – слово, после установки которого образовался фрагмент (на рисунке выше – это слово, выделенное желтым цветом).
  • Первое слово – слово фрагмента, имеющее минимальную очередность установки из всех слов фрагмента.
  • Глубина фрагмента – количество слов, составляющих фрагмент.

При появлении фрагмента возникает дилема – либо продолжить генерацию кроссворда в ранее определенной последовательности, либо сгенерировать сначала все слова фрагмента, чтобы проверить правильность установки стартового слова. Это одно из мест алгоритма, которое может критически влиять на его общую производительность и которое не имеет четкого логического решения.

Решение № 4: Для каждого устанавливаемого слова будет выполняться поиск фрагментов. Все слова, принадлежащие одному фрагменту будут иметь последовательную очередность установки, начиная от стартового слова, либо от первого слова фрагмента. Данное решение используется на этапе анализа.

В данный момент, часть алгоритма по изменению последовательности генерации слов фрагментов выглядит следующим образом:

  1. Находим фрагменты.
  2. Определяем сложность заполнения фрагмента.
  3. Определяем слово, за которым нужно расположить все слова фрагмента по следующим правилам:
  4. Слова, являющиеся членами фрагментов, устанавливаем друг за другом.

Собственно на этом все – алгоритм для генерации кроссворда обычным перебором готов. При минимальной детализации, выглядит он следующим образом:

  1. Определяется последовательность генерации слов.
  2. Выполняется подбор и установка слова с учетом ранее установленных слов.
  3. При отсутствии слова для установки, выполняется откат на последнее пересекающееся с ним слово, поиск которого продолжается так, как будто предыдущее его значение не было найдено вовсе.

Проверено – он реально работает на сетках до среднего уровня сложности. Однако, по мере усложнения сетки кроссворда и увеличении количества слов, количество удачных попыток генерации, стремится к 0. Собственно, с этого момента и начинается самое интересное.

Шаблоны

Первый вопрос, который приходит в голову – можно ли как-нибудь уменьшить количество откатов? Ведь каждый откат на несколько слов назад может стоить десятки и сотни тысяч итераций. Логически верным шагом становится добавление правил, которые уменьшают количество ошибок установки слов, вроде, не ставить мягкий или твердый знак в клетку, с которой начинается слово и т.д. Если не лезть глубоко, описать большинство этих правил для русского языка довольно просто, но есть проблема – они будут абсолютно бесполезны, например, для английского. Мне же хотелось сделать универсальный алгоритм, не зависящий от языка.

Размышления над этим вопросом привели к следующему: «как было бы хорошо, чтобы для каждого еще неустановленного слова, пересекающего текущее устанавливаемое слово, было гарантировано наличие вариантов для установки».

Так появилась идея использовать шаблоны, подобные команде LIKE в Transact-SQL. Шаблон – это символьная строка, по которой будет выполняться сравнение слов. Сам шаблон включает буквы и символы-шаблоны. Во время сравнения с шаблоном необходимо, чтобы буквы в точности совпадали с символами, указанными в строке. Символы-шаблоны могут совпадать с произвольными элементами символьной строки.

Решение № 5: Для каждого стартового слова будут рассчитываться шаблоны всех пересекающихся с ним слов. Стартовое слово должно иметь буквы строго из списка в шаблоне, соответствующего позиции буквы пересечения. Данное решение используется на этапе генерации.

Примеры шаблонов для слов из трех букв приведены ниже:

  • Шаблон: “___”

  1. Буква № 1: Ё А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я
  2. Буква № 2: Ё А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я
  3. Буква № 3: Ё А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я

  • Шаблон: «ДО_»

  1. Буква № 1: Д
  2. Буква № 2: О
  3. Буква № 3: Г К М Н

На примере последнего, читать шаблоны следует так: для слова из 3-х букв, у которого первые две буквы равны «ДО», в базе есть слова, у которых последняя буква равна одной из «Г К М Н».

Акселераторы

Вернемся снова к фрагментам. Посмотрите на рисунок ниже.

В нем серым отмечены клетки слов, установленных ранее. При установке слова, помеченного красным, образуются сразу два фрагмента, отмеченных голубым и фиолетовым цветами.

Если вы посмотрите на фиолетовый фрагмент, то увидите, что он связан со стартовым словом одним единственным пересечением. И это прекрасно! Это дает нам возможность воспользоваться еще одним решением.

Еще немного терминологии:

  • Акселератор – стартовое слово, имеющее дочерний фрагмент, имеющий с ним одно единственное пересечение. Свое название он получил за свойство ускорять генерацию фрагментов на порядок и более.

Решение № 6: При неудачной генерации фрагмента, для которого стартовое слово является акселератором, алгоритм будет хранить список букв, которые были установлены в стартовое слово на пересечении с одним из слов фрагмента для блокировки повторных установок слов, имеющих эти буквы на упомянутом пересечении. Данное решение используется на этапе генерации.

Алгоритм использования акселераторов приведен ниже.

Сначала – как это работает без акселератора:

  • Выполняется поиск и установка всех слов фрагмента.
  • Если заполнение фрагмента выполнено успешно, то идем дальше, иначе – меняется стартовое слово и процесс заполнения слов фрагмента повторяется.

Глубина фрагмента может быть достаточно большой и общее количество итераций для заполнения фрагмента может исчисляться миллионами. Для перебора всех возможных вариантов, нужно количество итераций для однократного заполнения фрагмента, умножить на количество слов в базе с длиной, как у стартового слова (которых могут быть десятки тысяч).

Как это работает с акселератором:

  • Выполняется поиск и установка слов фрагмента.
  • Если заполнение фрагмента выполнено успешно, то идем дальше, иначе – запоминаем букву, стоящую на пересечении акселератора и слова фрагмента.
  • Меняется слово, установленное на акселераторе, при этом новое слово не должно на упомянутом выше пересечении иметь буквы, которые были запомнены ранее.

Глубина фрагмента та же. Однако, для перебора всех возможных вариантов, нужно количество итераций для заполнения фрагмента умножить уже не на количество вариантов для стартового слова, а всего на 33 (количество букв в алфавите).

Динамическая балансировка сложностью установки

Предыдущие решения, по сути исчерпали те 20% усилий, которые, согласно принципу Парето, дают нам 80% результата. Далее приходится использовать все более сложные подходы, с порой неясными перспективами.

Однажды, при генерации кроссворда, программа выдала такое сообщение: «Время полного перебора: 11 471 день …». Это сообщение появляется только в том случае, если был выполнен перебор всех вариантов для самого первого слова и требуется найти для него новое значение. Программа уже затраченное время просто умножает на оставшееся количество вариантов. Меня это позабавило и заставило задуматься, можно ли это время конвертировать в результат? Идея состоит в том, чтобы обдуманно обрезать некоторые варианты перебора, имеющие минимальную вероятность успеха.

Основной тезис этого решения – пусть лучше программа за минимально возможное время выдаст отрицательный результат (т.е. среди наиболее оптимальных вариантов подбор не удался), чем будет заниматься подбором столько времени, что будут превышены все мыслимые границы.

Решение № 7: При установке слова, которое пересекают слова с большой сложность установки, запрещено ставить на позицию упомянутого пересечения буквы, частота применения которых в словах пересечениях минимальна. Данное решение используется на этапе генерации.

Если по простому – это решение отбрасывает некоторое количество букв русского алфавита (иногда до 20), повышая шанс сгенерировать сложные участки из слов с чаще используемыми буквами (тут в шоколаде итальянский алфавит с его 21 буквой). В результате мы получим больше вариантов для подбора сложного в установке слова, когда до него дойдет очередь, а значит – больше шанс для успешной генерации всего кроссворда.

Есть и минусы – часть вариантов перебора будет безвозвратно потеряна. Возможно, именно среди них будет тот самый, единственно возможный вариант заполнения сетки. Только Вы можете получить его через 30 лет – нужно лишь немного подождать.

Еще одним минусом является то, что длинные слова, имеющие более 10 пересечений, сильнее всего и блокируются. Это приводит к тому, что программа не может начать генерацию, блокируя первое слово, пока для него не закончатся варианты. Обходится этот минус лишь частично, уменьшением степени блокировки, а значит и эффективности этого решения.

Тестирование

Для систематизации сеток по сложности генерации введен атрибут «Сложность генерации», который рассчитывается на основании количества слов, их длины и количества пересечений. По факту — более менее стабильно результат можно получать при сложности до 600 единиц. Все что выше — на удачу.

Ниже показано среднее время генерации на 10 попытках для нескольких сеток, расположенных в порядке возрастания сложности генерации.

Сетка № 1

Несложная тестовая сетка для опытов, с небольшим количеством слов.

  • Сложность генерации: 248
  • Количество слов: 28
  • Среднее время успешной генерации, сек.: 5 (от 1 до 32)

Подитог: Сетки такой сложности генерируются быстро и стабильно.

Сетка № 2

Это сетка посложнее. Это маленький «канадский» кроссворд, где все слова имеют пересечения на всех буквах.

  • Сложность генерации: 372
  • Количество слов: 34
  • Среднее время успешной генерации, сек.: 62 (от 1 до 472)

Подитог: Сетки такой сложности в большинстве случаев генерируются довольно быстро, однако, иногда генерация может затянуться на 10 минут и более.

Сетка № 3

Эта довольно сложная сетка оказалась весьма «удобной» для генерации.

  • Сложность генерации: 544
  • Количество слов: 46
  • Среднее время успешной генерации, сек.: 1 (от 1 до 2)

Подитог: Благодаря тому что эта сетка очень хорошо фрагментируется и пересечения имеются не на всех буквах длинных слов, программа генерирует его почти мгновенно.

Сетка № 4

А вот эта сетка уже имеет «целевую» сложность. Это полноценный «канадский» кроссворд, правда, далеко не самый сложный.

  • Сложность генерации: 570
  • Количество слов: 78
  • Среднее время успешной генерации, сек.: 250 (от 10 до 989)

Подитог: Программа справилась! Успешный результат генерации, в самом крайнем случае, можно получить всего за 17 минут. Среднее время генерации чуть более 4 минут.

Сетка № 5

И, наконец – тот, самый сложный кроссворд, с которого все началось. В нем 72 слова, что не так уж и много. Однако, сложность генерации получилась очень высокой. Основной проблемой для генерации являются четыре самых длинных слова, с которыми пересекаются почти все остальные слова кроссворда. Они как кости скелета, на которые нужно нанизать все остальные слова. Откаты отбрасывает процесс генерации почти на самое начало. Таким образом, процесс генерации этой сетки можно сравнить с Сизифом, толкающим камень в гору. И каждый раз, когда до цели остается совсем немного, камень скатывается к самому началу пути.

Увы – эта вершина осталась непокоренной! Я запускал несколько генераций с разными настройками, с лимитом по длительности до 10 часов, однако ни одна из них не была завершена успешно. Времени явно не хватает. Кто знает, может быть эта непокоренная вершина вдохновит кого-нибудь на новый штурм!

Резюме

И все-таки да! Генерация кроссворда, даже для самых современных компьютеров, является сложной задачей. Я уверен, что возможности улучшить этот алгоритм далеко не исчерпаны, однако, независимо от возможностей алгоритма и мощности компьютера, всегда можно усложнить сетку кроссворда еще чуть-чуть, чтобы программа пообещала Вам результат, лет, через 20-30.
Надеюсь, вам было интересно, и вы дочитали до конца.

Добавить комментарий