in reply to Perl ARRAY() result

It seemed a little long, so I just tweaked it a tiny bit :)

#!/usr/bin/perl # https://perlmonks.org/?node_id=1228495 use strict; use warnings; my @results = Solve(869, [15, 43, 51, 56, 60, 67, 122, 152, 193, 204, 229, 271, 293, 301] ); print "@$_\n" for @results; sub Solve { my $want = shift() or return []; $want > 0 or return (); my ($first, @rest) = @{ shift() } or return (); map([$first, @$_], Solve($want - $first, \@rest)), Solve($want, \@re +st); }

Outputs:

15 43 51 56 60 122 229 293 15 43 51 56 204 229 271 15 43 51 67 193 229 271 15 43 51 122 152 193 293 15 56 60 67 122 152 193 204 15 56 60 122 152 193 271 15 56 204 293 301 15 67 193 293 301 43 51 56 67 122 229 301 43 51 56 67 152 229 271 43 51 60 193 229 293 43 122 204 229 271 56 60 67 122 271 293 56 67 152 293 301

Replies are listed 'Best First'.
Re^2: Perl ARRAY() result
by kschwab (Vicar) on Jan 14, 2019 at 13:37 UTC
    It does look more elegant and compact, but it's significantly slower:
    $ perl ./thescript
    Benchmark: timing 1000 iterations of orig, tybalt89...
         orig:  3 wallclock secs ( 2.48 u + 0.00 s =  2.48 CPU) @403.23/s (n=1000)
     tybalt89: 10 wallclock secs (10.22 u + 0.00 s = 10.22 CPU) @ 97.85/s (n=1000)