fork download
  1. <?php
  2.  
  3. $total = 7;
  4. $skip = 4;
  5.  
  6. //создаем массив для хранения участников
  7. $humans = array();
  8.  
  9. //заполняем массив участниками жеребьевки
  10. for ($i = 0; $i < $total; $i++) {
  11. $humans[$i] = $i + 1;
  12. }
  13.  
  14. function oneDraw($humans, $skip) {
  15. //находим сколько участников не вошло в жеребьевку,
  16. //с этой части будет начинаться новый тур жеребьевки
  17. $humansEnd = count($humans) % $skip;
  18.  
  19. echo "======================== \n";
  20. echo "на входе: \n";
  21. var_dump($humans);
  22.  
  23. //удаляем проигравших
  24. $length = count($humans);
  25. for ($i = 0, $j = 0; $i < $length; $i++) {
  26. $j++;
  27. if ($j == $skip) {
  28. unset($humans[$i]);
  29. $j = 0;
  30. }
  31. }
  32.  
  33. echo "после удаления: \n";
  34. var_dump($humans);
  35.  
  36. //переносим людей в начало массива, жеребьевка будем начинать с них;
  37. while ($humansEnd > 0) {
  38. array_unshift($humans, array_pop($humans));
  39. $humansEnd--;
  40. }
  41.  
  42. echo "на выходе: \n";
  43. var_dump($humans);
  44. echo "======================== \n";
  45. echo "\n";
  46. return array_values($humans);
  47. }
  48.  
  49. function multiDrow($oneDrow, $skip) {
  50. $countDrow = count($oneDrow);
  51. if ($countDrow < $skip) {
  52. return $oneDrow;
  53. } else {
  54. return multiDrow(oneDraw($oneDrow, $skip), $skip);
  55. }
  56. }
  57.  
  58. $result = multiDrow(oneDraw($humans, $skip), $skip);
  59.  
  60. echo "Выигрышные места: ";
  61.  
  62. foreach ($result as $value) {
  63. echo "{$value} ";
  64. }
  65.  
  66. //$draw1 = oneDraw($humans, $skip);
  67. //$draw2 = oneDraw($draw1, $skip);
  68. //$draw3 = oneDraw($draw2, $skip);
  69. //$draw4 = oneDraw($draw3, $skip);
  70. //
  71. //foreach ($draw1 as $human) {
  72. // echo "{$human} ";
  73. //}
  74. //
  75. //echo "\n";
  76. //
  77. //foreach ($draw2 as $human1) {
  78. // echo "{$human1} ";
  79. //}
  80. //
  81. //echo "\n";
  82. //
  83. //foreach ($draw3 as $human2) {
  84. // echo "{$human2} ";
  85. //}
  86. //
  87. //echo "\n";
  88. //
  89. //foreach ($draw4 as $human2) {
  90. // echo "{$human2} ";
  91. //}
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
======================== 
на входе: 
array(7) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
}
после удаления: 
array(6) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [4]=>
  int(5)
  [5]=>
  int(6)
  [6]=>
  int(7)
}
на выходе: 
array(6) {
  [0]=>
  int(5)
  [1]=>
  int(6)
  [2]=>
  int(7)
  [3]=>
  int(1)
  [4]=>
  int(2)
  [5]=>
  int(3)
}
======================== 

======================== 
на входе: 
array(6) {
  [0]=>
  int(5)
  [1]=>
  int(6)
  [2]=>
  int(7)
  [3]=>
  int(1)
  [4]=>
  int(2)
  [5]=>
  int(3)
}
после удаления: 
array(5) {
  [0]=>
  int(5)
  [1]=>
  int(6)
  [2]=>
  int(7)
  [4]=>
  int(2)
  [5]=>
  int(3)
}
на выходе: 
array(5) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(5)
  [3]=>
  int(6)
  [4]=>
  int(7)
}
======================== 

======================== 
на входе: 
array(5) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(5)
  [3]=>
  int(6)
  [4]=>
  int(7)
}
после удаления: 
array(4) {
  [0]=>
  int(2)
  [1]=>
  int(3)
  [2]=>
  int(5)
  [4]=>
  int(7)
}
на выходе: 
array(4) {
  [0]=>
  int(7)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(5)
}
======================== 

======================== 
на входе: 
array(4) {
  [0]=>
  int(7)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(5)
}
после удаления: 
array(3) {
  [0]=>
  int(7)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
на выходе: 
array(3) {
  [0]=>
  int(7)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
======================== 

Выигрышные места: 7 2 3