Sha256: 8615df6caffb8ceef12d340ea867cd0e416c1b7d8ad6376c42e578a724446a42

Contents?: true

Size: 984 Bytes

Versions: 73

Compression:

Stored size: 984 Bytes

Contents

package Sublist;

use strict;
use warnings;

use List::Util qw(first);
use List::MoreUtils qw(pairwise all);

sub check_lists {
    my( $l1, $l2 ) = @_;

    if( is_equal($l1, $l2) ) {
	return "equal";
    } 
    if( @$l1 == 0 ) {
	return "sublist";
    } 
    if( @$l2 == 0 ) {
	return "superlist";
    }
    if( is_sublist($l1, $l2) ) {
	return "sublist";
    }
    if( is_sublist($l2, $l1) ) {
	return "superlist";
    }

    return "unequal";
}

sub is_equal {
    my( $l1, $l2 ) = @_;

    return unless @$l1 == @$l2;

    foreach my $i ( 0 .. @$l1-1 ) {
	return unless $l1->[$i] == $l2->[$i];
    }

    return 1;
}

sub is_sublist {
    my( $l1, $l2 ) = @_;

    return if @$l1 > @$l2;

    my $idx = -1;
    while() {
	$idx = first { $l2->[$_] == $l1->[0] } $idx+1 .. @$l2-1;
	return unless defined $idx;
	return if @$l1 > @$l2 - $idx;

	my @l2_rest = @{ $l2 }[$idx .. $idx + @$l1 -1];
	return 1 if all { $_->[0] == $_->[1] } pairwise { [$a,$b] } @$l1, @l2_rest;
    }
}

1;

Version data entries

73 entries across 73 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.179 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.178 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.177 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.176 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.175 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.174 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.173 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.172 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.171 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.170 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.169 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.167 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.166 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.165 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.164 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.163 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.162 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.161 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm
trackler-2.2.1.160 tracks/perl5/exercises/sublist/.meta/solutions/Sublist.pm