От a до z, потом от А до Z, все цифры от 0 до 9 и недавно добавил еще русские от а до я и от А до Я.
Ты о чем? Всего 52 карты.
Просто от 0 до 51.
Можно, конечно, разделить на масть и число, ну тогда все равно в 1 байт можно старшие 4 бита масть 0..3, младшие 4 бита число. Но потом при работе это такой гемор, эти разрывы мешают. Как их использовать когда берешь ссылку в массиве? 0,1,2,3..11,12, 16,17,18...
Да и скорости это не прибавит. Масть из 0..51 делается легко "div 13", а значение"mod 13". Одна операция. А старший байт взять это ж тоже операция.
Да и не так часто это нужно.
И красота (буковки) нужна только если смотреть человеку, машине буковки не нужны.
И еще!! Хотя ты на С пишешь и тебе это понятно. Человеку выгодней считать 1,2,3,...52, а машине 0,1,2,3,...51. Потом в проге это сильно скажется, вот эта лишняя 1ка заебёт.
Еще посоветую, мож нужно.
Заранее посчитаны несколько массивов.
Bit64[63] - все битовые маски Bit64[0]=1, Bit64[1]=2, Bit64[3]=4, Bit64[4]=8 и т.д., когда надо взять битовую маску просто номер карты и сравниваешь есть ли она в колоде, ведь колоду можно записать как число С=0111001011110010111011100B например двоичное. Если вся колода полная то = $FFFFFFFFFFFFF. И выкидываешь из нее по карте.
Сформированы все пары, их 1326, все тройки, их 22100. И для всех пар и троек есть массивы с битовой маской, два или три массива с номерами которые входят в эту двойку/тройку.
Посчитаны массивы всех пятерок 2598960, просто сила руки с кикерами, все пять карт которые входят в эту руку, отдельно мощность (фулл, стр), бонусы для низа и мида.
И все это отсортировано по убыванию.
Т.е. если я что-то ищу по этому массиву и нашел пятерку меньше нужной, все дальше не иду, остальные младше.
Всякие "div 13", "mod 13" тоже сразу посчитаны.
Тут в догонку есть массивы перевода карт в буквы, если надо карту вывести на экран, отдельно буквы масти, отдельно значение.
('s','c',d',h')... Можно и вместе ('2s','3s',...) по номеру сразу буковки.
Все CNK -биномиальные коэффициенты, С(n,k) - тоже посчитаны. Даже есть CNK1,CNK2,CNK3,CNK4,CNK5 - это C(n,1), C(n,2), чтобы быстрей брать, если надо.
Я тебе просто показал что ты не дружишь с математикой китайского покера ... за 10$ могу тебе такой пример подобрать ...