Цитата (БиллиУбили @ 6.2.2020)
Строку(число) из 17 цифр побитово сравнить со всеми возможными комбинациями в топе?
да.
можно иметь строку 17 цифр. а можно иметь одно 64-бит число в котором есть все карты из колоды, каждый бит из младших 52 бит - одна карта.
полная колода 0xfffffffffffff, двойка 0x1, тройка 0x2 и т.д. Все 17 карт => 17 бит в числе M.
маска для всех двоек
b=0x8004002001,
n=m & b; в n будет маска для всех двоек. осталось только их посчитать.
считаем:
n=n + (n >> 26); еще раз
n=n + (n >> 13); в младших 3-х битах сумма всех двоек,
n=n & 7; очистили старшие биты, все! в n - точное число всех двоек. это двойки.
запишем в
a[0]=n; и запомним в
mах[n]=0; тут будут найденные пары, тройки, четверки совпадений.
теперь сдвинем M,
m=m >> 1; теперь считаем тройки так же как двойки.
запомним
a[1]=n; и запомним в
mах[n]=1; и так до тузов.
в конце имеем массив
int a[12] - тут все совпадения карт, и
int mах[4] - тут в mах[4], max[3] - будут старшие тройки (причем максимальные номера, мы же искали от двоек к тузам и младшие затрутся), если оба равны 0
, значит троек нет, в max[2] - максимальная пара, если 0
и пар нет, если >0 - то есть максимальная пара.
и главное - пох сколько карт, хоть 32! цикл 0..12, внутри 2 сложения, 3 сдвига и ответ!
А так да. Если теоретически в ветке нельзя набрать больше текущего максимума, то нефиг там бегать.