Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- функция перебора выдает 21 комбинаций по 5 карт, сортируем по возрастанию
- -- на входе у нас 5 карт, считаем масти - получаем флеш true/false
- -- считаем карты, если какие-то карты ==4, то карэ/ если какие-то карты ==3 и другие карты ==2, то фх, иначе трипс
- -- если какие-то карты ==2 и другие ==2, то две пары, иначе пара
- -- последняя карта - старшая
- local tFaces = {'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'}
- local sstr = {'3h', 'Ac', '9h', '3s', '2c', '9d', '6c'}
- local str = {'Tc', 'Ac', 'Kc', 'Jc', 'Qc'}
- tTmp = {}
- tFaceH, tSuitH = {}, {}
- local function counter(tbl) -- счетчик? какой-то костыль...
- t = {}
- for z = 1, #tbl do
- if t[tbl[z]] then
- t[tbl[z]] = t[tbl[z]]+1
- else
- t[tbl[z]] = 1
- end
- end
- return t
- end
- local function cuter(tbl) -- отделяет значение карты от масти
- for c = 1, #tbl do
- tFaceH[c] = string.sub(tbl[c], 1, 1) -- отрезаем значение карты от масти
- tSuitH[c] = string.sub(tbl[c], 2, 2) -- отрезаем значение масти от карты
- end
- return tFaceH, tSuitH -- возвращаем таблицы с результатом
- end
- local function tonumb(tbl) -- преобразование значения карты в число 1-13, принимает таблицу вида {'A', '2', 'T'...
- -- возвращает {'13', '1', '9'...
- for r = 1, #tFaces do -- проходим по таблице значений, индексы - числовые значения карты
- for e = 1, #tbl do -- проходим по таблице с картами
- if tbl[e] == tFaces[r] then -- если нашли совпадение, то
- tbl[e] = r -- присваиваем на место карты ее числовое значение
- end
- end
- end
- return tbl -- возвращаем числовые значения карт
- end
- local function toface(tbl)
- for r = 1, #tFaces do
- for e = 1, #tbl do
- if tbl[e] == r then
- tbl[e] = tFaces[r]
- end
- end
- end
- return tbl
- end
- local function ssort(tbl) -- сортирует таблицу в порядке возрастания значений
- --принимает таблицу вида {'2c', '3c', '4c', '6c', '5c'}
- tbl = tonumb(tbl)
- for i = 1, #tbl do -- перебираем...
- m = i
- for j = i+1, #tbl do
- if tbl[m] > tbl[j] then m = j end -- если это значение больше предыдущего
- end
- tbl[i], tbl[m] = tbl[m], tbl[i] -- меняем местами значения
- end
- tbl = toface(tbl)
- return tbl -- возвращаем отсортированную таблу
- end
- local function test_flush(ftbl) -- проверка на флаш, принимает таблицу мастей ({'c','h','s','d','c'}), выдает true/false
- amounts = counter(ftbl)
- for key, value in pairs(amounts) do -- считаем масти
- if value == 5 then -- если = 5, то
- f = true -- flush есть
- else f = false -- иначе нет
- end
- end
- return f -- вернуть есть/нет
- end
- local function test_straight(stbl) -- принимает таблицу {'A', 'T', 'Q', '9'...
- s_stbl = table.concat(stbl) -- конвертируем в строку
- s_straight = 'A23456789TJQKA' -- создаем строку стритов
- b_straight = false -- состояние
- straight_p = 0 -- сила стрита
- for f = 1, 10 do
- print(string.sub(s_stbl, 1, 5), ' ', string.sub(s_straight, f, f+4))
- if string.sub(s_stbl, 1, 5) == string.sub(s_straight, f, f+4) then
- b_straight, straight_p = true, f
- end
- end
- return b_straight, straight_p -- возвращаем true/false и силу руки
- end
- local function test_pairs(tbl)
- local amounts = counter(tbl)
- for key, value in pairs(amounts) do
- tTmp[key] = value
- end
- return tTmp
- end
- local face, suit = cuter(str)
- face = ssort(face)
- --проверка на рояльфлеш
- if test_flush(face) == true and table.concat(test_straight(face)) == true10 then
- print('WOW!')
- else
- -- поиск каре
- tTmp = test_pairs(face)
- for i = 1, #tTmp do
- if tTmp[i] == 4 then
- print('kare')
- elseif tTmp[i] == 3 then
- print('three')
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement