<?php
function showResult( $input ) {
}
function generateField( $config ) {
for ( $i = 0 ; $i < $config [ 'maxRow' ] * $config [ 'maxColumn' ] ; $i ++ ) {
$output [ ] = $config [ 'colors' ] [ rand ( 0 , count ( $config [ 'colors' ] ) - 1 ) ] ; }
return $output ;
}
function saveFieldFile( $path , $field ) {
}
function loadFieldFile( $path ) {
return $output ;
}
function cellHandler( $raw , $config ) {
'row' => ( int
) substr ( $cell [ 0 ] , 1 ) , 'column' => ( int
) substr ( $cell [ 1 ] , 1 ) ) ;
'status' => 'error'
) ;
if ( $output [ 'row' ] < 1 ) {
$error [ 'text' ] = 'Значение ряда меньше единицы' ;
return $error ;
}
if ( $output [ 'row' ] > $config [ 'maxRow' ] ) {
$error [ 'text' ] = 'Значение ряда больше допустимого' ;
return $error ;
}
if ( $output [ 'column' ] < 1 ) {
$error [ 'text' ] = 'Значение колонки меньше единицы' ;
return $error ;
}
if ( $output [ 'column' ] > $config [ 'maxColumn' ] ) {
$error [ 'text' ] = 'Значение колонки больше допустимого' ;
return $error ;
}
return $output ;
}
'maxRow' => 8 ,
'maxColumn' => 8 ,
0 => 'red' ,
1 => 'orange' ,
2 => 'blue' ,
3 => 'yellow' ,
4 => 'green' ,
5 => 'white' ,
6 => 'pink' ,
7 => 'purple'
) ,
) ;
'status' => 'ok'
) ;
'status' => 'error'
) ;
switch ( $_POST [ 'f' ] ) {
case 'cellMovement' :
$cells = $_POST [ 'cells' ] ;
$error [ 'text' ] = 'Параметры клеток должны являться массивом' ;
showResult( $error ) ;
}
$error [ 'text' ] = 'Передано слишком большое количество клеток' ;
showResult( $error ) ;
}
foreach ( $cells as $i ) {
$cell = cellHandler( $i , $config ) ;
if ( isset ( $cell [ 'status' ] ) && $cell [ 'status' ] == 'ok' ) { showResult( $cell ) ;
}
$output [ 'cells' ] [ ] = $cell ;
}
if ( abs ( $output [ 'cells' ] [ 0 ] [ 'row' ] - $output [ 'cells' ] [ 1 ] [ 'row' ] ) > 1 || abs ( $output [ 'cells' ] [ 0 ] [ 'column' ] - $output [ 'cells' ] [ 1 ] [ 'column' ] ) > 1 || abs ( $output [ 'cells' ] [ 0 ] [ 'row' ] - $output [ 'cells' ] [ 1 ] [ 'row' ] ) - abs ( $output [ 'cells' ] [ 0 ] [ 'column' ] - $output [ 'cells' ] [ 1 ] [ 'column' ] ) == 0 ) { $error [ 'text' ] = 'Движение разрешено только между соседними клетками' ;
showResult( $error ) ;
}
0 => ( $output [ 'cells' ] [ 0 ] [ 'row' ] - 1 ) * $config [ 'maxColumn' ] + $output [ 'cells' ] [ 0 ] [ 'column' ] - 1 ,
1 => ( $output [ 'cells' ] [ 1 ] [ 'row' ] - 1 ) * $config [ 'maxColumn' ] + $output [ 'cells' ] [ 1 ] [ 'column' ] - 1
) ;
$field = loadFieldFile( $config [ 'path' ] ) ;
$tempCell = $field [ $cellsIndexes [ 0 ] ] ;
$field [ $cellsIndexes [ 0 ] ] = $field [ $cellsIndexes [ 1 ] ] ;
$field [ $cellsIndexes [ 1 ] ] = $tempCell ;
saveFieldFile( $config [ 'path' ] , $field ) ;
showResult( $output ) ;
break ;
case 'getField' :
$output [ 'field' ] = generateField( $config ) ;
saveFieldFile( $config [ 'path' ] , $output [ 'field' ] ) ;
} else {
$output [ 'field' ] = loadFieldFile( $config [ 'path' ] ) ;
}
showResult( $output ) ;
break ;
}
?>
PD9waHAKZnVuY3Rpb24gc2hvd1Jlc3VsdCgkaW5wdXQpIHsKICAgIHByaW50IGpzb25fZW5jb2RlKCRpbnB1dCwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiAgICBleGl0KCk7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVGaWVsZCgkY29uZmlnKSB7CiAgICAkb3V0cHV0ID0gYXJyYXkoKTsKICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb25maWdbJ21heFJvdyddICogJGNvbmZpZ1snbWF4Q29sdW1uJ107ICRpKyspIHsKICAgICAgICAkb3V0cHV0W10gPSAkY29uZmlnWydjb2xvcnMnXVtyYW5kKDAsIGNvdW50KCRjb25maWdbJ2NvbG9ycyddKSAtIDEpXTsKICAgIH0KICAgIHJldHVybiAkb3V0cHV0Owp9CmZ1bmN0aW9uIHNhdmVGaWVsZEZpbGUoJHBhdGgsICRmaWVsZCkgewogICAgZmlsZV9wdXRfY29udGVudHMoJHBhdGgsIGpzb25fZW5jb2RlKCRmaWVsZCkpOwp9CmZ1bmN0aW9uIGxvYWRGaWVsZEZpbGUoJHBhdGgpIHsKICAgICRvdXRwdXQgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygkcGF0aCksIHRydWUpOwogICAgcmV0dXJuICRvdXRwdXQ7Cn0KZnVuY3Rpb24gY2VsbEhhbmRsZXIoJHJhdywgJGNvbmZpZykgewogICAgJGNlbGwgPSBleHBsb2RlKCctJywgJHJhdyk7CiAgICAkb3V0cHV0ID0gYXJyYXkoCiAgICAgICAgJ3JvdycgPT4gKGludCkgc3Vic3RyKCRjZWxsWzBdLCAxKSwKICAgICAgICAnY29sdW1uJyA9PiAoaW50KSBzdWJzdHIoJGNlbGxbMV0sIDEpCiAgICApOwogICAgJGVycm9yID0gYXJyYXkoCiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJwogICAgKTsKCiAgICBpZiAoJG91dHB1dFsncm93J10gPCAxKSB7CiAgICAgICAgJGVycm9yWyd0ZXh0J10gPSAn0JfQvdCw0YfQtdC90LjQtSDRgNGP0LTQsCDQvNC10L3RjNGI0LUg0LXQtNC40L3QuNGG0YsnOwogICAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9CiAgICBpZiAoJG91dHB1dFsncm93J10gPiAkY29uZmlnWydtYXhSb3cnXSkgewogICAgICAgICRlcnJvclsndGV4dCddID0gJ9CX0L3QsNGH0LXQvdC40LUg0YDRj9C00LAg0LHQvtC70YzRiNC1INC00L7Qv9GD0YHRgtC40LzQvtCz0L4nOwogICAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9CiAgICBpZiAoJG91dHB1dFsnY29sdW1uJ10gPCAxKSB7CiAgICAgICAgJGVycm9yWyd0ZXh0J10gPSAn0JfQvdCw0YfQtdC90LjQtSDQutC+0LvQvtC90LrQuCDQvNC10L3RjNGI0LUg0LXQtNC40L3QuNGG0YsnOwogICAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9CiAgICBpZiAoJG91dHB1dFsnY29sdW1uJ10gPiAkY29uZmlnWydtYXhDb2x1bW4nXSkgewogICAgICAgICRlcnJvclsndGV4dCddID0gJ9CX0L3QsNGH0LXQvdC40LUg0LrQvtC70L7QvdC60Lgg0LHQvtC70YzRiNC1INC00L7Qv9GD0YHRgtC40LzQvtCz0L4nOwogICAgICAgIHJldHVybiAkZXJyb3I7CiAgICB9CgogICAgcmV0dXJuICRvdXRwdXQ7Cn0KCnNlc3Npb25fc3RhcnQoKTsKCiRjb25maWcgPSBhcnJheSgKICAgICdtYXhSb3cnID0+IDgsCiAgICAnbWF4Q29sdW1uJyA9PiA4LAogICAgJ2NvbG9ycycgPT4gYXJyYXkoCiAgICAgICAgMCA9PiAncmVkJywKICAgICAgICAxID0+ICdvcmFuZ2UnLAogICAgICAgIDIgPT4gJ2JsdWUnLAogICAgICAgIDMgPT4gJ3llbGxvdycsCiAgICAgICAgNCA9PiAnZ3JlZW4nLAogICAgICAgIDUgPT4gJ3doaXRlJywKICAgICAgICA2ID0+ICdwaW5rJywKICAgICAgICA3ID0+ICdwdXJwbGUnCiAgICApLAogICAgJ3BhdGgnID0+ICdzZXNzaW9ucy8nLnNlc3Npb25faWQoKQopOwokb3V0cHV0ID0gYXJyYXkoCiAgICAnc3RhdHVzJyA9PiAnb2snCik7CiRlcnJvciA9IGFycmF5KAogICAgJ3N0YXR1cycgPT4gJ2Vycm9yJwopOwoKc3dpdGNoICgkX1BPU1RbJ2YnXSkgewogICAgY2FzZSAnY2VsbE1vdmVtZW50JzoKICAgICAgICAkY2VsbHMgPSAkX1BPU1RbJ2NlbGxzJ107CiAgICAgICAgaWYgKCFpc19hcnJheSgkY2VsbHMpKSB7CiAgICAgICAgICAgICRlcnJvclsndGV4dCddID0gJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQutC70LXRgtC+0Log0LTQvtC70LbQvdGLINGP0LLQu9GP0YLRjNGB0Y8g0LzQsNGB0YHQuNCy0L7QvCc7CiAgICAgICAgICAgIHNob3dSZXN1bHQoJGVycm9yKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvdW50KCRjZWxscykgPiAyKSB7CiAgICAgICAgICAgICRlcnJvclsndGV4dCddID0gJ9Cf0LXRgNC10LTQsNC90L4g0YHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LrQu9C10YLQvtC6JzsKICAgICAgICAgICAgc2hvd1Jlc3VsdCgkZXJyb3IpOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkY2VsbHMgYXMgJGkpIHsKICAgICAgICAgICAgJGNlbGwgPSBjZWxsSGFuZGxlcigkaSwgJGNvbmZpZyk7CiAgICAgICAgICAgIGlmIChpc3NldCgkY2VsbFsnc3RhdHVzJ10pICYmICRjZWxsWydzdGF0dXMnXSA9PSAnb2snKSB7CiAgICAgICAgICAgICAgICBzaG93UmVzdWx0KCRjZWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb3V0cHV0WydjZWxscyddW10gPSAkY2VsbDsKICAgICAgICB9CgogICAgICAgIGlmIChhYnMoJG91dHB1dFsnY2VsbHMnXVswXVsncm93J10gLSAkb3V0cHV0WydjZWxscyddWzFdWydyb3cnXSkgPiAxIHx8CiAgICAgICAgICAgIGFicygkb3V0cHV0WydjZWxscyddWzBdWydjb2x1bW4nXSAtICRvdXRwdXRbJ2NlbGxzJ11bMV1bJ2NvbHVtbiddKSA+IDEgfHwKICAgICAgICAgICAgYWJzKCRvdXRwdXRbJ2NlbGxzJ11bMF1bJ3JvdyddIC0gJG91dHB1dFsnY2VsbHMnXVsxXVsncm93J10pIC0gYWJzKCRvdXRwdXRbJ2NlbGxzJ11bMF1bJ2NvbHVtbiddIC0gJG91dHB1dFsnY2VsbHMnXVsxXVsnY29sdW1uJ10pID09IDApIHsKICAgICAgICAgICAgJGVycm9yWyd0ZXh0J10gPSAn0JTQstC40LbQtdC90LjQtSDRgNCw0LfRgNC10YjQtdC90L4g0YLQvtC70YzQutC+INC80LXQttC00YMg0YHQvtGB0LXQtNC90LjQvNC4INC60LvQtdGC0LrQsNC80LgnOwogICAgICAgICAgICBzaG93UmVzdWx0KCRlcnJvcik7CiAgICAgICAgfQoKICAgICAgICAkY2VsbHNJbmRleGVzID0gYXJyYXkoCiAgICAgICAgICAgIDAgPT4gKCRvdXRwdXRbJ2NlbGxzJ11bMF1bJ3JvdyddIC0gMSkgKiAkY29uZmlnWydtYXhDb2x1bW4nXSArICRvdXRwdXRbJ2NlbGxzJ11bMF1bJ2NvbHVtbiddIC0gMSwKICAgICAgICAgICAgMSA9PiAoJG91dHB1dFsnY2VsbHMnXVsxXVsncm93J10gLSAxKSAqICRjb25maWdbJ21heENvbHVtbiddICsgJG91dHB1dFsnY2VsbHMnXVsxXVsnY29sdW1uJ10gLSAxCiAgICAgICAgKTsKICAgICAgICAkZmllbGQgPSBsb2FkRmllbGRGaWxlKCRjb25maWdbJ3BhdGgnXSk7CiAgICAgICAgJHRlbXBDZWxsID0gJGZpZWxkWyRjZWxsc0luZGV4ZXNbMF1dOwogICAgICAgICRmaWVsZFskY2VsbHNJbmRleGVzWzBdXSA9ICRmaWVsZFskY2VsbHNJbmRleGVzWzFdXTsKICAgICAgICAkZmllbGRbJGNlbGxzSW5kZXhlc1sxXV0gPSAkdGVtcENlbGw7CiAgICAgICAgdW5zZXQoJHRlbXBDZWxsKTsKICAgICAgICBzYXZlRmllbGRGaWxlKCRjb25maWdbJ3BhdGgnXSwgJGZpZWxkKTsKCiAgICAgICAgc2hvd1Jlc3VsdCgkb3V0cHV0KTsKICAgIGJyZWFrOwoKICAgIGNhc2UgJ2dldEZpZWxkJzoKICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRjb25maWdbJ3BhdGgnXSkpIHsKICAgICAgICAgICAgJG91dHB1dFsnZmllbGQnXSA9IGdlbmVyYXRlRmllbGQoJGNvbmZpZyk7CiAgICAgICAgICAgIHNhdmVGaWVsZEZpbGUoJGNvbmZpZ1sncGF0aCddLCAkb3V0cHV0WydmaWVsZCddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkb3V0cHV0WydmaWVsZCddID0gbG9hZEZpZWxkRmlsZSgkY29uZmlnWydwYXRoJ10pOwogICAgICAgIH0KCiAgICAgICAgc2hvd1Jlc3VsdCgkb3V0cHV0KTsKICAgIGJyZWFrOwp9Cgo/Pgo=