The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Oracle's Java site.
powered by NetLogo
view/download model file: sudoku-v19.nlogo
This is an ant based Sudoku puzzle solver
There are 36 ants created out of 4 breeds. The breeds are:
hants : These ants go across a row and change the list of possible values in every blank square, depending on the permanent values of the other squares in the row. They also will make permanent a value if there is only one possible value for that square. They leave an updated list in that square. Like a “pheromone”.
vants : These ants go down a column and change the list of possible values in every blank square, depending on the permanent values of the other squares in the column. They leave an updated list in that square. Like a “pheromone”.
sants : These ants go back and forth in a block and change the list of possible values in every blank square, depending on the permanent values of the other squares in the block. They leave an updated list in that square. Like a “pheromone”.
hlants : These ants go across a row and remember a list of possible values in every blank square. They add up the possible values. At the end of the row if there are any values equal to 1, then there is only one possibility of that number in that row. It will make that square permanently that number next time it lands on it.
There are 3 different puzzles you may choose. These are randomly chosen out of a Sudoku puzzle book. One is easy, one is challenging, and one is hard.
You can vary the speed with the slider at the top. This would allow you to see the ants as they move.
Because the way the ants operate, by leaving a “smell” of all possible values, they can do much more complex auditing than a human can. So some times a hard puzzle is quicker to solve than an easy one.
The ants don’t stop when the puzzle is finished. Each ant does not know what the goal of the entire ant colony is.
I would like to do a 16x16 puzzle next. It would require no change in the algorithms.
Since each square can not have any permanent value that is also in that row, column, or block, there are 20 other squares that are influenced by any single square. These 20 squares are called a unit. One ant per unit would be very fast and efficient, and only require one breed of ants for the whole puzzle.
This code was written by Kgwedi Wise. There were many helpful sites on the web that helped clarify some of the programming and algorithms.
;;This Sudoku-V1 - Draw a grid
;;This Sudoku-V2 - this creates 3 types of ants, and sets ant motion
;;This Sudoku-V3 - this sets up the initial data variables
;;This Sudoku-V4 - This fixes sant to stay in box.Also works for hant to change value in square.
;;This Sudoku-V5 - has hant amd vant working perfect
;;This Sudoku-V6 - has sant,hant,vant working perfect
;;This Sudoku-V7 - has a trial sudoku puzzel. Works to check if square can be a single number. :-)
;;This Sudoku-V8.1 - makes new ants called lone ants HLANT to check if a turf has 1 instance of a digit.
;;This Sudoku-V9 - THIS SOLVES PUZZLE
;;This Sudoku-V10 - with choise of puzzle...Final...Works perfect
;;This Sudoku-V13 - is v10 with SR and text
;;This Sudoku-V14 - Adds vlants works on easy, challenging, hard
;;This Sudoku-V15 - Adds suicide puzzle adds color coding of answers
;;This Sudoku-V16 - Make HLANT and hant the same ant
;;This Sudoku-V17 - Make vLANT and vant the same ant
;;This Sudoku-V18 - Use easy loops for making the initial grid
;;This Sudoku-V19 -
;; make the three types of ant movements done by a single ant
;; so far this only check which numbers CAN be in a box. Needs to also check which numbers are unique to a rcs.
breed [vants vant]
breed [hants hant]
breed [sants sant]
globals
[
xcord
ycord
easy1
challenging1
hard1
suicide1
temp
templ
x
y
]
patches-own [
can-be-1
can-be-2
can-be-3
can-be-4
can-be-5
can-be-6
can-be-7
can-be-8
can-be-9
positive-value
]
hants-own [
hcan-be-1
hcan-be-2
hcan-be-3
hcan-be-4
hcan-be-5
hcan-be-6
hcan-be-7
hcan-be-8
hcan-be-9
hlcan-be-1
hlcan-be-2
hlcan-be-3
hlcan-be-4
hlcan-be-5
hlcan-be-6
hlcan-be-7
hlcan-be-8
hlcan-be-9
hl-needs-to-draw
]
vants-own [
vcan-be-1
vcan-be-2
vcan-be-3
vcan-be-4
vcan-be-5
vcan-be-6
vcan-be-7
vcan-be-8
vcan-be-9
vlcan-be-1
vlcan-be-2
vlcan-be-3
vlcan-be-4
vlcan-be-5
vlcan-be-6
vlcan-be-7
vlcan-be-8
vlcan-be-9
vl-needs-to-draw
]
sants-own [
scan-be-1
scan-be-2
scan-be-3
scan-be-4
scan-be-5
scan-be-6
scan-be-7
scan-be-8
scan-be-9
]
to setup
;; (for this model to work with NetLogo's new plotting features,
;; __clear-all-and-reset-ticks should be replaced with clear-all at
;; the beginning of your setup procedure and reset-ticks at the end
;; of the procedure.)
__clear-all-and-reset-ticks
make-the-ants
draw-grid
set-possibles
set xcord [ 10 30 50 70 90 110 130 150 170 ]
set ycord [ -10 -30 -50 -70 -90 -110 -130 -150 -170 ]
;;x = 10, 30, 50, 70, 90, 110, 130, 150, 170
;;y = -10, -30, -50, -70, -90, -110, -130, -150, -170
set-initial-square-values
end
to go
move-ants
end
;;================================================================
;;This is the SRs for the main program
;;This sr draws the basic sudoku squares. They are 20 patches wide, so total is 180 9x20
to draw-grid
ask patches
[
if (pxcor <= 59) and (pycor >= -59)
[
set pcolor 8
]
if (pxcor <= 59) and ((pycor <= -60) and (pycor >= -119))
[
set pcolor 9
]
if (pxcor <= 59) and ((pycor <= -120) and (pycor >= -179))
[
set pcolor 8
]
if ((pxcor >= 60) and (pxcor <= 119)) and (pycor >= -59)
[
set pcolor 9
]
if ((pxcor >= 60) and (pxcor <= 119)) and ((pycor <= -60) and (pycor >= -119))
[
set pcolor 8
]
if ((pxcor >= 60) and (pxcor <= 119)) and ((pycor <= -120) and (pycor >= -179))
[
set pcolor 9
]
if ((pxcor >= 120) and (pxcor <= 179)) and (pycor >= -59)
[
set pcolor 8
]
if ((pxcor >= 120) and (pxcor <= 179)) and ((pycor <= -60) and (pycor >= -119))
[
set pcolor 9
]
if ((pxcor >= 120) and (pxcor <= 179)) and ((pycor <= -120) and (pycor >= -179))
[
set pcolor 8
]
if (pxcor = 20) or (pxcor = 40) or (pxcor = 60) or (pxcor = 80) or (pxcor = 100) or (pxcor = 120) or (pxcor = 140) or (pxcor = 160) or (pycor = -20) or (pycor = -40) or (pycor = -60) or (pycor = -80) or (pycor = -100) or (pycor = -120) or (pycor = -140) or (pycor = -160)
[ set pcolor 3
]
set plabel-color black
set plabel " "
]
end
;;===============================
;;this moves the 3 different type of ants on 3 different patterns
to move-ants
move-hants
move-vants
move-sants
end
;;=========================================
;;this makes 3 different types of ants one type only moves horizontal, one type only vertical, and one type does the squares.
to make-the-ants
create-hants 9
ask hants
[
set color red
set shape "bug"
set size 5
setxy 10 ((-10 + (-20 * who)))
facexy 11 ((-10 + (-20 * who)))
one-all-hcan-be
zero-all-hlcan-be
]
create-vants 9
ask vants
[
set color green
set shape "bug"
set size 5
setxy (10 + (20 * (who - 36))) -10
facexy (10 + (20 * (who - 36))) -11
set vcan-be-1 1
set vcan-be-2 1
set vcan-be-3 1
set vcan-be-4 1
set vcan-be-5 1
set vcan-be-6 1
set vcan-be-7 1
set vcan-be-8 1
set vcan-be-9 1
]
create-sants 9
ask sants
[
set color brown
set shape "bug"
set size 5
set scan-be-1 1
set scan-be-2 1
set scan-be-3 1
set scan-be-4 1
set scan-be-5 1
set scan-be-6 1
set scan-be-7 1
set scan-be-8 1
set scan-be-9 1
]
ask sant 18
[ setxy 10 -10
facexy 11 -10 ]
ask sant 19
[ setxy 10 -70
facexy 11 -70 ]
ask sant 20
[ setxy 10 -130
facexy 11 -130 ]
ask sant 21
[ setxy 70 -10
facexy 71 -10 ]
ask sant 22
[ setxy 70 -70
facexy 71 -70 ]
ask sant 23
[ setxy 70 -130
facexy 71 -130 ]
ask sant 24
[ setxy 130 -10
facexy 131 -10 ]
ask sant 25
[ setxy 130 -70
facexy 131 -70 ]
ask sant 26
[ setxy 130 -130
facexy 131 -130 ]
end
;;===============
;;this sets initial values of each patch. What it can be 1-9
to set-possibles
ask patches
[
set can-be-1 1
set can-be-2 1
set can-be-3 1
set can-be-4 1
set can-be-5 1
set can-be-6 1
set can-be-7 1
set can-be-8 1
set can-be-9 1
set plabel " "
]
end
;;=============================
;;====================================
;;sant check values
to sant-check-values
if [positive-value] of patch-here = 1
[
set scan-be-1 0
]
if [positive-value] of patch-here = 2
[
set scan-be-2 0
]
if [positive-value] of patch-here = 3
[
set scan-be-3 0
]
if [positive-value] of patch-here = 4
[
set scan-be-4 0
]
if [positive-value] of patch-here = 5
[
set scan-be-5 0
]
if [positive-value] of patch-here = 6
[
set scan-be-6 0
]
if [positive-value] of patch-here = 7
[
set scan-be-7 0
]
if [positive-value] of patch-here = 8
[
set scan-be-8 0
]
if [positive-value] of patch-here = 9
[
set scan-be-9 0
]
;; also checks for totals of all can-be to see if one value is alone and mandatory
if scan-be-1 = 0 [ ask patch-here [set can-be-1 0 ]]
if scan-be-2 = 0 [ ask patch-here [set can-be-2 0 ]]
if scan-be-3 = 0 [ ask patch-here [set can-be-3 0 ]]
if scan-be-4 = 0 [ ask patch-here [set can-be-4 0 ]]
if scan-be-5 = 0 [ ask patch-here [set can-be-5 0 ]]
if scan-be-6 = 0 [ ask patch-here [set can-be-6 0 ]]
if scan-be-7 = 0 [ ask patch-here [set can-be-7 0 ]]
if scan-be-8 = 0 [ ask patch-here [set can-be-8 0 ]]
if scan-be-9 = 0 [ ask patch-here [set can-be-9 0 ]]
end
;;============================
;;this makes all patch can be equal to 0 because a positive value was detected in this square
to zero-all-can-be
ask patch-here
[
set can-be-1 0
set can-be-2 0
set can-be-3 0
set can-be-4 0
set can-be-5 0
set can-be-6 0
set can-be-7 0
set can-be-8 0
set can-be-9 0
]
end
;;============================
;;this makes all hcan-be equal to 1
to one-all-hcan-be
set hcan-be-1 1
set hcan-be-2 1
set hcan-be-3 1
set hcan-be-4 1
set hcan-be-5 1
set hcan-be-6 1
set hcan-be-7 1
set hcan-be-8 1
set hcan-be-9 1
end
;;============================
;;this makes all hlant-can-be equal to 0 to start a fresh row
to zero-all-hlcan-be
set hlcan-be-1 0
set hlcan-be-2 0
set hlcan-be-3 0
set hlcan-be-4 0
set hlcan-be-5 0
set hlcan-be-6 0
set hlcan-be-7 0
set hlcan-be-8 0
set hlcan-be-9 0
end
;;============================
;;this makes all hlant-can-be equal to 9 to so none will be 1 for end of line
to nine-all-hlcan-be
set hlcan-be-1 9
set hlcan-be-2 9
set hlcan-be-3 9
set hlcan-be-4 9
set hlcan-be-5 9
set hlcan-be-6 9
set hlcan-be-7 9
set hlcan-be-8 9
set hlcan-be-9 9
end;;============================
;;this makes all vlant-can-be equal to 0 to start a fresh column
to zero-all-vlcan-be
set vlcan-be-1 0
set vlcan-be-2 0
set vlcan-be-3 0
set vlcan-be-4 0
set vlcan-be-5 0
set vlcan-be-6 0
set vlcan-be-7 0
set vlcan-be-8 0
set vlcan-be-9 0
end
;;============================
;;this makes all vlant-can-be equal to 9 to so none will be 1 for end of line
to nine-all-vlcan-be
set vlcan-be-1 9
set vlcan-be-2 9
set vlcan-be-3 9
set vlcan-be-4 9
set vlcan-be-5 9
set vlcan-be-6 9
set vlcan-be-7 9
set vlcan-be-8 9
set vlcan-be-9 9
end
;;=========================
to move-hants
ask hants
[
forward 20
if [positive-value] of patch-here = 1
[
set hcan-be-1 0
zero-all-can-be
set can-be-1 1
]
if [positive-value] of patch-here = 2
[
set hcan-be-2 0
zero-all-can-be
set can-be-2 1
]
if [positive-value] of patch-here = 3
[
set hcan-be-3 0
zero-all-can-be
set can-be-3 1
]
if [positive-value] of patch-here = 4
[
set hcan-be-4 0
zero-all-can-be
set can-be-4 1
]
if [positive-value] of patch-here = 5
[
set hcan-be-5 0
zero-all-can-be
set can-be-5 1
]
if [positive-value] of patch-here = 6
[
set hcan-be-6 0
zero-all-can-be
set can-be-6 1
]
if [positive-value] of patch-here = 7
[
set hcan-be-7 0
zero-all-can-be
set can-be-7 1
]
if [positive-value] of patch-here = 8
[
set hcan-be-8 0
zero-all-can-be
set can-be-8 1
]
if [positive-value] of patch-here = 9
[
set hcan-be-9 0
zero-all-can-be
set can-be-9 1
]
;;hants also checks for totals of all can-be to see if one value is alone and mandatory
if hcan-be-1 = 0 [ ask patch-here [set can-be-1 0 ]]
if hcan-be-2 = 0 [ ask patch-here [set can-be-2 0 ]]
if hcan-be-3 = 0 [ ask patch-here [set can-be-3 0 ]]
if hcan-be-4 = 0 [ ask patch-here [set can-be-4 0 ]]
if hcan-be-5 = 0 [ ask patch-here [set can-be-5 0 ]]
if hcan-be-6 = 0 [ ask patch-here [set can-be-6 0 ]]
if hcan-be-7 = 0 [ ask patch-here [set can-be-7 0 ]]
if hcan-be-8 = 0 [ ask patch-here [set can-be-8 0 ]]
if hcan-be-9 = 0 [ ask patch-here [set can-be-9 0 ]]
;;check the value
if ([can-be-1] of patch-here + [can-be-2] of patch-here + [can-be-3] of patch-here + [can-be-4] of patch-here + [can-be-5] of patch-here + [can-be-6] of patch-here + [can-be-7] of patch-here + [can-be-8] of patch-here + [can-be-9] of patch-here = 1)
[ ;;so we know that there is only one possibility
if ([can-be-1] of patch-here = 1)
[ ask patch-here [
set positive-value 1
set plabel-color green
set plabel "1"]
]
if ([can-be-2] of patch-here = 1)
[ ask patch-here [
set positive-value 2
set plabel-color green
set plabel "2"]
]
if ([can-be-3] of patch-here = 1)
[ ask patch-here [
set positive-value 3
set plabel-color green
set plabel "3"]
]
if ([can-be-4] of patch-here = 1)
[ ask patch-here [
set positive-value 4
set plabel-color green
set plabel "4"]
]
if ([can-be-5] of patch-here = 1)
[ ask patch-here [
set positive-value 5
set plabel-color green
set plabel "5"]
]
if ([can-be-6] of patch-here = 1)
[ ask patch-here [
set positive-value 6
set plabel-color green
set plabel "6"]
]
if ([can-be-7] of patch-here = 1)
[ ask patch-here [
set positive-value 7
set plabel-color green
set plabel "7"]
]
if ([can-be-8] of patch-here = 1)
[ ask patch-here [
set positive-value 8
set plabel-color green
set plabel "8"]
]
if ([can-be-9] of patch-here = 1)
[ ask patch-here [
set positive-value 9
set plabel-color green
set plabel "9"]
]
]
;;begining of old HLant
if hl-needs-to-draw > 0 ;;this means it needs to draw a positive-value
[
if ([can-be-1] of patch-here = 1) and (hl-needs-to-draw = 1)[
set plabel-color red
set plabel "1"
set positive-value 1
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-2] of patch-here = 1) and (hl-needs-to-draw = 2) [
set plabel-color red
set plabel "2"
set positive-value 2
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-3] of patch-here = 1) and (hl-needs-to-draw = 3) [
set plabel-color red
set plabel "3"
set positive-value 3
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-4] of patch-here = 1) and (hl-needs-to-draw = 4) [
set plabel-color red
set plabel "4"
set positive-value 4
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-5] of patch-here = 1) and (hl-needs-to-draw = 5) [
set plabel-color red
set plabel "5"
set positive-value 5
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-6] of patch-here = 1) and (hl-needs-to-draw = 6) [
set plabel-color red
set plabel "6"
set positive-value 6
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-7] of patch-here = 1) and (hl-needs-to-draw = 7) [
set plabel-color red
set plabel "7"
set positive-value 7
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-8] of patch-here = 1) and (hl-needs-to-draw = 8)[
set plabel-color red
set plabel "8"
set positive-value 8
set hl-needs-to-draw 0
nine-all-hlcan-be]
if ([can-be-9] of patch-here = 1) and (hl-needs-to-draw = 9) [
set plabel-color red
set plabel "9"
set positive-value 9
set hl-needs-to-draw 0
nine-all-hlcan-be]
]
;; so hl-needs to draw = 0
if [positive-value] of patch-here = 1 [ set hlcan-be-1 9 ]
if [positive-value] of patch-here = 2 [ set hlcan-be-2 9 ]
if [positive-value] of patch-here = 3 [ set hlcan-be-3 9 ]
if [positive-value] of patch-here = 4 [ set hlcan-be-4 9 ]
if [positive-value] of patch-here = 5 [ set hlcan-be-5 9 ]
if [positive-value] of patch-here = 6 [ set hlcan-be-6 9 ]
if [positive-value] of patch-here = 7 [ set hlcan-be-7 9 ]
if [positive-value] of patch-here = 8 [ set hlcan-be-8 9 ]
if [positive-value] of patch-here = 9 [ set hlcan-be-9 9 ]
set hlcan-be-1 ([can-be-1] of patch-here + hlcan-be-1)
set hlcan-be-2 ([can-be-2] of patch-here + hlcan-be-2)
set hlcan-be-3 ([can-be-3] of patch-here + hlcan-be-3)
set hlcan-be-4 ([can-be-4] of patch-here + hlcan-be-4)
set hlcan-be-5 ([can-be-5] of patch-here + hlcan-be-5)
set hlcan-be-6 ([can-be-6] of patch-here + hlcan-be-6)
set hlcan-be-7 ([can-be-7] of patch-here + hlcan-be-7)
set hlcan-be-8 ([can-be-8] of patch-here + hlcan-be-8)
set hlcan-be-9 ([can-be-9] of patch-here + hlcan-be-9)
if xcor = 170
[
if hlcan-be-1 = 1 [ set hl-needs-to-draw 1 ]
if hlcan-be-2 = 1 [ set hl-needs-to-draw 2 ]
if hlcan-be-3 = 1 [ set hl-needs-to-draw 3 ]
if hlcan-be-4 = 1 [ set hl-needs-to-draw 4 ]
if hlcan-be-5 = 1 [ set hl-needs-to-draw 5 ]
if hlcan-be-6 = 1 [ set hl-needs-to-draw 6 ]
if hlcan-be-7 = 1 [ set hl-needs-to-draw 7 ]
if hlcan-be-8 = 1 [ set hl-needs-to-draw 8 ]
if hlcan-be-9 = 1 [ set hl-needs-to-draw 9 ]
zero-all-hlcan-be
]
]
end
;;===================================
to move-vants
ask vants
[
forward 20
if [positive-value] of patch-here = 1
[
set vcan-be-1 0
]
if [positive-value] of patch-here = 2
[
set vcan-be-2 0
]
if [positive-value] of patch-here = 3
[
set vcan-be-3 0
]
if [positive-value] of patch-here = 4
[
set vcan-be-4 0
]
if [positive-value] of patch-here = 5
[
set vcan-be-5 0
]
if [positive-value] of patch-here = 6
[
set vcan-be-6 0
]
if [positive-value] of patch-here = 7
[
set vcan-be-7 0
]
if [positive-value] of patch-here = 8
[
set vcan-be-8 0
]
if [positive-value] of patch-here = 9
[
set vcan-be-9 0
]
;; set pcolor red
;;hants also checks for totals of all can-be to see if one value is alone and mandatory
if vcan-be-1 = 0 [ ask patch-here [set can-be-1 0 ]]
if vcan-be-2 = 0 [ ask patch-here [set can-be-2 0 ]]
if vcan-be-3 = 0 [ ask patch-here [set can-be-3 0 ]]
if vcan-be-4 = 0 [ ask patch-here [set can-be-4 0 ]]
if vcan-be-5 = 0 [ ask patch-here [set can-be-5 0 ]]
if vcan-be-6 = 0 [ ask patch-here [set can-be-6 0 ]]
if vcan-be-7 = 0 [ ask patch-here [set can-be-7 0 ]]
if vcan-be-8 = 0 [ ask patch-here [set can-be-8 0 ]]
if vcan-be-9 = 0 [ ask patch-here [set can-be-9 0 ]]
;;begining of old VLant
;; forward 20
if vl-needs-to-draw > 0 ;;this means it needs to draw a positive-value
[
if ([can-be-1] of patch-here = 1) and (vl-needs-to-draw = 1)[
set plabel-color blue
set plabel "1"
set positive-value 1
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-2] of patch-here = 1) and (vl-needs-to-draw = 2) [
set plabel-color blue
set plabel "2"
set positive-value 2
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-3] of patch-here = 1) and (vl-needs-to-draw = 3) [
set plabel-color blue
set plabel "3"
set positive-value 3
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-4] of patch-here = 1) and (vl-needs-to-draw = 4) [
set plabel-color blue
set plabel "4"
set positive-value 4
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-5] of patch-here = 1) and (vl-needs-to-draw = 5) [
set plabel-color blue
set plabel "5"
set positive-value 5
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-6] of patch-here = 1) and (vl-needs-to-draw = 6) [
set plabel-color blue
set plabel "6"
set positive-value 6
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-7] of patch-here = 1) and (vl-needs-to-draw = 7) [
set plabel-color blue
set plabel "7"
set positive-value 7
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-8] of patch-here = 1) and (vl-needs-to-draw = 8)[
set plabel-color blue
set plabel "8"
set positive-value 8
set vl-needs-to-draw 0
nine-all-vlcan-be]
if ([can-be-9] of patch-here = 1) and (vl-needs-to-draw = 9) [
set plabel-color blue
set plabel "9"
set positive-value 9
set vl-needs-to-draw 0
nine-all-vlcan-be]
]
;; so vl-needs to draw = 0
if [positive-value] of patch-here = 1 [ set vlcan-be-1 9 ]
if [positive-value] of patch-here = 2 [ set vlcan-be-2 9 ]
if [positive-value] of patch-here = 3 [ set vlcan-be-3 9 ]
if [positive-value] of patch-here = 4 [ set vlcan-be-4 9 ]
if [positive-value] of patch-here = 5 [ set vlcan-be-5 9 ]
if [positive-value] of patch-here = 6 [ set vlcan-be-6 9 ]
if [positive-value] of patch-here = 7 [ set vlcan-be-7 9 ]
if [positive-value] of patch-here = 8 [ set vlcan-be-8 9 ]
if [positive-value] of patch-here = 9 [ set vlcan-be-9 9 ]
set vlcan-be-1 ([can-be-1] of patch-here + vlcan-be-1)
set vlcan-be-2 ([can-be-2] of patch-here + vlcan-be-2)
set vlcan-be-3 ([can-be-3] of patch-here + vlcan-be-3)
set vlcan-be-4 ([can-be-4] of patch-here + vlcan-be-4)
set vlcan-be-5 ([can-be-5] of patch-here + vlcan-be-5)
set vlcan-be-6 ([can-be-6] of patch-here + vlcan-be-6)
set vlcan-be-7 ([can-be-7] of patch-here + vlcan-be-7)
set vlcan-be-8 ([can-be-8] of patch-here + vlcan-be-8)
set vlcan-be-9 ([can-be-9] of patch-here + vlcan-be-9)
if ycor = -170
[
if vlcan-be-1 = 1 [ set vl-needs-to-draw 1 ]
if vlcan-be-2 = 1 [ set vl-needs-to-draw 2 ]
if vlcan-be-3 = 1 [ set vl-needs-to-draw 3 ]
if vlcan-be-4 = 1 [ set vl-needs-to-draw 4 ]
if vlcan-be-5 = 1 [ set vl-needs-to-draw 5 ]
if vlcan-be-6 = 1 [ set vl-needs-to-draw 6 ]
if vlcan-be-7 = 1 [ set vl-needs-to-draw 7 ]
if vlcan-be-8 = 1 [ set vl-needs-to-draw 8 ]
if vlcan-be-9 = 1 [ set vl-needs-to-draw 9 ]
zero-all-vlcan-be
]
]
end
;;========================
to move-sants
ifelse ([xcor] of sant 18 = 10) or ([xcor] of sant 18 = 30)
[
ask sants
[
forward 20
sant-check-values
]
] ;;end of if sant is at xcor 10 or 30
[ ;;start of ifelse sant not at 10 or 50
if ([xcor] of sant 18 = 50) and ([ycor] of sant 18 != -50)
[
ask sants
[
right 90
forward 20
right 90
forward 40
right 180
sant-check-values
]
]
if ([xcor] of sant 18 = 50) and ([ycor] of sant 18 = -50)
[
ask sants
[
left 90
forward 40
left 90
forward 40
right 180
sant-check-values
]
]
]
end
;;===========================
;;x = 10, 30, 50, 70, 90, 110, 130, 150, 170
;;y = -10, -30, -50, -70, -90, -110, -130, -150, -170
;; set challenging1 [ [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
;; [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ] ]
;;
;;=======================================
;;sets initial values of squares
to set-initial-square-values
ask patches [set plabel-color black]
if select-puzzle = "Easy1 Puzzle"
[
set easy1 [ [ [ 0 " "] [ 0 " "] [ 1 "1" ] [ 0 " "] [ 0 " "] [ 5 "5" ] [ 6 "6" ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 9 "9" ] [ 3 "3"] [ 0 " "] [ 0 " " ] [ 2 "2" ] [ 0 " "] [ 7 "7"] ]
[ [ 7 "7"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 1 "1"] [ 0 " "] ]
[ [ 2 "2"] [ 0 " "] [ 0 " " ] [ 8 "8"] [ 0 " "] [ 4 "4" ] [ 9 "9" ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 3 "3"] [ 0 " " ] [ 2 "2"] [ 6 "6"] [ 1 "1" ] [ 0 " " ] [ 7 "7"] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 4 "4" ] [ 5 "5"] [ 0 " "] [ 3 "3" ] [ 0 " " ] [ 0 " "] [ 2 "2"] ]
[ [ 0 " "] [ 2 "2"] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 6 "6"] ]
[ [ 8 "8"] [ 0 " "] [ 6 "6" ] [ 0 " "] [ 0 " "] [ 7 "7" ] [ 3 "3" ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 3 "3" ] [ 6 "6"] [ 0 " "] [ 0 " " ] [ 7 "7" ] [ 0 " "] [ 0 " "] ] ]
foreach [ 0 1 2 3 4 5 6 7 8]
[
set y ?
foreach [ 0 1 2 3 4 5 6 7 8 ]
[
set x ?
set temp item x (item y easy1)
ask patch (item x xcord) (item y ycord) [
set positive-value item 0 temp
set plabel item 1 temp]
]
]
]
if select-puzzle = "Challenging1 Puzzle"
[
;;x = 10, 30, 50, 70, 90, 110, 130, 150, 170
;;y = -10, -30, -50, -70, -90, -110, -130, -150, -170
set challenging1 [ [ [ 1 "1"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 5 "5"] [ 0 " " ] [ 0 " " ] [ 8 "8"] [ 0 " "] ]
[ [ 0 " "] [ 7 "7"] [ 8 "8" ] [ 0 " "] [ 6 "6"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 9 "9"] [ 0 " " ] [ 0 " "] [ 0 " "] [ 2 "2" ] [ 3 "3" ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 3 "3"] [ 0 " " ] [ 0 " "] [ 0 " "] [ 7 "7" ] [ 8 "8" ] [ 1 "1"] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 2 "2" ] [ 3 "3"] [ 0 " "] [ 9 "9" ] [ 7 "7" ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 4 "4"] [ 5 "5" ] [ 6 "6"] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 2 "2"] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 3 "3" ] [ 1 "1"] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 9 "9"] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 9 "9"] [ 0 " " ] [ 1 "1" ] [ 3 "3"] [ 0 " "] ]
[ [ 0 " "] [ 5 "5"] [ 0 " " ] [ 0 " "] [ 3 "3"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 6 "6"] ] ]
foreach [ 0 1 2 3 4 5 6 7 8]
[
set y ?
foreach [ 0 1 2 3 4 5 6 7 8 ]
[
set x ?
set temp item x (item y challenging1)
ask patch (item x xcord) (item y ycord) [
set positive-value item 0 temp
set plabel item 1 temp]
]
]
]
if Select-Puzzle = "Hard1 Puzzle"
[
;;x = 10, 30, 50, 70, 90, 110, 130, 150, 170
;;y = -10, -30, -50, -70, -90, -110, -130, -150, -170
set hard1 [ [ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 6 "6" ] [ 8 "8"] [ 0 " "] ]
[ [ 0 " "] [ 6 "6"] [ 2 "2" ] [ 3 "3"] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 9 "9"] ]
[ [ 5 "5"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 4 "4"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
[ [ 1 "1"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 3 "3"] [ 5 "5" ] [ 9 "9" ] [ 7 "7"] [ 0 " "] ]
[ [ 8 "8"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 2 "2"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 6 "6"] ]
[ [ 0 " "] [ 9 "9"] [ 7 "7" ] [ 6 "6"] [ 1 "1"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 8 "8"] ]
[ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 8 "8"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 3 "3"] ]
[ [ 9 "9"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 0 " "] [ 7 "7" ] [ 4 "4" ] [ 5 "5"] [ 0 " "] ]
[ [ 0 " "] [ 7 "7"] [ 4 "4" ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ] ]
foreach [ 0 1 2 3 4 5 6 7 8]
[
set y ?
foreach [ 0 1 2 3 4 5 6 7 8 ]
[
set x ?
set temp item x (item y hard1)
ask patch (item x xcord) (item y ycord) [
set positive-value item 0 temp
set plabel item 1 temp]
]
]
]
if Select-Puzzle = "Suicide1 Puzzle"
[
;;x = 10, 30, 50, 70, 90, 110, 130, 150, 170
;;y = -10, -30, -50, -70, -90, -110, -130, -150, -170
set suicide1 [ [ [ 0 " "] [ 0 " "] [ 3 "3" ] [ 0 " "] [ 0 " "] [ 2 "2" ] [ 5 "5" ] [ 0 " "] [ 4 "4"] ]
[ [ 6 "6"] [ 0 " "] [ 2 "2" ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " " ] [ 9 "9"] [ 0 " "] ]
[ [ 8 "8"] [ 0 " "] [ 5 "5" ] [ 0 " "] [ 3 "3"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 0 " " ] [ 4 "4"] [ 0 " "] [ 5 "5" ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
[ [ 3 "3"] [ 0 " "] [ 0 " " ] [ 0 " "] [ 2 "2"] [ 0 " " ] [ 0 " " ] [ 0 " "] [ 1 "1"] ]
[ [ 0 " "] [ 0 " "] [ 0 " " ] [ 3 "3"] [ 0 " "] [ 6 "6" ] [ 0 " " ] [ 0 " "] [ 0 " "] ]
[ [ 0 " "] [ 0 " "] [ 0 " " ] [ 0 " "] [ 4 "4"] [ 0 " " ] [ 9 "9" ] [ 0 " "] [ 6 "6"] ]
[ [ 0 " "] [ 3 "3"] [ 0 " " ] [ 0 " "] [ 0 " "] [ 0 " " ] [ 1 "1" ] [ 0 " "] [ 5 "5"] ]
[ [ 1 "1"] [ 0 " "] [ 4 "4" ] [ 6 "6"] [ 0 " "] [ 0 " " ] [ 7 "7" ] [ 0 " "] [ 0 " "] ] ]
;;
foreach [ 0 1 2 3 4 5 6 7 8]
[
set y ?
foreach [ 0 1 2 3 4 5 6 7 8 ]
[
set x ?
set temp item x (item y suicide1)
ask patch (item x xcord) (item y ycord) [
set positive-value item 0 temp
set plabel item 1 temp]
]
]
]
end