Saturday, February 2, 2008


import Control.Monad
import Data.Char
import Data.List
import System.Console.GetOpt
import System.Environment
import System.Exit
import System.IO
import Text.Printf


import System( getArgs )


main = do
args <- getArgs
-- print $ " The input args are :" ++ ( ( ((++ " ") . (show ) =<<) ) $ ( map read args ::[Int]) )
printf $ nqueens $ ( map read args ::[Int])!!0

qoer,noha,nova,nosea,noswa::(Integral n, Enum n ,Ord n)=> n -> [[n]] -- take size of board and return a list of clauses.

qoer n = [ [ (n* (j-1) + i ) | i <- [1..n] ] ++ [0] | j <- [1..n] ]
noha n = [ [ -1 *(n * ( j-1) + i ) , -1* (n * ( j-1) + k) , 0 ] | j <- [1..n] , i <- [ 1.. (n-1)] , k <- [ (i+1)..n] ]
nova n = [ [ -1 *(n * ( j-1) + i ) , -1*( n * ( k-1) + i) , 0 ] | i <- [1..n] , j <- [ 1.. (n-1)] , k <- [ (j+1)..n] ]
nosea n = [ [ -1 *(n * ( j-1) + i ) , -1*( n * ( j-1 + k ) + i + k ) , 0 ] | i <- [1..(n-1)] , j <- [ 1.. (n-1)] , k <- [1..(n*n)] , ( ( ( i+k) <= n ) && ( ( j+k) <=n ) ) ] -- bugs lurk here
noswa n = [ [ -1 *(n * ( j-1) + i ) , -1*( n * ( j-1 + k ) + i - k ) , 0 ] | i <- [2..n] , j <- [ 1.. (n-1)] , k <- [1..(n*n)] , ( ( ( i-k) >= 1 ) && ( ( j+k) <=n ) ) ] -- bugs lurk here

generate::(Integral n, Enum n, Ord n) => n -> [[n]] -- -- take size of board and return a list of clauses.
generate n = ( qoer n) ++ (noha n) ++ (nova n) ++ (nosea n) ++ (noswa n)

printclause::(Integral n, Enum n, Ord n) => [n]->String
printclause l = (((++" ").show) =<< ( init l)) ++ (show ( last l) )

nqueens::(Integral n, Enum n, Ord n) => n -> String
nqueens nq = (header nv nc ) ++ unlines ( map printclause clauses )
where
clauses = generate nq
nc = genericLength clauses
nv = nq *nq

header::(Integral n, Enum n, Ord n)=>n->n->String
header nv nc ="p cnf " ++ (show nv )++ " " ++ ( show nc )++ "\n"

Friday, January 18, 2008

HappS and HStringTemplate

I was able to follow the instructions on the Happs.org site and get a rudimentary static file only site up and running. To be able to run a wiki etc.. i need to do some more things..

1. Difficulty is that there is no good documentation at this point. So it is quite an uphill task to try and understand how it all works.

The plan is to write a 20 minute wiki tutorial for HappS , hopefully using ANTLR StringTemplate