http://qs321.pair.com?node_id=1148844


in reply to Re^3: Tree Structure Challenge
in thread Tree Structure Challenge

What should the result look like?
( [], [ 'Dog', 'Wolf' ] )

Huh?
I know how to run your code. It doesn't follow the specification: you haven't implemented a static method.
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Replies are listed 'Best First'.
Re^5: Tree Structure Challenge
by Anonymous Monk on Nov 30, 2015 at 00:31 UTC

    I know how to run your code.

    Its right there in the code

    It doesn't follow the specification: you haven't implemented a static method.

    I didn't implement a static method because its just extra indirection -- the spec contains enough indirection on its own, it doesn't benefit from extra confusion

    Speaking of which, you say it should return

    ( [], [ 'Dog', 'Wolf' ] )

    That is kind of a surprise compared to your original sample data and sample ooutput ... as it stands my "solution" isn't there yet

      That is kind of a surprise
      English is not my first language, so I might be imprecise. But, if you build the two trees as described in "The Task", they look like this:
      T1: Mammal - Canine - Dog - Fox - Wolf T2: Mammal - Canine - Fox

      To get from T1 to T2, you have to remove Dog and Wolf.

      it doesn't benefit from extra confusion
      Well, the tree structure was part of the class originally. I'll add that to the specification.

      Update: I won't. It's not needed in the solution. You should use the documented API, i.e. Parent and get_leaves.

      ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

        ...Update: I won't. It's not needed in the solution. You should use the documented API, i.e. Parent and get_leaves.

        Good luck :)

        #!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; dd( deef( [ qw/ Cobra /] , [qw/ Fox /] ) ); dd( deef( [ qw/ Dog Fox Wolf /] , [qw/ Fox /] ) ); sub deef { my( $got, $want) = @_; my %have; undef @have{ @$got }; my @add = grep { !exists $have{$_} } @$want; undef %have; undef @have{ @$want }; my @del = grep { !exists $have{$_} } @$got; [deeef( @add )], [deeef( @del )]; } sub deeef { my( @animals ) = @_; my %catcatdog = ( Mammal => { Bovine => ["Cow", "Bison"], Canine => ["Dog", "Fox", "Wolf"], Equine => ["Horse", "Zebra", "Pony"], }, Reptile => { Bird => ["Pigeon", "Canary", "Owl"], Lizard => ["Salamander", "Chameleon"], Snake => ["Python", "Cobra"], }, ); my %dogcatcat; for my $cat ( keys %catcatdog ){ for my $catcat ( keys %{ $catcatdog{ $cat } } ){ for my $dog( @{ $catcatdog{$cat}{$catcat} } ){ push @{ $dogcatcat{$dog} }, $catcat, $cat, ; } } } return map {; [ $_, @{ $dogcatcat{$_} } ] } @animals; } __END__ ( [["Fox", "Canine", "Mammal"]], [["Cobra", "Snake", "Reptile"]], ) ( [], [["Dog", "Canine", "Mammal"], ["Wolf", "Canine", "Mammal"]], )