# eight-queens
# Author: Hannes du Plooy 
# Date: 20 Sep 2016      
# Objective: To solve the following
# Search for a chess board solution with 8 queens and no one
# endangering any other.
#!/usr/bin/perl

use strict;
use warnings;

my @board = (0,0,0,0,0,0,0,0);

sub EightQueens {
    my $line = $_[0];
    if ($line > 7) {
        return 1;
    }
    for(my $column=0;$column<8;$column++) {
        my $endangered = 0;
        for(my $line2=0;$line2<$line;$line2++) {
            if ($board[$line2] == $column || abs($line-$line2)==abs($column-$board[$line2])) {
                $endangered = 1;
                last;
            }
        }
        if (!$endangered) {
            @board[$line] = $column;
            if (EightQueens($line+1)) {
                return 1;
            } 
        }
    }
    return 0;
}

if (EightQueens(0)) {
    for(my $i=0;$i<8;$i++) {
        for(my $j=0;$j<8;$j++) {
            if ($board[$i] == $j) {
                print "Q";
            } else {
                print ".";
            }
        }
        print "\n";
    }
} else {
    print "No Solution\n";
}

