Logický příklad na doplnění posloupnosti.
Dnes mi přišel na email zajímavý příklad:
.... doplnte dalsi radnek (abych pomohl, tak misto cisel tam udelam +... tim alspon budete vedet kolik tam toho ma byt ,-) 1 11 21 1211 111221 312211 13112221 1113213211 31131211131221 ++++++++++++++++++++
Rozluštění mi trvalo asi půl minuty, napsání jednoduchého algoritmu pro řešení asi dvě minuty. Takže si můžete vyzkoušet své logické myšlení.
Princip je velmi jednoduchý, zdrojový kód není záměrně okomentován:
class run_length_encoding{
const start = 1;
public function __construct(){
$start_value = self::start;
for( $i = 0; $i
< 30; $i++ ){
print $start_value = self::_return_num_of_numbers( $start_value );
print '
';
}
}
public function _return_num_of_numbers( $line ){
$number = NULL;
$num = 0;
for( $i = 0; $i
< strlen( $line ); $i++ ){
if( $number == NULL ){
$number = $line[ $i ];
$num = 1;
continue;
}
else if( $line[$i] == $number ){
++$num;
continue;
}
else if( $line[ $i ] != $number ){
$return_string .= strval( $num ) . strval( $number );
$num = 1;
$number = $line[$i];
continue;
}
}
$return_string .= strval( $num ) . strval( $number );
return $return_string;
}
}
$rle = new run_length_encoding();
Výstup:
1 11 21 1211 111221 312211 13112221 1113213211 31131211131221 13211311123113112211 11131221133112132113212221 3113112221232112111312211312113211 1321132132111213122112311311222113111221131221 11131221131211131231121113112221121321132132211331222113112211 …