Производитель процессора Кроссворд из 5 букв

Обновлено: 21.11.2024

Заблокировано. Этот вопрос и ответы на него заблокированы, потому что вопрос не по теме, но имеет историческое значение. В настоящее время он не принимает новые ответы или взаимодействия.

Если у вас есть список слов, как бы вы расположили их в сетке кроссворда?

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

13 ответов 13

Я придумал решение, которое, возможно, не самое эффективное, но работает достаточно хорошо. В основном:

  1. Отсортировать все слова по длине в порядке убывания.
  2. Возьмите первое слово и поместите его на доску.
  3. Возьмите следующее слово.
  4. Поиск по всем словам, которые уже есть на доске, и посмотрите, есть ли какие-либо возможные пересечения (любые общие буквы) с этим словом.
  5. Если есть возможное место для этого слова, переберите все слова на доске и проверьте, не мешает ли новое слово.
  6. Если это слово не ломает доску, то поместите его туда и переходите к шагу 3, в противном случае продолжайте поиск места (шаг 4).
  7. Продолжайте этот цикл, пока все слова не будут размещены или не будут размещены.

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

  • В конце создания кроссворда дайте ему оценку, основанную на том, сколько слов было размещено (чем больше, тем лучше), размера доски (чем меньше, тем лучше) и соотношения между высотой и шириной. (чем ближе к 1, тем лучше). Создайте несколько кроссвордов, а затем сравните их результаты и выберите лучший.
    • Вместо произвольного количества итераций я решил создать как можно больше кроссвордов за произвольное время. Если у вас небольшой список слов, то за 5 секунд вы получите десятки возможных кроссвордов. Кроссворд большего размера можно выбрать только из 5-6 вариантов.

    Я пишу эту программу, пока мы говорим, и это тот же самый алгоритм, который я выбрал. Для небольшого количества слов (10 или меньше) программа без труда вычислила все возможные решения за миллисекунды. Хотя алгоритм экспоненциальный. Самая простая часть — написать базовый алгоритм, который перебирает все возможные комбинации. Трудная часть — это дюжина или около того «быстрых путей», которые вам нужны, чтобы программа не пробовала все тупиковые решения.

    "5... и проверьте, не мешает ли новое слово" Как вы объясняете ситуации, когда новое слово помещается рядом с существующим словом, что приводит к тарабарщине в тех местах, где к нему примыкают квадраты? Например: LEMON ERASE Если «LE», «ER» и «MA» и т. д. не слова в вашем списке, это неправильно. С другой стороны, полный отказ от таких смежностей может привести к отбрасыванию действительно хороших сеток, например: W LEMON ERASE NEXUS T T

    @Kaffeine, да, я понимаю, что вы имеете в виду - мне пришлось выбросить эти параметры, потому что, хотя они могли создавать действительно хорошие сетки, их слишком сложно проверить (читай: меня это не беспокоит), и, скорее всего, это просто помехи.

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

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

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

    @Bryan, ссылка на ваш сайт у меня не работает, а основной домен просто перенаправляет на Twitter. У вас есть обновленная ссылка на ваш код?

    На самом деле я написал программу создания кроссвордов около десяти лет назад (это было загадочно, но те же правила применимы и к обычным кроссвордам).

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

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

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

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

    Это на самом деле не помогает мне в моей ситуации, так как у меня будет список всего из 6-12 слов. Моя больше похожа на обучающее упражнение для пользователя, чем на словесную головоломку. +1 за интересный алгоритм в любом случае!

    Хорошее описание. Я думал об этом несколько раз в прошлом, но никогда не пробовал. Теперь волшебный вопрос: насколько хорошо это сработало? Только для разреженных головоломок, или еще и для плотных (как в бумаге)? А сколько подсказок нужно для плотных головоломок?

    @dmckee, это было давно, но, насколько я помню, даже сложные головоломки были довольно хороши. Многие из них были завершены без вмешательства, но вы все равно получите, может быть, пятую часть, требующую добавления одного или двух дополнительных слов. И мы говорим о тысячах слов в файле. Без сомнения, откат мог бы помочь, но клиенту было проще просто отклонить предложение с (например) 5 незаконченными словами, чем беспокоиться о попытках найти дополнительные подсказки. Пять — это предел, который я видел для незаконченных слов.

    Этот алгоритм создает 50 плотных кроссвордов со стрелками 6x9 за 60 секунд. Он использует базу данных слов (со словами и подсказками) и базу данных досок (с предварительно настроенными досками).

    Большая база данных слов значительно сокращает время генерации, а некоторые доски труднее заполнять! Большие доски требуют больше времени для правильного заполнения!

    Предварительно настроенная доска 6x9:

    Сгенерированная доска 6x9:

    Хотя это старый вопрос, я попытаюсь ответить на основе аналогичной работы, которую я проделал.

    Существует множество подходов к решению проблем с ограничениями (которые обычно относятся к классу сложности NPC).

    Это связано с комбинаторной оптимизацией и программированием в ограничениях. В этом случае ограничениями являются геометрия сетки и требование уникальности слов и т. д..

    Подходы рандомизации/отжига также могут работать (хотя и в соответствующих условиях).

    Эффективная простота может быть высшей мудростью!

    Требованиями были более или менее полный компилятор кроссвордов и (визуальный WYSIWYG) конструктор.

    Оставляя в стороне часть компоновщика WYSIWYG, структура компилятора была следующей:

    Загрузить доступные списки слов (отсортированные по длине слова, т.е. 2,3, 20)

    Найти ячейки слов (то есть слова сетки) в созданной пользователем сетке (например, слово по координатам x,y длиной L, по горизонтали или по вертикали) (сложность O(N))

    Вычислить точки пересечения слов сетки (которые необходимо заполнить) (сложность O(N^2))

    Вычислить пересечения слов в списках слов с различными буквами используемого алфавита (это позволяет искать совпадающие слова с помощью шаблона, например, тезис Сика Камбона, используемый cwc) (сложность O(WL*AL) )

    Шаги .3 и .4 позволяют выполнить эту задачу:

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

    б. Пересечения слов в списке слов с алфавитом позволяют найти совпадающие (кандидатные) слова, которые соответствуют заданному «шаблону» (например, «А» на 1-м месте и «В» на 3-м месте и т. д.)

    Итак, с этими реализованными структурами данных использовался примерно такой алгоритм:

    ПРИМЕЧАНИЕ: если сетка и база данных слов постоянны, предыдущие шаги можно выполнить только один раз.

    Первый шаг алгоритма — случайным образом выбрать пустую ячейку слов (слово сетки) и заполнить ее словом-кандидатом из связанного с ним списка слов (рандомизация позволяет создавать разные решения при последовательном выполнении алгоритма) (сложность O(1) или O(N) )

    Для каждого еще пустого слота для слов (который пересекается с уже заполненным слотом для слова) вычислите коэффициент ограничений (он может варьироваться, sth simple – это количество доступных решений на этом шаге) и отсортируйте пустые слоты для слов по этому соотношению (сложность O(NlogN) или O(N))

    Пройтись по пустым слотам слов, вычисленным на предыдущем шаге, и для каждого попробовать ряд альтернативных решений (убедившись, что «соответствие дуги сохраняется», т.е. сетка имеет решение после этого шага, если используется это слово) и отсортировать их в соответствии с максимальной доступностью для следующего шага (т.е. следующий шаг имеет максимально возможные решения, если это слово используется в это время в этом месте и т. д.) (сложность O(N*MaxCandidatesUsed))

    Заполните это слово (отметьте его как заполненное и перейдите к шагу 2)

    Если не найдено ни одного слова, удовлетворяющего критериям шага 3, попробуйте вернуться к другому возможному решению некоторого предыдущего шага (здесь критерии могут различаться) (сложность O(N))

    Если найден возврат, используйте альтернативу и, при необходимости, сбросьте все уже заполненные слова, которые могут нуждаться в сбросе (снова пометьте их как незаполненные) (сложность O(N))

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

    В противном случае, когда все словесные лоты будут заполнены, у вас будет одно решение

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

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

    ПС. все это (и многое другое) было реализовано на чистом JavaScript (с параллельной обработкой и WYSIWYG)

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

    Определения слов в Википедии
    Intel Corporation (более известная как Intel, стилизованная под Intel) — американская многонациональная технологическая компания со штаб-квартирой в Санта-Кларе, Калифорния. Intel является одним из крупнейших в мире производителей полупроводниковых микросхем с самой высокой стоимостью выручки. .

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

    Там он призвал командующих FIST и их начальников разведки, чтобы они присоединились к нему и его собственным начальникам разведки и оперативников.

    Ганни Салливан отправил его к Аллаху, но у нас есть двое живых, и они немного поговорили, дали нам полезную информацию, как мне сказали ребята из Intel.

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

    Лора тоже устала от беспокойства, и ей все еще нужно было сказать Джейку, что Intel повторно активировала ее в качестве консультанта по коммуникациям в операции Shadowpoint.

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

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

    >

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

    Я знаю, что в прошлую субботу советник по национальной безопасности позвонил мне и сказал, что у него есть информация о том, что Айдид будет на каком-то большом саммите террористов в Ираке 6 марта.

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

    Когда вы доберетесь сюда, все данные, все фрагменты и фрагменты, будут отправлены на базу вместе с вашими информационными людьми.

    Джулиан сказал в наушник, который установил сержант intel: «Если у вас проблемы с переводом, спросите меня».

    Все их данные сводились к тайной встрече высокопоставленных генералов на новом французском авианосце «Шарль де Голль».

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

    Не было никаких убедительных доказательств этого, конечно, только опасения, породившие опасения, что элитная группа историков/повстанцев, названная секции Intel Защитниками охраны природы, может знать гораздо больше, чем Доверие. или даже сами бароны.

    И, согласно полученной нами информации, Фенвик действительно провел большую часть дня в иранской миссии.

    Вид с воздуха на фабрику Нака, где вспыхнул пожар. (Ренесас Электроникс Корпорейшн)

    НЬЮ-ЙОРК. Пожар на заводе, принадлежащем японскому производителю микросхем Renesas, может усугубить продолжающуюся глобальную нехватку полупроводников, которая особенно затруднила производство автомобилей.

    Компания, которая производит чипы для Toyota, Nissan и Honda, ожидает, что производство в одном из зданий ее завода Naka в Хитачинаке будет остановлено на месяц. 22 марта акции всех трех автопроизводителей упали на 2–3 %.

    Компания Renesas из Токио сообщила, что пожар начался из-за перегрева и возгорания некоторого оборудования, однако неизвестно, что вызвало его перегрев. Жертв и повреждений здания нет.

    Ренесас сказал, что две трети продуктов, производимых в здании, могут быть произведены в другом месте, хотя "из-за недавнего роста спроса на полупроводники ситуация не позволяет немедленно производить все продукты альтернативно".

    Отдельно на прошлой неделе Nissan заявил, что временно останавливает производство на заводах в Смирне, штат Теннеси; Кантон, штат Миссисипи; и в Агуаскальентесе, Мексика, из-за нехватки чипсов.

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

    Нехватка чипов в сочетании с февральским зимним штормом недавно вынудила Ford производить пикапы F-150 без компьютеров. Компания заявила, что пикапы будут храниться на заводах в течение «несколько недель», а затем будут отправлены дилерам после того, как компьютеры будут доступны и будет проведена проверка качества.

    Представители отрасли говорят, что компании, производящие полупроводники, переключили производство на бытовую электронику во время наибольшего спада продаж автомобилей из-за COVID-19 прошлой весной. Мировые автопроизводители были вынуждены закрыть заводы, чтобы предотвратить распространение вируса. Когда автопроизводители пришли в себя, чипов стало не хватать из-за резкого роста спроса на персональную электронику.

    Хотите больше новостей? Послушайте сегодняшние ежедневные брифинги ниже или перейдите сюда для получения дополнительной информации:

    Читайте также: