今日の進捗 2009.04.14
- 2009.04.14 Tuesday
- dev
- 問題
- 与えられた配列の n 番目の要素 (先頭の要素は 0 番目とする) に対して、同じ値を持つ要素が、配列のその要素の前にいくつあるかを返す関数を作成して下さい。
例えば、以下のような配列
A,B,B,B,C,D,E,F,G,G,G,G,H,I,J,J,J,J,J,J,J,J,J,J,K,L
があった場合、
- n = 0 の時は 0 (値が A である要素はひとつしかない)
- n = 1 の時は 0 (値が B である最初の要素)
- n = 2 の時は 1 (値が B である二番目の要素なので 1 を返す)
- n = 3 の時は 2 (値が B である三番目の要素なので 2 を返す)
- n = 4 の時は 0 (値が C である要素はひとつしかない)
- ……以下、続く
のようになります。
とりあえずの解答 (perl のコード) は「続き」に。
sub answer { my $n = shift; my $array = shift; my $target = $array->[$n]; return scalar( grep { /^$target$/ } @{$array}[0 .. ($n - 1)] ); } my @array = (A,B,B,B,C,D,E,F,G,G,G,G,H,I,J,J,J,J,J,J,J,J,J,J,K,L); for my $i ( 0 .. 4 ) { print $i,' => ',&answer($i,\@array),"\n"; }
スポンサーリンク