use strict; use warnings; use Data::Dumper; sub partition{ my ($target, $treasures) = @_; return [] if $target == 0; #anon. array ref return () if $target < 0 || @$treasures <= 0; # empty list # ここはPerlの作法に詳しくないと謎。 # 一般的に、エラーケースではempty listを返すのが普通。 # 空リストを明示的に書かずに、単独のreturnでよいかもしれない # (呼び出し元がリストコンテキストなら空リストになるから) my ($first, @rest) = @$treasures; my @solutions = partition($target - $first, \@rest); return ((map {[$first, @$_]} @solutions), partition($target, \@rest)); # この文も実は難しい。mapの結果は、@solutionsがarray refならリスト、 # empty listなら空リストになる性質がある。 } print Dumper(partition(5, [1,2,3,4]));
2010年6月28日月曜日
[HOP] partition problemのコード
単独のreturnが参考になった。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿