powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / быстрое сравнение
11 сообщений из 11, страница 1 из 1
быстрое сравнение
    #37314362
beatles4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишу алгоритм для игры в нарды. за 1 ход бывает можно передвинуть 4 фишки.
например:
0 1 - означает, что передвигаем фишку с клетки 0 на клетку 1
Т.е. один ход может выглядеть так:

0 2| 4 6 | 5 7 | 9 11|

условно напишем
a b c d



Далее мне необходимо провести быстрое сравнение и дуаление одинаковых ходов, например:

0 2| 4 6 | 5 7 | 9 11|
и
4 6| 0 2 | 9 11 | 5 7 |

это один и тот же ход, т.е. вторую версию того же хода удаляем.
На РИСУНКЕ - Ходы №19 - 23 - абсолютно одинаковые, необходимо из них удалить ходы № 20-23


всего вариантов расстановок abcd может быть 24:
a a a a
a a b b
c c c d
и т.д.

Я написал алгоритм, который бёрёт первый ход и сравнивает с остальными, потом берёт второй ход и сравнивает с остальными, начиная уже с третьего и т.д.
Но это работает ОЧЕНЬ медленно.

Скажите - у кого-нибудь есть идея, как сделать более быстрый проход и поиск повторяющихся ходов?
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314394
Гата Селов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отсортировать ходы внутри себя, потом отсортировать массив ходов, потом сравнивать рядом стоящие?
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314399
beatles4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за идею. попробую реализовать
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314412
миникап
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и сравнивать с уже доступными ходами в момент формирования очередного хода
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314426
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beatles4как сделать более быстрый проход и поиск повторяющихся ходов?
Наложить при переборе условие, что положение следующей сдвигаемой фишки не больше предыдущей. Тогда повторение ходов исключится.
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314457
Гата Селов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, да. Лучше проблему решить еще при генерации ходов
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314591
beatles4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не совсем понял алгоритм, о котором говорит Akina.

См. РИСУНОК. Пусть мы играем за красных. Пусть у нас всего 3 фишки (для простоты). и нам нужно сделать 4 хода по одному.
В левом листбоксе - список ВСЕХ ходов, а в правом верхнем - уже тех, которые без повторений.

если написать, как вы говрите - "положение следующей сдвигаемой фишки не больше предыдущей", то он пропустит ход:
02|13|00|00
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314647
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beatles4,

Сразу формируй положение фишек. м.б. даже не нужно такое кодирование ходов.
На примере выше:
0123456... ( 15)
04 00 00 00 -> 0200100...
15 00 00 00 -> 1100010...
02 13 00 00 -> 0110100... (-15)

Идентичные положения убиваются, или, в понятиях БД, делается группировка.
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314674
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beatles4,

Вообще, что касается нард, тут лучше перебор делать не для каждой фишки, а для каждого места, где находится фишка, и делать перебор по одному ходу. Во-первых, это значительно уменьшит количество вариантов из-за того что фишки любят стоять друг на друге. Во-вторых, количество вариантов будет уменьшатся из-за невозможных ходов, что в нардах тоже довольно часто.
Навскидку, можно сделать рекурсивный алгоритм перебора. Не думаю, что бы в нардах будет много вариантов. Думаю, около сотни, но могу ошибаться при двух ходах.
Кстати, если хода 4, то все они одинаковы, это тоже можно учесть...
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314860
beatles4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
refreg, я не совсем понял ваш алгоритм.
помотрите, пожалуйста на рисунок сверху - тав в правно мнижнем текстбоксе есть такой ход:
12|01|13|00

это означает:
1)фишку с 1 перетаскиваем на 2
2)фишку с 0 перетаскиваем на 1
2)фишку с 1 перетаскиваем на 3
итого (2-1) + (1-0) + (3-1) = 4, т.е. наши 4 хода, т.к. выпало 1 куш, т.е. 4 раза по 1 сходить.


а вы написали 04 00 00 00 -> 0200100... - я не пойму что это означает.

можете на примере хода 12|01|13|00 объяснить, пожалуйста
...
Рейтинг: 0 / 0
быстрое сравнение
    #37314879
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beatles4,

изначально, у тя
1 2 0 0 0 0 0 0 0 ... 0 0 - всего 24 (черные не будем рассматривать)

после 12 01 13 00 будет:
Код: plaintext
1.
2.
3.
4.
5.
12:
1 1 1 0 0 ...
01:
0 2 1 0 0 ...
13:
0 1 1 1 0 0 ... - вот это окончательный вариант
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / быстрое сравнение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]