http://www.perlmonks.org?node_id=1057026


in reply to Re^5: Challenge: 8 Letters, Most Words (top 50)
in thread Challenge: 8 Letters, Most Words

BrowserUk,
Indeed. I had de-dup code that didn't.

Is your code posted somewhere as I can't tell if this has been updated.

Cheers - L~R

Replies are listed 'Best First'.
Re^7: Challenge: 8 Letters, Most Words (top 50)
by BrowserUk (Patriarch) on Oct 05, 2013 at 13:39 UTC
    I can't tell if this has been updated.

    No. This is completely different code to my first attempt. I thought I had posted it, but it seems that I didn't.

    This is the code in its final form:

    #! perl -slw use strict; use List::Util qw[ reduce ]; use Data::Dump qw[ pp ]; sub canBeMadeFrom { my( $sigRef, $word ) = @_; for( split '', $word ) { return unless exists $sigRef->{ $_ }; delete $sigRef->{ $_ }; } return 1; } my %stats; while( <> ) { chomp; next if length() > 8; my $sig = join '', sort split '', $_; push @{ $stats{ $sig } }, $_; } print STDERR scalar keys %stats; my @eights = grep length() == 8, keys %stats; my %eights; @eights{ @eights } = delete @stats{ @eights }; print my $i = @eights; for my $eight ( keys %eights ) { printf STDERR "\r%5d '%s'\t", $i--, $eight; my %sig; undef @sig{ split '', $eight }; for my $lesser ( keys %stats ) { next unless canBeMadeFrom( { %sig }, $lesser ); for my $word ( @{ $stats{ $lesser } } ) { push @{ $eights{ $eight } }, $word if canBeMadeFrom( { %si +g }, $word ); } } } my @ordered = sort{ @{ $eights{ $b } } <=> @{ $eights{ $a } } } keys %eights; for( 0 .. $#ordered ) { print "$ordered[ $_ ]: ", scalar @{ $eights{ $ordered[ $_ ] } }; print "@{ $eights{ $ordered[ $_ ] } }"; }

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.