in reply to Re^2: Combine line segments to form a single line
in thread Combine line segments to form a single line

In that case, you also need to be able to add new points to the beginning of the line:
#!/usr/bin/perl use warnings; use strict; my @AoA = ( # [11,29, 10,25], [15,35, 11,29], [15,15, 11,21], [10,25, 11,21], [15,35, 21,39], [25,40, 21,39], [21,11, 25,10], [15,15, 21,11], [35,35, 29,39], [29,39, 25,40], [35,15, 29,11], [25,10, 29,11], [40,25, 39,29], [35,35, 39,29], [39,21, 40,25], [35,15, 39,21], ); my @line = @{ shift @AoA }; LINE: while (@AoA) { for my $index (0 .. $#AoA) { for my $indices ( [0, 1, -2, -1, 0, 0 + @line], [2, 3, -2, -1, 2, 0 + @line], [0, 1, 0, 1, 0, 0], [2, 3, 0, 1, 2, 0], ) { if ($AoA[$index][$indices->[0]] == $line[$indices->[2]] && $AoA[$index][$indices->[1]] == $line[$indices->[3]]) { my $new = splice @AoA, $index, 1; splice @$new, $indices->[4], 2; splice @line, $indices->[5], 0, @$new; next LINE } } } die "No solution for @line.\n"; } print "@line\n";
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^4: Combine line segments to form a single line
by bangor (Monk) on Jan 13, 2014 at 15:23 UTC
    Thanks choroba, I'm amazed how quickly you worked that. I will try to understand your code to solve my next problem but in the meantime I'll tell you what it is: when there is more than one line the code seems to go into an infinite loop - how to break out of the loop in that situation? (and sorry for being a pest)
    my @AoA = ( [11,29, 10,25], [15,35, 11,29], [15,15, 11,21], [10,25, 11,21], [15,35, 21,39], [25,40, 21,39], [21,11, 25,10], [15,15, 21,11], [35,35, 29,39], [29,39, 25,40], [35,15, 29,11], [25,10, 29,11], [40,25, 39,29], [35,35, 39,29], [39,21, 40,25], [35,15, 39,21], [61,29, 60,25], [60,25, 61,21], );
      My version of the code stops with the following error:
      No solution for 39 21 40 25 39 29 35 35 29 39 25 40 21 39 15 35 11 29 +10 25 11 21 15 15 21 11 25 10 29 11 35 15 39 21.
      لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ