|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
||||||
Поиск всех возможных комбинаций букв в поле 5 на 529.03.2024, 13:23. Показов 790. Ответов 3
Метки нет (Все метки)
Здравствуйте.
Пытаюсь реализовать игру "Балда" с полем 5 на 5. В качестве поля используется объект DataGridView. По моей задумке, алгоритм хода компьютера должен быть следующим: 1. Считаем сколько сейчас букв на поле. 2. Из нашей базы данных слов берём только те, чья длина равна количеству букв на поле + 1. 3. Составляем список всех возможных сочетаний из букв на поле (по диагонали не считаем) и сортируем его по уменьшению длины. 4. Проходимся по этому списку и к каждому элементу сначала слева, а потом справа подставляем все буквы алфавита по очереди и проверяем, получилось ли у нас одно из слов для словаря. 5. Если слово получилось, то записываем его в список возможных ответов и ищем дальше, но только среди слов такой же длины. 6. Из полученного списка возможных ответов случайным образом выбираем слово. У меня проблема на пункте 3. Допустим, у нас начало игры и ходит компьютер. По центру записано слово "ОБЖИГ". Я хочу получить массив, содержащий следующий строки: обжиг, обжи, обж, об, бо, бж, бжи, бжиг, жб, жбо, жи, жиг, иж, ижб, ижбо, иг, ги, гиж, гижб, гижбо. Т.е. проверять надо каждую ячейку (начиная с 0, 3, потому что третья строка единственная в которую гарантировано вписано слово) на заполненность соседей, а потом переключаться на соседнюю и проверять уже для неё. Тут явно напрашивается какой-то рекурсивный метод, но у меня ничего подобного не выходит. Помогите, пожалуйста. Добавлено через 42 минуты Получилось родить нечто похожее, но увы, не работает как надо:
0
|
||||||
| 29.03.2024, 13:23 | |
|
Ответы с готовыми решениями:
3
Замена несколько букв(генератор всех возможных комбинаций) Генерация всех возможных комбинаций слова путем манипуляций с регистрами букв
|
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,565
|
||
| 29.03.2024, 13:57 | ||
|
1. Кладём текущую ячейку в буфер 2. Выбираем направление (вверх, направо, вниз, налево) 3. Проверка, есть ли по выбранному направлению ячейка с буквой и не были ли мы уже на ней 4. Если да - идём на пункт 1 с выбранной ячейкой 5. Если нет, то выводим содержимое буфера, удаляем текущую ячейку из буфера. Конец рекурсии Набросал интуитивно, надо проверять. Добавлено через 11 минут Ну и конечно же, игровое поле придётся делать отдельным двумерным массивом структур, содержащих информацию о букве в ячейке и признаке обхода её (и может что ещё). А DataGridView должна просто отображать состояние этого массива.
1
|
||
|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
||||||
| 02.04.2024, 13:16 [ТС] | ||||||
|
Начал писать алгоритм с нуля и у меня почти получилось!
Для проверки, посещалась ли ячейка, я использую список посещённых ячеек. Так как направления движения всего 4, то я сделал массив возможных смещений.
Поясню на том же слове "ОБЖИГ" вписанному по центру: Мы отлично отрабатываем с буквой "О" и получаем все нужные комбинации. Но когда доходим до "Б", то получаем список из "Б", "БО", "БОЖ"... Вот этого "БОЖ" уже быть не должно, разумеется, должно быть "БЖ". Вроде бы и понятно что надо сделать, но чёт я на удивление долго с этим туплю... И да, согласен, что было бы куда правильнее использовать двумерный массив и не заморачиваться с самим объектом DataGridView. Но как бы это смешно не звучало, я чёт слишком увлёкся, чтобы подумать об этом заранее ¯\_(ツ)_/¯ Теперь уже хочется увидеть, что всё работает, а потом на двумерный массив переходить...
0
|
||||||
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,565
|
|||||||||||||||||||||
| 02.04.2024, 14:41 | |||||||||||||||||||||
Сообщение было отмечено FaceHoof как решение
Решение
FaceHoof, я в прошлый раз не скинул вам свой пример, который на коленке писал: https://dotnetfiddle.net/CnLh3Y
Кликните здесь для просмотра всего текста
Там только одномерная строка, поэтому не очень информативно. Однако ваш случай обходит. Добавлено через 43 минуты FaceHoof, хотя двумерный вариант при наличии указанного выше массива ячеек не намного сложнее: https://dotnetfiddle.net/RVnCJA Кликните здесь для просмотра всего текста
1
|
|||||||||||||||||||||
| 02.04.2024, 14:41 | |
|
Помогаю со студенческими работами здесь
4
Генератор всех возможных комбинаций Сортировка всех возможных комбинаций 4 из 8 Генерация всех возможных комбинаций Перебор всех возможных комбинаций
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|