Производитель процессора Кроссворд из 5 букв
Обновлено: 21.11.2024
Заблокировано. Этот вопрос и ответы на него заблокированы, потому что вопрос не по теме, но имеет историческое значение. В настоящее время он не принимает новые ответы или взаимодействия.
Если у вас есть список слов, как бы вы расположили их в сетке кроссворда?
Это не должно быть похоже на "правильный" симметричный кроссворд или что-то в этом роде: просто выведите начальную позицию и направление для каждого слова.
13 ответов 13
Я придумал решение, которое, возможно, не самое эффективное, но работает достаточно хорошо. В основном:
- Отсортировать все слова по длине в порядке убывания.
- Возьмите первое слово и поместите его на доску.
- Возьмите следующее слово.
- Поиск по всем словам, которые уже есть на доске, и посмотрите, есть ли какие-либо возможные пересечения (любые общие буквы) с этим словом.
- Если есть возможное место для этого слова, переберите все слова на доске и проверьте, не мешает ли новое слово.
- Если это слово не ломает доску, то поместите его туда и переходите к шагу 3, в противном случае продолжайте поиск места (шаг 4).
- Продолжайте этот цикл, пока все слова не будут размещены или не будут размещены.
Это делает кроссворд рабочим, но часто довольно плохим. Я внес ряд изменений в базовый рецепт выше, чтобы получить лучший результат.
- В конце создания кроссворда дайте ему оценку, основанную на том, сколько слов было размещено (чем больше, тем лучше), размера доски (чем меньше, тем лучше) и соотношения между высотой и шириной. (чем ближе к 1, тем лучше). Создайте несколько кроссвордов, а затем сравните их результаты и выберите лучший.
- Вместо произвольного количества итераций я решил создать как можно больше кроссвордов за произвольное время. Если у вас небольшой список слов, то за 5 секунд вы получите десятки возможных кроссвордов. Кроссворд большего размера можно выбрать только из 5-6 вариантов.
Я пишу эту программу, пока мы говорим, и это тот же самый алгоритм, который я выбрал. Для небольшого количества слов (10 или меньше) программа без труда вычислила все возможные решения за миллисекунды. Хотя алгоритм экспоненциальный. Самая простая часть — написать базовый алгоритм, который перебирает все возможные комбинации. Трудная часть — это дюжина или около того «быстрых путей», которые вам нужны, чтобы программа не пробовала все тупиковые решения.
"5... и проверьте, не мешает ли новое слово" Как вы объясняете ситуации, когда новое слово помещается рядом с существующим словом, что приводит к тарабарщине в тех местах, где к нему примыкают квадраты? Например: LEMON ERASE Если «LE», «ER» и «MA» и т. д. не слова в вашем списке, это неправильно. С другой стороны, полный отказ от таких смежностей может привести к отбрасыванию действительно хороших сеток, например: W LEMON ERASE NEXUS T T
@Kaffeine, да, я понимаю, что вы имеете в виду - мне пришлось выбросить эти параметры, потому что, хотя они могли создавать действительно хорошие сетки, их слишком сложно проверить (читай: меня это не беспокоит) i>, и, скорее всего, это просто помехи.
В отличие от нескольких найденных мной алгоритмов, которые реализуют метод случайного перебора слов, как предлагали некоторые, я попытался реализовать несколько более разумный подход к размещению слов методом перебора. Вот мой процесс:
В итоге у вас получится приличный кроссворд или головоломка для поиска слов, так как они примерно одинаковы. Он имеет тенденцию работать довольно хорошо, но дайте мне знать, если у вас есть какие-либо предложения по улучшению. Большие сетки работают экспоненциально медленнее; большие списки слов линейно. Большие списки слов также имеют гораздо больше шансов на лучшее размещение слов.
@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 прошлой весной. Мировые автопроизводители были вынуждены закрыть заводы, чтобы предотвратить распространение вируса. Когда автопроизводители пришли в себя, чипов стало не хватать из-за резкого роста спроса на персональную электронику.
Хотите больше новостей? Послушайте сегодняшние ежедневные брифинги ниже или перейдите сюда для получения дополнительной информации:
Читайте также: