Тема: Покер
Показать сообщение отдельно
  #13  
Старый 16.02.2011, 21:15
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Был завален работой

Вобщем пока что черновой вариант, работает так как показано на картинках с примера. ( возможны ошибки, так как эта игра сама по себе меня мало интересует, а поэтому реализовал то что увидел)

Скорость где-то 1000000 вар/сек.

Понатное что это не предел, там многое можно ускорить...
но сами понимаете - долго над функцией не думал...

Карты нумеруются от 0 до 51:

0 - 2 чир,
1 - 2 буб,
2 - 2 крес,
3 - 2 пик,
4 - 3 чир,
5 - 3 буб,
6 - 3 крес,
7 - 3 пик
...........
48 - Т чир,
49 - Т буб,
50 - Т крес,
51 - Т пик.

1 байт --> 1 карта.
Чтобы сохранить все возможные варианты - понадобится 1,3Гб на диске.

Результат строка с начальными буквами комбинаций.


PHP код:
function accka9funkci9(k1,k2,k3,k4,k5:byte):string;
var
i,j:integer;
tm,amo,ado:byte;
a:array[1..5]of byte;
s:string;
begin
s
:='xren6';
a[1]:=k1;
a[2]:=k2;
a[3]:=k3;
a[4]:=k4;
a[5]:=k5;
for 
i:=1 to 4 do
  for 
j:=1 to 4 do
    if 
a[j]<a[j+1then
      begin
        tm
:=a[j];
        
a[j]:=a[j+1];
        
a[j+1]:=tm;
      
end;
amo:=a[1mod 4// 0-3
ado:=a[1div 4// 0-12

if (a[2mod 4=amo)and(a[3mod 4=amo)and (a[4mod 4=amo)and(a[5mod 4=amothen
    begin
      
if ado=12 then
        begin
          
if a[5div 4 =8 then s:='FR';
        
end
      
else
        if (
a[1]-a[5])=16 then s:='SF' else s:='F';
    
end
  
else
    
begin
      
if (ado-a[2]div 4)>1 then
        s
:='Hc'
      
else
      if 
ado =a[4div 4 then s:='FoK'
        
else
          
begin
            
if (ado=a[3]div 4then
              begin
                
if (a[4]div 4 a[5]div 4then s:='FH' else s:='ToK';
              
end
              
else
              
begin
                
if (ado=a[2]div 4then
                    
if (a[3]div 4 a[4]div 4then s:='Tp'
                  
else
                    
begin
                      
if (a[1div 4 a[5div 4)=4 then s:='S' else s:='Op';
                    
end;
              
end;
          
end;
    
end;
result:=s;
end
Ответить с цитированием