Solve triangle solitaire puzzle: Difference between revisions

Content added Content deleted
(Added VisualBasic.Net version, brute force method)
(Added Perl example)
Line 853: Line 853:
</pre>
</pre>


=={{header|Perl}}==
{{trans|Perl 6}}
<lang perl>@start = qw<
0
1 1
1 1 1
1 1 1 1
1 1 1 1 1
>;

@moves = (
[ 0, 1, 3], [ 0, 2, 5], [ 1, 3, 6],
[ 1, 4, 8], [ 2, 4, 7], [ 2, 5, 9],
[ 3, 4, 5], [ 3, 6,10], [ 3, 7,12],
[ 4, 7,11], [ 4, 8,13], [ 5, 8,12],
[ 5, 9,14], [ 6, 7, 8], [ 7, 8, 9],
[10,11,12], [11,12,13], [12,13,14]
);

$format .= (" " x (5-$_)) . ("%d " x $_) . "\n" for 1..5;

sub solve {
my ($move, $turns, @board) = @_;
$turns = 1 unless $turns;
return "\nSolved" if $turns + 1 == @board;
return undef if $board[$$move[1]] == 0;
my $valid = do {
if ($board[$$move[0]] == 0) {
return undef if $board[$$move[2]] == 0;
"\nmove $$move[2] to $$move[0]\n";
} else {
return undef if $board[$$move[2]] == 1;
"\nmove $$move[0] to $$move[2]\n";
}
};

my $new_result;
my @new_layout = @board;
@new_layout[$_] = 1 - @new_layout[$_] for @$move;
for $this_move (@moves) {
$new_result = solve(\@$this_move, $turns + 1, @new_layout);
last if $new_result
}
$new_result ? "$valid\n" . sprintf($format, @new_layout) . $new_result : $new_result}

$result = "Starting with\n\n" . sprintf($format, @start), "\n";

for $this_move (@moves) {
$result .= solve(\@$this_move, 1, @start);
last if $result
}

print $result ? $result : "No solution found";
</lang>
{{out}}
<pre style="height:60ex;overflow:scroll;">Starting with

0
1 1
1 1 1
1 1 1 1
1 1 1 1 1

move 3 to 0

1
0 1
0 1 1
1 1 1 1
1 1 1 1 1

move 8 to 1

1
1 1
0 0 1
1 1 0 1
1 1 1 1 1

move 10 to 3

1
1 1
1 0 1
0 1 0 1
0 1 1 1 1

move 1 to 6

1
0 1
0 0 1
1 1 0 1
0 1 1 1 1

move 11 to 4

1
0 1
0 1 1
1 0 0 1
0 0 1 1 1

move 2 to 7

1
0 0
0 0 1
1 1 0 1
0 0 1 1 1

move 9 to 2

1
0 1
0 0 0
1 1 0 0
0 0 1 1 1

move 0 to 5

0
0 0
0 0 1
1 1 0 0
0 0 1 1 1

move 6 to 8

0
0 0
0 0 1
0 0 1 0
0 0 1 1 1

move 13 to 11

0
0 0
0 0 1
0 0 1 0
0 1 0 0 1

move 5 to 12

0
0 0
0 0 0
0 0 0 0
0 1 1 0 1

move 11 to 13

0
0 0
0 0 0
0 0 0 0
0 0 0 1 1

move 14 to 12

0
0 0
0 0 0
0 0 0 0
0 0 1 0 0

Solved</pre>
=={{header|Perl 6}}==
=={{header|Perl 6}}==
{{works with|Rakudo|2017.05}}
{{works with|Rakudo|2017.05}}