Skip to content

Instantly share code, notes, and snippets.

@hernan604
Last active December 25, 2015 05:59
Show Gist options
  • Save hernan604/6928422 to your computer and use it in GitHub Desktop.
Save hernan604/6928422 to your computer and use it in GitHub Desktop.
Dadas 3 listas com números, encontrar os que aparecem em ao menos 2 listas \ Given 3 lists with numbers, find the ones that appear in at least 2 lists
from the internet:
my @array1 = (1, 2, 3, 4);
my @array2 = (2, 3, 4);
my @array3 = (2, 5, 4);
my %original = ();
my @isect = ();
map { $original{$_} = 1 } @array1;
@isect = grep { $original{$_} } @array2;
@isect = grep { $original{$_} } @array3;
print Dumper(@isect);
----------------------------------------------------
use strict;
use warnings;
use Data::Printer;
my @a = (3,3,3,3,3,3,4,3);
my @b = (1,2,4,5,6);
my @c = (7,6,5,8,2,1);
my $items = { a => \@a, b => \@b, c => \@c };
my $r;
my $results = {};
my @final_results = ();
sub {
my ( $list_letter, $list ) = @_;
map {
sub {
$r->{$_}->{ $list_letter }->{ ocurrences } = ( exists $r->{$_}->{ $list_letter }->{ ocurrences } ) ? ($r->{$_}->{ $list_letter }->{ ocurrences }+1):1;
if ( ! exists $results->{ $_ } && scalar keys $r->{$_} >= 2 ) {
$results->{ $_ } = 1;
push( @final_results, $_ );
}
}->()
} @$list;
}->( $_, $items->{ $_ } ) for ( keys %$items ) ;
warn p $r;
warn "Numbers that appear at least in 2 lists:";
warn p $results;
warn p @final_results;
--------------------------------------------------
use strict;
use warnings;
use Data::Printer;
my $b = [1..7];
my $c = [6..10];
sub intersect {
my ( $items ) = @_;
my $r;
my $results = {};
my @final_results = ();
map {
my $list_letter = $_ ;
my $list = $items->{ $_ };
map {
sub {
$r->{$_}->{ $list_letter }->{ ocurrences } =
( exists $r->{$_}->{ $list_letter }->{ ocurrences } )
? ($r->{$_}->{ $list_letter }->{ ocurrences }+1)
: 1;
if ( ! exists $results->{ $_ } && scalar keys $r->{$_} >= 2 ) {
$results->{ $_ } = 1;
push( @final_results, $_ );
}
}->();
} @$list;
} keys %$items;
return \@final_results;
}
my $final_results = intersect( { b => $b, c => $c } );
warn p $final_results;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment