Logické cvičení
Logický příklad na doplnění posloupnosti.
Dnes mi přišel na email zajímavý příklad:
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
.... 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:
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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 '<br />'; } } 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:
Objective-C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
1 11 21 1211 111221 312211 13112221 1113213211 31131211131221 13211311123113112211 11131221133112132113212221 3113112221232112111312211312113211 1321132132111213122112311311222113111221131221 11131221131211131231121113112221121321132132211331222113112211 … |
Posted on 25 June 2008
Zajímalo by mě jestli to jde vubec vyresit?
No vsak tam mas hotovy program, ktery to resi.
ok
muzete mi nekdo prozradit princip te hadanky?
muzete mi nekdo prozradit princip te hadanky?
Na to musis prijit sam => Logicke cviceni.
a s čím to alespon souvisí?
Tak tenhle humus znam se stredni skoly, takze vyreseno za par sekund (stacilo si jen vzpomenout). Popravde, nepredpokladal jsem, ze na to jeste nekdy natrefim 🙂
Tady prikladam reseni v Jave :-]
String strNum = "1";
String testing;
String testing_next;
String result;
int count;
System.out.println(strNum);
for (int i = 0; i < 5; i++) {
result = "";
count = 1;
testing = strNum.substring(0, 1);
for (int j = 1; j < strNum.length(); j++) {
testing_next = strNum.substring(j, j + 1);
if (testing.equals(testing_next)) {
count++;
} else {
result += count + testing;
testing = new String(testing_next);
count = 1;
}
}
if (count > 1) {
result += count + testing;
} else {
result += String.valueOf(1) + testing;
}
strNum = new String(result);
System.out.println(strNum);
}