dankogai #4518(2007/11/30 12:44 GMT) [ Perl ] Rating1/3=0.33
grep()の使い方に注目。Memoizeとの合わせ技で10秒ちょっと。ちなみにozdさんの#4498が同じ環境(MacBook Pro 2.33GHz; Mac OS X v10.4.11)で22秒。
Dan the Perl Monger
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
#!/usr/local/bin/perl use strict; use warnings; use Memoize; sub young { my $n = shift; die 'young($n); # where $n is an integer' unless $n; return [1] if $n == 1; my @result = ( [$n] ); for my $k ( reverse 1 .. $n - 1 ) { push @result, map { [ $k, @$_ ] } grep { $k >= $_->[0] } young( $n - $k ); } @result; } memoize 'young'; sub print_young{ my $n = shift; local $\ = "\n"; for my $a (young($n)){ print '#' x $_ for @$a; print "=" x $n; } } my ($n, $quiet) = @ARGV; $quiet ? young($n) : print_young($n); __END__ % perl young.pl 5 ##### ===== #### # ===== ### ## ===== ### # # ===== ## ## # ===== ## # # # ===== # # # # # ===== % time perl young.pl 50 1 9.390u 0.783s 0:10.29 98.8% 0+0k 0+1io 0pf+0w % time sh -c 'perl young.pl 50 | grep = | wc' 204226 204226 10415526 10.903u 0.894s 0:11.82 99.7% 0+0k 0+3io 0pf+0w
Rating1/3=0.33-0+
[ reply ]
dankogai
#4518()
[
Perl
]
Rating1/3=0.33
grep()の使い方に注目。Memoizeとの合わせ技で10秒ちょっと。ちなみにozdさんの#4498が同じ環境(MacBook Pro 2.33GHz; Mac OS X v10.4.11)で22秒。
Dan the Perl Monger
Rating1/3=0.33-0+
[ reply ]