#! perl -slw use strict; sub genComb{ grep @$_, map{ my $ptn=$_; [ @_[ grep{ "${_}E0" if $ptn & (1<<$_) }0 .. $#_ ] ] } 0 .. 2**@_; } sub sum{ my $sum; $sum += $_ for @_; $sum } my %roster = map{ ("$_->[0]($_->[1])" => $_->[2]) } map{ chomp; [ split':' ] } ; my @possibles; unshift(@$_, sum @roster{@$_}) , push(@possibles, $_) for genComb keys %roster; printf '%3d will get you' . (' %s') x keys(%roster) . $/, @$_ for sort {$b->[0] <=> $a->[0]} @possibles; # To filter the list to that set costing less than $limit # substitute the following line for the line above # for grep{ $_ < $limit } sort {$b->[0] <=> $a->[0]} @possibles; __DATA__ blastaar:v:138 mr fixit:u:104 daredevil:r:30 blob:v:51 boomerang:e:34 wolverine:e:61 skrull commando:v:18 #### #! perl -slw use strict; sub genComb{ # Generate all the combos of the input list grep @$_, map{ my $ptn=$_; [ @_[ grep{ "${_}E0" if $ptn & (1<<$_) }0 .. $#_ ] ] } 0 .. 2**@_; } sub sum{ my $sum; $sum += $_ for @_; $sum } # Sum an array # Build the roster from the my %roster = map{ ("$_->[0]($_->[1])" => $_->[2]) } map{ chomp; [ split':' ] } ; my @possibles; unshift(@$_, sum @roster{@$_}) # Add the total cost to the front of the array , push(@possibles, $_) # and save it for genComb keys %roster; # for all possible combinations # Print the combos out reverse sorted by cost. printf '%3d will get you' . (' %s') x keys(%roster) . $/, @$_ for sort {$b->[0] <=> $a->[0]} @possibles; __DATA__ blastaar:v:138 mr fixit:u:104 daredevil:r:30 blob:v:51 boomerang:e:34 wolverine:e:61 skrull commando:v:18 #### C:\test>238771 436 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 418 will get you daredevil(r) blob(v) mr fixit(u) blastaar(v) wolverine(e) boomerang(e) 406 will get you blob(v) mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 402 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) 388 will get you blob(v) mr fixit(u) blastaar(v) wolverine(e) boomerang(e) 385 will get you daredevil(r) mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 384 will get you daredevil(r) blob(v) mr fixit(u) blastaar(v) wolverine(e) 375 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) blastaar(v) boomerang(e) 372 will get you blob(v) mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) 367 will get you daredevil(r) mr fixit(u) blastaar(v) wolverine(e) boomerang(e) 357 will get you daredevil(r) blob(v) mr fixit(u) blastaar(v) boomerang(e) 355 will get you mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 354 will get you blob(v) mr fixit(u) blastaar(v) wolverine(e) 351 will get you daredevil(r) mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) 345 will get you blob(v) mr fixit(u) skrull commando(v) blastaar(v) boomerang(e) 341 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) blastaar(v) 337 will get you mr fixit(u) blastaar(v) wolverine(e) boomerang(e) 333 will get you daredevil(r) mr fixit(u) blastaar(v) wolverine(e) 332 will get you daredevil(r) blob(v) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 327 will get you blob(v) mr fixit(u) blastaar(v) boomerang(e) 324 will get you daredevil(r) mr fixit(u) skrull commando(v) blastaar(v) boomerang(e) 323 will get you daredevil(r) blob(v) mr fixit(u) blastaar(v) 321 will get you mr fixit(u) skrull commando(v) blastaar(v) wolverine(e) 314 will get you daredevil(r) blob(v) blastaar(v) wolverine(e) boomerang(e) 311 will get you blob(v) mr fixit(u) skrull commando(v) blastaar(v) 306 will get you daredevil(r) mr fixit(u) blastaar(v) boomerang(e) 303 will get you mr fixit(u) blastaar(v) wolverine(e) 302 will get you blob(v) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 298 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) wolverine(e) boomerang(e) 298 will get you daredevil(r) blob(v) skrull commando(v) blastaar(v) wolverine(e) 294 will get you mr fixit(u) skrull commando(v) blastaar(v) boomerang(e) 293 will get you blob(v) mr fixit(u) blastaar(v) 290 will get you daredevil(r) mr fixit(u) skrull commando(v) blastaar(v) 284 will get you blob(v) blastaar(v) wolverine(e) boomerang(e) 281 will get you daredevil(r) skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 280 will get you daredevil(r) blob(v) blastaar(v) wolverine(e) 280 will get you daredevil(r) blob(v) mr fixit(u) wolverine(e) boomerang(e) 276 will get you mr fixit(u) blastaar(v) boomerang(e) 272 will get you daredevil(r) mr fixit(u) blastaar(v) 271 will get you daredevil(r) blob(v) skrull commando(v) blastaar(v) boomerang(e) 268 will get you blob(v) mr fixit(u) skrull commando(v) wolverine(e) boomerang(e) 268 will get you blob(v) skrull commando(v) blastaar(v) wolverine(e) 264 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) wolverine(e) 263 will get you daredevil(r) blastaar(v) wolverine(e) boomerang(e) 260 will get you mr fixit(u) skrull commando(v) blastaar(v) 253 will get you daredevil(r) blob(v) blastaar(v) boomerang(e) 251 will get you skrull commando(v) blastaar(v) wolverine(e) boomerang(e) 250 will get you blob(v) blastaar(v) wolverine(e) 250 will get you blob(v) mr fixit(u) wolverine(e) boomerang(e) 247 will get you daredevil(r) mr fixit(u) skrull commando(v) wolverine(e) boomerang(e) 247 will get you daredevil(r) skrull commando(v) blastaar(v) wolverine(e) 246 will get you daredevil(r) blob(v) mr fixit(u) wolverine(e) 242 will get you mr fixit(u) blastaar(v) 241 will get you blob(v) skrull commando(v) blastaar(v) boomerang(e) 237 will get you daredevil(r) blob(v) skrull commando(v) blastaar(v) 237 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) boomerang(e) 234 will get you blob(v) mr fixit(u) skrull commando(v) wolverine(e) 233 will get you blastaar(v) wolverine(e) boomerang(e) 229 will get you daredevil(r) mr fixit(u) wolverine(e) boomerang(e) 229 will get you daredevil(r) blastaar(v) wolverine(e) 223 will get you blob(v) blastaar(v) boomerang(e) 220 will get you daredevil(r) skrull commando(v) blastaar(v) boomerang(e) 219 will get you daredevil(r) blob(v) blastaar(v) 219 will get you daredevil(r) blob(v) mr fixit(u) boomerang(e) 217 will get you skrull commando(v) blastaar(v) wolverine(e) 217 will get you mr fixit(u) skrull commando(v) wolverine(e) boomerang(e) 216 will get you blob(v) mr fixit(u) wolverine(e) 213 will get you daredevil(r) mr fixit(u) skrull commando(v) wolverine(e) 207 will get you blob(v) mr fixit(u) skrull commando(v) boomerang(e) 207 will get you blob(v) skrull commando(v) blastaar(v) 203 will get you daredevil(r) blob(v) mr fixit(u) skrull commando(v) 202 will get you daredevil(r) blastaar(v) boomerang(e) 199 will get you mr fixit(u) wolverine(e) boomerang(e) 199 will get you blastaar(v) wolverine(e) 195 will get you daredevil(r) mr fixit(u) wolverine(e) 194 will get you daredevil(r) blob(v) skrull commando(v) wolverine(e) boomerang(e) 190 will get you skrull commando(v) blastaar(v) boomerang(e) 189 will get you blob(v) mr fixit(u) boomerang(e) 189 will get you blob(v) blastaar(v) 186 will get you daredevil(r) mr fixit(u) skrull commando(v) boomerang(e) 186 will get you daredevil(r) skrull commando(v) blastaar(v) 185 will get you daredevil(r) blob(v) mr fixit(u) 183 will get you mr fixit(u) skrull commando(v) wolverine(e) 176 will get you daredevil(r) blob(v) wolverine(e) boomerang(e) 173 will get you blob(v) mr fixit(u) skrull commando(v) 172 will get you blastaar(v) boomerang(e) 168 will get you daredevil(r) blastaar(v) 168 will get you daredevil(r) mr fixit(u) boomerang(e) 165 will get you mr fixit(u) wolverine(e) 164 will get you blob(v) skrull commando(v) wolverine(e) boomerang(e) 160 will get you daredevil(r) blob(v) skrull commando(v) wolverine(e) 156 will get you skrull commando(v) blastaar(v) 156 will get you mr fixit(u) skrull commando(v) boomerang(e) 155 will get you blob(v) mr fixit(u) 152 will get you daredevil(r) mr fixit(u) skrull commando(v) 146 will get you blob(v) wolverine(e) boomerang(e) 143 will get you daredevil(r) skrull commando(v) wolverine(e) boomerang(e) 142 will get you daredevil(r) blob(v) wolverine(e) 138 will get you blastaar(v) 138 will get you mr fixit(u) boomerang(e) 134 will get you daredevil(r) mr fixit(u) 133 will get you daredevil(r) blob(v) skrull commando(v) boomerang(e) 130 will get you blob(v) skrull commando(v) wolverine(e) 125 will get you daredevil(r) wolverine(e) boomerang(e) 122 will get you mr fixit(u) skrull commando(v) 115 will get you daredevil(r) blob(v) boomerang(e) 113 will get you skrull commando(v) wolverine(e) boomerang(e) 112 will get you blob(v) wolverine(e) 109 will get you daredevil(r) skrull commando(v) wolverine(e) 104 will get you mr fixit(u) 103 will get you blob(v) skrull commando(v) boomerang(e) 99 will get you daredevil(r) blob(v) skrull commando(v) 95 will get you wolverine(e) boomerang(e) 91 will get you daredevil(r) wolverine(e) 85 will get you blob(v) boomerang(e) 82 will get you daredevil(r) skrull commando(v) boomerang(e) 81 will get you daredevil(r) blob(v) 79 will get you skrull commando(v) wolverine(e) 69 will get you blob(v) skrull commando(v) 64 will get you daredevil(r) boomerang(e) 61 will get you wolverine(e) 52 will get you skrull commando(v) boomerang(e) 51 will get you blob(v) 48 will get you daredevil(r) skrull commando(v) 34 will get you boomerang(e) 30 will get you daredevil(r) 18 will get you skrull commando(v)