|
|
|
| Здравствуйте. Помогите пожалуйста решить одну задачку на любом языке программировании (желательно PHP): в целочисленном двумерном массиве найти наиболее длинную цепочку одинаковых подряд стоящих элементов (кроме нуля) по вертикали либо горизонтали либо по диагоналям ВСЕМ (основной и побочной). Вернуть длину этой цепочки и элемент её составляющей.
Пожалуйста, уже всю голову сломал. | |
|
|
|
|
|
|
|
для: pavluxa09
(29.06.2012 в 17:29)
| | Показывай, что надумал | |
|
|
|
|
|
|
|
для: Vitaleks
(29.06.2012 в 17:58)
| | Беру двумерный массив на PHP засовываю в строку при помощи функции json_encode, далее в этой строке ищу при помощи strpos комбинационную линию. Это для поиска по диагонали, а для поиска по вертикали я этот массив переворачиваю и так же само делаю.
Как сделать по диалогоналям есть вариант повернуть массив на 45 градусов и таким же способом, второй вопрос как его повернуть на 45 градусов?
Вот частичная реализация той задачи на практике (игра крестики-нолики) за исключением поиска совпадений в диагоналях которое не получается сделать.
function determineWinner( array & $aArray, $iDigitsCount ) {
$iResult = -1;
$iHeight = count( $aArray );
$iWidth = $iHeight > 0 ? count( $aArray[0] ) : 0;
if( $iWidth != $iHeight )
return -2;
else if( $iWidth < $iDigitsCount )
return -3;
/* Поиск победителя по горизонтали */
$sArray = json_encode( $aArray );
if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 1 ) ) ) !== false )
$iResult = 1;
else if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 2 ) ) ) !== false )
$iResult = 2;
/* Поиск победителя по вертикали */
$aTmpArray = array();
foreach( $aArray as $i => $js )
foreach( $js as $j => $value )
$aTmpArray[$j][$i] = $value;
$sArray = json_encode( $aTmpArray );
if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 1 ) ) ) !== false )
$iResult = 1;
else if( strpos( $sArray, implode( ',', array_fill( 0, $iDigitsCount, 2 ) ) ) !== false )
$iResult = 2;
return $iResult;
}
|
| |
|
|
|