Главная » Статьи » Мои статьи

Рандом на Пахане

Возможно, многим знакома ситуация, когда в одиночку на пахане достаточно долго не удаётся отгадать комбу. Максимально для определения комбы можно потратить 15 ходов (в течение которых он дважды попытается ударить Вас). Минимально требуется всего 3 хода.

Ниже приводится программа на Turbo Pascal и две таблички в Microsoft Excel, в которых проверяется рандом. Результаты не очень радуют. Чтобы в одиночку угадать комбу, чаще всего требуется от 5 до 13 попыток. Самая большая вероятность (около 11%) угадать комбу - за 7...11 попыток. Самая малая вероятность (около 3,5%) - за 3, 4, 14 и 15 попыток 

Проценты угадывания комбы. Тестов выполнено 1000 и 5000. Пахан меняет комбу только после угадывания очередного элемента (всего два раза).

 

угадано с попыток

 

3

4

5

6

7

8

9

10

11

12

13

14

15

%%

3,9…3,6

3,8…3,9

7,3…7,4

8,3…8,1

12,8…11,1

10,3…11,4

9,9…11,7

12,3…10,6

10,2…11

7,2…6,7

7,3…7

3…3,4

3,7…3,5



Проценты угадывания комбы. Тестов выполнено 1000 и 5000. Пахан меняет комбу всякий раз.

 

 

угадано с попыток

 

3

4

5

6

7

8

9

10

11

12

13

14

15

%%

4,2…3,6

3,3…3,5

7,7…7,5

7,4…7,3

10,8…11,7

9,8…11,5

11,9…10,3

11,3…11,2

10,5…11,7

7,4…6,9

7,8…7,1

4,7…3,6

3,2…3,5

 

текст программы

program pahan;
uses crt;
var  ft: text;
rezult : array[1..10000] of byte;
itog : array[3..15] of real;
fileout: string[14];
p, povtor: longint;
pax_komb, i, ag, pechfile, ekr, var_igrok1, var_igrok, var_pahan: byte;

begin
repeat;
 clrscr;
 repeat
  write('CKO/\bKO PA3 povtorjat ?  10, 100, 1000, 10000 ?  ');
  readln(povtor);
  if (povtor < 1) or (povtor > 10000) then povtor:=0;
 until povtor >0;
    repeat
  write('pahan bydet menjat komby kazdii raz ? ( 1 - da,  2 - net )  ');
  readln(pax_komb);
   until pax_komb in [1, 2];
   repeat
  writeln('vivodit na ekran kazdyiy igry ? ( 1 - da,  2 - net )  ');
  write('(  vivod na ekran zamedljaet vichislenija ) ');
  readln(ekr);
   until ekr in [1, 2];
 writeln(' objazatelno vivodjatsja na ekran obshie itogi  ');
   repeat
  write(' soxranjat rezyltati v fail ? ( 1 - da, 2 - net ) ');
  readln(pechfile);
   until pechfile in [1, 2];
  if pechfile=1 then begin
  write('   vvedite imja faila (ne bolee 8 simvolov, rasshirenie  .txt ) ');
  readln(fileout);
                     end;
randomize;

 if pechfile=1 then begin
                       assign(ft, fileout);
                       rewrite(ft);
                    end;

for p:=3 to 15 do itog[p]:=0;

for p:=1 to povtor do begin
rezult[p]:=0;
 for i:=1 to 3 do begin
var_pahan:=random(3)+1;
var_igrok:=random(3)+1;
var_igrok1:=var_igrok;
if (pechfile=1) and (var_igrok=var_pahan) then write(ft,'100');
if (ekr=1) and (var_igrok=var_pahan) then write('100');
if var_igrok=var_pahan then inc(rezult[p]);
if var_igrok<>var_pahan then begin
   if pax_komb=1 then begin  {smena kombi y paxana}
                   repeat
                    var_pahan:=random(3)+1;
                   until var_pahan<>var_igrok1;
                      end;
 repeat
  var_igrok:=random(3)+1;
 until var_igrok<>var_igrok1;
if (pechfile=1) and (var_igrok=var_pahan) then write(ft,'010');
if (ekr=1) and (var_igrok=var_pahan) then write('010');
if (pechfile=1) and (var_igrok<>var_pahan) then write(ft,'001');
if (ekr=1) and (var_igrok<>var_pahan) then write('001');
 if var_igrok=var_pahan then rezult[p]:=rezult[p]+1+i;
 if var_igrok<>var_pahan then rezult[p]:=rezult[p]+(2*i)+1;
                             end;  { of if var_igrok<>var_pahan }
                  end;    {of for i:=1 to 3 }
if ekr=1 then writeln;
if pechfile=1 then writeln(ft);
                      end; {of for p:=1 to povtor}

 for p:=1 to povtor do begin
 i:=rezult[p];
 itog[i]:=itog[i]+1;
                       end;
   for p:=3 to 15 do
                  begin
                   itog[p]:=(itog[p]/povtor)*100;
                   writeln('c ',p,' raz ',itog[p]:5:2,' % ');
                  end;

 if pechfile=1 then begin
                      for p:=3 to 15 do
                      write(ft,'c ',p,' raz ',itog[p]:5:2,' % ');
                     close(ft);
                    end;

 write(' enter: 1 - to start the program again, or 2 - to finish and out to DOS ');
 readln(ag);

until ag=2;

end.

 

для Excel (пахан меняет комбу всякий раз) 

заполнить ячейки с А2 по А5001 значениями с 1 по 5000


в ячейки  B2, D2, F2 ввести формулу  =СЛУЧМЕЖДУ(1;3)
в ячейки  C2, E2, G2 ввести формулу  =СЛУЧМЕЖДУ(1;2)
выделить ячейки B2, C2, D2, E2, F2, G2 и "тащить" вниз до строки 5001, заполняя значениями.

в ячейку H2 ввести формулу =ЕСЛИ(B2=R2;1;0)
в ячейку I2 ввести формулу =ЕСЛИ(H2=1;0;ЕСЛИ(C2=S2;1;0))
в ячейку J2 ввести формулу =ЕСЛИ(И(I2=0;H2=0);1;0)
в ячейку K2 ввести формулу =ЕСЛИ(D2=T2;1;0)
в ячейку L2 ввести формулу =ЕСЛИ(K2=1;0;ЕСЛИ(E2=U2;1;0))
в ячейку M2 ввести формулу =ЕСЛИ(И(L2=0;K2=0);1;0)
в ячейку N2 ввести формулу =ЕСЛИ(F2=V2;1;0)
в ячейку O2 ввести формулу =ЕСЛИ(N2=1;0;ЕСЛИ(G2=W2;1;0))
в ячейку P2 ввести формулу =ЕСЛИ(И(O2=0;N2=0);1;0)
выделить ячейки H2, I2, J2, K2, L2, M2, N2, O2 и P2 и "тащить" вниз до строки 5001, заполняя значениями

в ячейку R2 ввести формулу =СЛУЧМЕЖДУ(1;3)
в ячейку S2 ввести формулу =СЛУЧМЕЖДУ(1;2)
в ячейку T2 ввести формулу =СЛУЧМЕЖДУ(1;3)
в ячейку U2 ввести формулу =СЛУЧМЕЖДУ(1;2)
в ячейку V2 ввести формулу =СЛУЧМЕЖДУ(1;3)
в ячейку W2 ввести формулу =СЛУЧМЕЖДУ(1;2)
выделить ячейки R2, S2, T2, U2, V2 и W2 и "тащить" вниз до строки 5001, заполняя значениями

в ячейку Y2 ввести формулу =ЕСЛИ(H2=1;1;ЕСЛИ(I2=1;2;ЕСЛИ(J2=1;3;0)))
в ячейку Z2 ввести формулу =ЕСЛИ(K2=1;K2+Y2;ЕСЛИ(L2=1;Y2+3;ЕСЛИ(M2=1;Y2+5;0)))
в ячейку AA2 ввести формулу =ЕСЛИ(N2=1;N2+Z2;ЕСЛИ(O2=1;Z2+4;ЕСЛИ(P2=1;Z2+7;0)))
выделить ячейки Y2, Z2 и AA2 и "тащить" вниз до строки 5001, заполняя значениями

в ячейку AC3 ввести текст "количество ударов"
в ячейку AD3 ввести текст "шанс угадать комбу в %"

в ячейку AC4 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A4)
в ячейку AC5 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A5)
в ячейку AC6 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A6)
в ячейку AC7 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A7)
в ячейку AC8 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A8)
в ячейку AC9 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A9)
в ячейку AC10 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A10) 
в ячейку AC11 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A11) 
в ячейку AC12 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A12)
в ячейку AC13 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A13)
в ячейку AC14 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A14)
в ячейку AC15 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A15)
в ячейку AC16 ввести формулу =СЧЁТЕСЛИ(AA$2:AA$5001;A16)

в ячейку AD4 ввести формулу =(AC4/5000)*100
в ячейку AD5 ввести формулу =(AC5/5000)*100
в ячейку AD6 ввести формулу =(AC6/5000)*100
в ячейку AD7 ввести формулу =(AC7/5000)*100
в ячейку AD8 ввести формулу =(AC8/5000)*100
в ячейку AD9 ввести формулу =(AC9/5000)*100
в ячейку AD10 ввести формулу =(AC10/5000)*100 
в ячейку AD11 ввести формулу =(AC11/5000)*100 
в ячейку AD12 ввести формулу =(AC12/5000)*100
в ячейку AD13 ввести формулу =(AC13/5000)*100
в ячейку AD14 ввести формулу =(AC14/5000)*100
в ячейку AD15 ввести формулу =(AC15/5000)*100
в ячейку AD16 ввести формулу =(AC16/5000)*100

установить курсор в пустую ячейку (например АС2) и нажимать клавишу Delete. значения будут пересчитываться. за результатами можно наблюдать в ячейках АС AD

 

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

ячейки с А2 по А5001 заполнить последовательностью чисел от 1 до 5000
ячейка В2 =СЛУЧМЕЖДУ(1;3)
ячейка С2 =ЕСЛИ(B2=1;СЛУЧМЕЖДУ(2;3);ЕСЛИ(B2=3;СЛУЧМЕЖДУ(1;2);1))
ячейка D2 =ЕСЛИ(СУММ(B2:C2)=3;3;ЕСЛИ(СУММ(B2:C2)=4;2;1))
ячейка E2 =СЛУЧМЕЖДУ(1;3)
ячейка F2 =ЕСЛИ(E2=1;СЛУЧМЕЖДУ(2;3);ЕСЛИ(E2=3;СЛУЧМЕЖДУ(1;2);1))
ячейка G2 =ЕСЛИ(СУММ(E2:F2)=3;3;ЕСЛИ(СУММ(E2:F2)=4;2;1))
ячейка H2 =СЛУЧМЕЖДУ(1;3)
ячейка I2 =ЕСЛИ(H2=1;СЛУЧМЕЖДУ(2;3);ЕСЛИ(H2=3;СЛУЧМЕЖДУ(1;2);1))
ячейка J2 =ЕСЛИ(СУММ(H2:I2)=3;3;ЕСЛИ(СУММ(H2:I2)=4;2;1))
выделить ячейки B2, C2, D2, E2, F2, G2, H2, I2 и J2 и заполнить последовательностью вниз до строки 5001

ячейка K2 =ЕСЛИ(B2=$U2;1;0)
ячейка L2 =ЕСЛИ(C2=$U2;1;0)
ячейка M2 =ЕСЛИ(D2=$U2;1;0) 
ячейка N2 =ЕСЛИ(E2=$V2;1;0)
ячейка O2 =ЕСЛИ(F2=$V2;1;0)
ячейка P2 =ЕСЛИ(G2=$V2;1;0)
ячейка Q2 =ЕСЛИ(H2=$W2;1;0)
ячейка R2 =ЕСЛИ(I2=$W2;1;0) 
ячейка S2 =ЕСЛИ(J2=$W2;1;0)
выделить ячейки K2, L2, M2, N2, O2, P2, Q2, R2 и S2 и заполнить последовательностью вниз до строки 5001

ячейка U2 =СЛУЧМЕЖДУ(1;3)
ячейка V2 =СЛУЧМЕЖДУ(1;3)
ячейка W2 =СЛУЧМЕЖДУ(1;3)
выделить ячейки U2, V2 и W2 и заполнить последовательностью вниз до строки 5001

ячейка Y2 =ЕСЛИ(K2=1;1;ЕСЛИ(L2=1;2;ЕСЛИ(M2=1;3;0)))
ячейка Z2 =ЕСЛИ(N2=1;N2+Y2;ЕСЛИ(O2=1;Y2+3;ЕСЛИ(P2=1;Y2+5;0)))
ячейка AA2 =ЕСЛИ(Q2=1;Q2+Z2;ЕСЛИ(R2=1;Z2+4;ЕСЛИ(S2=1;Z2+7;0)))
выделить ячейки Y2, Z2 и AA2 и заполнить последовательностью вниз до строки 5001

ячейки с АС4 по АС 16 заполнить последовательностью чисел от 3 до 15 
ячейка AD4 =СЧЁТЕСЛИ(AA$2:AA$5001;A4 )
ячейка AE4 =(AD4/5000)*100
выделить ячейки AD4 и AE4 и заполнить последовательностью вниз до строки 16

Категория: Мои статьи | Добавил: kolanov-kola (30.08.2018)
Просмотров: 753 | Теги: мосвар пахан, Пахан | Рейтинг: 0.0/0
Всего комментариев: 0
avatar