http://www.zaachi.com/cs/items/logicke-cviceni.html

Logické cvičení

Publikováno: 25.06.2008 14:05:29

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
…