tilly,
Tradition says that when you answer homework you obfuscate your answer somewhat so that it won't get a good mark.
It doesn't look too much like homework to me but another idea would be to use code obviously beyond that of the course?
#!/usr/bin/perl
use strict;
use warnings;
my $file = $ARGV[0] or die "Usage: $0 <input_file>";
open(my $fh, '<', $file) or die "Unable to open '$file' for reading: $
+!";
my %pair;
while (<$fh>) {
tr/\r\n//d;
my @word = sort split ' ';
my $next = combo(2, @word);
while (my @combo = $next->()) {
my $key = join "\0", @combo;
++$pair{$key};
}
}
my $comp = sub { return $pair{$_[0]} > $pair{$_[1]} ? $_[0] : undef; }
+;
my $maxval = gen_reduce(compare => $comp);
$maxval->($_) for keys %pair;
print $maxval->(), "\n";
# taken from [id://393064]
sub combo {
my $by = shift;
return sub { () } if ! $by || $by =~ /\D/ || @_ < $by;
my @list = @_;
my @position = (0 .. $by - 2, $by - 2);
my @stop = @list - $by .. $#list;
my $end_pos = $#position;
my $done = undef;
return sub {
return () if $done;
my $cur = $end_pos;
{
if ( ++$position[ $cur ] > $stop[ $cur ] ) {
$position[ --$cur ]++;
redo if $position[ $cur ] > $stop[ $cur ];
my $new_pos = $position[ $cur ];
@position[ $cur .. $end_pos ] = $new_pos .. $new_pos +
+ $by;
}
}
$done = 1 if $position[0] == $stop[0];
return @list[ @position ];
}
}
# Taken from [id://492651]
sub gen_reduce {
my $usage = 'Usage: gen_reduce("initial" => $val, "compare" => $co
+de_ref)';
die $usage if @_ % 2;
my %opt = @_;
die $usage if ! defined $opt{compare} || ref $opt{compare} ne 'COD
+E';
my $compare = $opt{compare};
my $val = $opt{initial};
return sub {
for ( @_ ) {
$val = $_ if ! defined $val || $compare->($_, $val);
}
return $val;
};
}
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|