Guest User

Untitled

a guest
Oct 17th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. use strict;
  4. use warnings;
  5. use Data::Dumper;
  6. use Bit::Vector::Overload;
  7. use List::Util qw(first max maxstr min minstr reduce shuffle sum);
  8. use List::MoreUtils qw( pairwise );
  9.  
  10. my $target_sum = 10;
  11. my %data = (apple=>3, pear=>2, pineapple=>9, strawberry=>1,
  12. kiwi=>-5, lime=>15, lemon=>5, orange=>-1, banana=>5);
  13. my @keys = keys %data;
  14. my $n = @keys;
  15.  
  16. my $vector = Bit::Vector::Overload->new($n);
  17. $vector->Configuration("output=bin");
  18. $vector->Fill();
  19.  
  20. print Dumper(\%data);
  21. $Data::Dumper::Indent = 0;
  22. my $carry = 0;
  23. while( ! $carry ) {
  24. my @bits = split(//, "$vector");
  25. my @pairs= pairwise { [$a,$b] } @keys, @bits;
  26.  
  27. my $kset = (reduce { push($a,@$b[0]) if(int(@$b[1])); $a} [], @pairs)[0];
  28. my $sum = reduce { $a + $data{$b} } 0, @$kset;
  29.  
  30. if( $sum == $target_sum ) {
  31. print $vector->to_Hex().": ".Dumper($kset) ."\n";
  32. }
  33. $carry = $vector->decrement();
  34. }
  35.  
  36. # __END__
Add Comment
Please, Sign In to add comment