fork download
  1. <?php
  2. function showResult($input) {
  3. print json_encode($input, JSON_UNESCAPED_UNICODE);
  4. exit();
  5. }
  6. function generateField($config) {
  7. $output = array();
  8. for ($i = 0; $i < $config['maxRow'] * $config['maxColumn']; $i++) {
  9. $output[] = $config['colors'][rand(0, count($config['colors']) - 1)];
  10. }
  11. return $output;
  12. }
  13. function saveFieldFile($path, $field) {
  14. file_put_contents($path, json_encode($field));
  15. }
  16. function loadFieldFile($path) {
  17. $output = json_decode(file_get_contents($path), true);
  18. return $output;
  19. }
  20. function cellHandler($raw, $config) {
  21. $cell = explode('-', $raw);
  22. $output = array(
  23. 'row' => (int) substr($cell[0], 1),
  24. 'column' => (int) substr($cell[1], 1)
  25. );
  26. $error = array(
  27. 'status' => 'error'
  28. );
  29.  
  30. if ($output['row'] < 1) {
  31. $error['text'] = 'Значение ряда меньше единицы';
  32. return $error;
  33. }
  34. if ($output['row'] > $config['maxRow']) {
  35. $error['text'] = 'Значение ряда больше допустимого';
  36. return $error;
  37. }
  38. if ($output['column'] < 1) {
  39. $error['text'] = 'Значение колонки меньше единицы';
  40. return $error;
  41. }
  42. if ($output['column'] > $config['maxColumn']) {
  43. $error['text'] = 'Значение колонки больше допустимого';
  44. return $error;
  45. }
  46.  
  47. return $output;
  48. }
  49.  
  50.  
  51. $config = array(
  52. 'maxRow' => 8,
  53. 'maxColumn' => 8,
  54. 'colors' => array(
  55. 0 => 'red',
  56. 1 => 'orange',
  57. 2 => 'blue',
  58. 3 => 'yellow',
  59. 4 => 'green',
  60. 5 => 'white',
  61. 6 => 'pink',
  62. 7 => 'purple'
  63. ),
  64. 'path' => 'sessions/'.session_id()
  65. );
  66. $output = array(
  67. 'status' => 'ok'
  68. );
  69. $error = array(
  70. 'status' => 'error'
  71. );
  72.  
  73. switch ($_POST['f']) {
  74. case 'cellMovement':
  75. $cells = $_POST['cells'];
  76. if (!is_array($cells)) {
  77. $error['text'] = 'Параметры клеток должны являться массивом';
  78. showResult($error);
  79. }
  80. if (count($cells) > 2) {
  81. $error['text'] = 'Передано слишком большое количество клеток';
  82. showResult($error);
  83. }
  84. foreach ($cells as $i) {
  85. $cell = cellHandler($i, $config);
  86. if (isset($cell['status']) && $cell['status'] == 'ok') {
  87. showResult($cell);
  88. }
  89. $output['cells'][] = $cell;
  90. }
  91.  
  92. if (abs($output['cells'][0]['row'] - $output['cells'][1]['row']) > 1 ||
  93. abs($output['cells'][0]['column'] - $output['cells'][1]['column']) > 1 ||
  94. abs($output['cells'][0]['row'] - $output['cells'][1]['row']) - abs($output['cells'][0]['column'] - $output['cells'][1]['column']) == 0) {
  95. $error['text'] = 'Движение разрешено только между соседними клетками';
  96. showResult($error);
  97. }
  98.  
  99. $cellsIndexes = array(
  100. 0 => ($output['cells'][0]['row'] - 1) * $config['maxColumn'] + $output['cells'][0]['column'] - 1,
  101. 1 => ($output['cells'][1]['row'] - 1) * $config['maxColumn'] + $output['cells'][1]['column'] - 1
  102. );
  103. $field = loadFieldFile($config['path']);
  104. $tempCell = $field[$cellsIndexes[0]];
  105. $field[$cellsIndexes[0]] = $field[$cellsIndexes[1]];
  106. $field[$cellsIndexes[1]] = $tempCell;
  107. unset($tempCell);
  108. saveFieldFile($config['path'], $field);
  109.  
  110. showResult($output);
  111. break;
  112.  
  113. case 'getField':
  114. if (!file_exists($config['path'])) {
  115. $output['field'] = generateField($config);
  116. saveFieldFile($config['path'], $output['field']);
  117. } else {
  118. $output['field'] = loadFieldFile($config['path']);
  119. }
  120.  
  121. showResult($output);
  122. break;
  123. }
  124.  
  125. ?>
  126.  
Success #stdin #stdout #stderr 0s 52488KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
PHP Warning:  session_start(): open(/var/lib/php5/sessions/sess_8i1irlic5mkn3p73ajc1r32m36, O_RDWR) failed: No such file or directory (2) in /home/lTKxSD/prog.php on line 50
PHP Notice:  Undefined index: f in /home/lTKxSD/prog.php on line 74
PHP Warning:  Unknown: open(/var/lib/php5/sessions/sess_8i1irlic5mkn3p73ajc1r32m36, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5/sessions) in Unknown on line 0