So here is my solution. In order not to spoil the puzzle, I've put a readmore around it.
#!/usr/bin/perl
use strict;
use warnings;
my @nodes= qw(A B C D E F G H I J);
my %edges= (
A => [qw(B C F I D G J E)],
B => [qw(A C D E F H J I)],
C => [qw(A B D E F I)],
D => [qw(A C B E G J)],
E => [qw(A D C B G H I J)],
F => [qw(B C A H J I)],
G => [qw(D A E H I J)],
H => [qw(F B G E I J)],
I => [qw(B F C A H G E J)],
J => [qw(E G D A H F B I)],
);
my @lines=(
[qw(A C F I)],
[qw(A D G J)],
[qw(B C D E)],
[qw(B F H J)],
[qw(E G H I)],
);
my $lines= join("\n", map join(" ", sort @$_),@lines);
my %triangle;
foreach my $a (@nodes) {
foreach my $b (@{$edges{$a}}) {
foreach my $c (@{$edges{$b}}) {
next if $c eq $a;
foreach my $d (@{$edges{$c}}) {
next if $d eq $b;
next unless $d eq $a;
my $triangle= join(' ', sort($a, $b, $
+c));
my $re= join(' (\S+ )*', sort($a, $b,
+$c));
next if $lines=~ /$re/;
++$triangle{$triangle};
}
}
}
}
print join("\n", scalar keys %triangle, sort keys %triangle),"\n";