# Assignment 1 ## Part A ### Append ```shell xsb ``` ```prolog ['A/append.P']. suffix([1,2], [1,2,3,4]). cut([1,2,3]). ``` ### Reach generate input set ```shell python randomgen.py [number of nodes] ``` ### Transitive closure and cycle ```shell xsb ``` ```prolog ['A/cycle.P']. path(1,2) . cycle(1). ``` ### N-queens ```shell xsb ``` ```prolog ['A/queens.P']. timeNQueen(8). timeOneQueen(8). ``` ## Part B ### Reach generate input set ```shell python randomgen.py [number of nodes] ``` ```shell clingo --models 0 B/reach.lp ``` | Input size | Way 1 | Way 2 | Way 3 | Way 4 | | ---------- | ------- | ------ | ------ | ------ | | 10000 | 0.655s | 0.703s | 0.664s | 0.665s | | 20000 | 1.376s | 1.446s | 1.290s | 1.292s | | 50000 | 3.355s | 3.501s | 2.750s | 1.645s | | 100000 | 6.778s | 5.002s | 3.375s | 3.438s | | 200000 | 12.119s | 7.514s | 7.267s | 7.021s | Though it looks like the Way4 is way better tha Way 1(Almost twice as fast), but if we let the computer to rest for a while and rerun them the other way(start from 4, then 3, follow by 2 and 1), we got | Input size | Way 1 | Way 2 | Way 3 | Way 4 | | ---------- | ------ | ------ | ------ | ------- | | 200000 | 7.146s | 7.610s | 7.120s | 12.103s | It is exactly the other way around! I belive it is because the input file becomes too large (42 MByte), so it waste a lot of time to load it to memory then cache, and the following ones has much higher cache hits rate, so the first one takes way longer than the others. ### N-queens ```shell clingo --models 0 B/nqueens.lp ``` ```shell clingo --models 1 B/nqueens.lp ``` | Number of queens | Time for 1 queen | Time for all queens | | ---------------- | ---------------- | ------------------- | | 8 | 0.004s | 0.006s | | 10 | 0.003s | 0.086s | | 12 | 0.004s | 4.909s | | 14 | 0.006s | Too long to run | | 20 | 0.011s | | | 50 | 0.073s | | | 100 | 0.463s | | | 200 | 3.233s | | | 500 | 35.073s | | ## Part C ### N-queens