SimpleBoxes

今日の進捗 2009.04.14

問題
与えられた配列の 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";
}

スポンサーリンク

<< リノベーションは楽じゃない 総集編 - 廊下 :: Serene Bach テンプレートの互換性問題 >>