[ create a new paste ] login | about

Link: http://codepad.org/BRG0YHIR    [ raw code | output | fork ]

Perl, pasted on Aug 18:
use strict;
use warnings;

use Data::Dumper;

my @l = (
    [qw(a b c)], [qw(d e)], [qw(f g h)], [qw(d e)], [qw(i j k l)], [qw(m n)],
    [qw(o)]
);

print "Original list:\n";
print Dumper(@l), "\n";

print "(a) Sublists sorted by length:\n";
print Dumper(lsort(@l)), "\n";

print "(b) Sublists sorted by length frequency:\n";
print Dumper(lfsort(@l)), "\n";

sub lsort {
    return
        map  { $_->[0] }
        sort { $a->[1] cmp $b->[1] }
        map  { [$_, scalar @$_] }
            @_;
}

sub lfsort {
    my %freq_of;

    foreach my $sublist (@_) {
        $freq_of{scalar @$sublist}++;
    }

    return
        map  { $_->[0] }
        sort { $a->[1] cmp $b->[1] }
        map  { [$_, $freq_of{scalar @$_}] }
            @_;
}


Output:
Original list:
$VAR1 = [
          'a',
          'b',
          'c'
        ];
$VAR2 = [
          'd',
          'e'
        ];
$VAR3 = [
          'f',
          'g',
          'h'
        ];
$VAR4 = [
          'd',
          'e'
        ];
$VAR5 = [
          'i',
          'j',
          'k',
          'l'
        ];
$VAR6 = [
          'm',
          'n'
        ];
$VAR7 = [
          'o'
        ];

(a) Sublists sorted by length:
$VAR1 = [
          'o'
        ];
$VAR2 = [
          'd',
          'e'
        ];
$VAR3 = [
          'd',
          'e'
        ];
$VAR4 = [
          'm',
          'n'
        ];
$VAR5 = [
          'a',
          'b',
          'c'
        ];
$VAR6 = [
          'f',
          'g',
          'h'
        ];
$VAR7 = [
          'i',
          'j',
          'k',
          'l'
        ];

(b) Sublists sorted by length frequency:
$VAR1 = [
          'i',
          'j',
          'k',
          'l'
        ];
$VAR2 = [
          'o'
        ];
$VAR3 = [
          'a',
          'b',
          'c'
        ];
$VAR4 = [
          'f',
          'g',
          'h'
        ];
$VAR5 = [
          'd',
          'e'
        ];
$VAR6 = [
          'd',
          'e'
        ];
$VAR7 = [
          'm',
          'n'
        ];



Create a new paste based on this one


Comments: