# HG changeset patch # User William Morgan # Date 1406358221 25200 # Node ID 75c97fb8060263314fc77e7dfb4c2d202734ab44 # Parent abd8ceef0dd8f5b44448be2d40579f880991a2f2 Tag team simple AI WIP diff -r abd8ceef0dd8 -r 75c97fb80602 code/dotScanner.lm --- a/code/dotScanner.lm Fri Jul 25 23:36:17 2014 -0700 +++ b/code/dotScanner.lm Sat Jul 26 00:03:41 2014 -0700 @@ -55,6 +55,14 @@ } reverse: new } + + flatten <- :lst { + fold: lst [] with: :acc el { + fold: el acc with: :iacc iel { + iel | iacc + } + } + } makeTree:size <- :lst :size { ret <- 0 @@ -82,7 +90,6 @@ } get:fromTree:size <- :idx :tree :size { - print: #[1 tree size] ret <- 0 half <- size / 2 if: size <= 2 { @@ -103,7 +110,6 @@ get:fromTree <- :idx :tree { size <- tree value - print: #[0 size] get: idx fromTree: (tree tail) size: size } @@ -167,6 +173,7 @@ } grid:get <- :grid :pos { + print: #[15 pos] x <- pos value y <- pos tail get: x fromTree: (get: y fromTree: grid) @@ -191,55 +198,37 @@ maxX <- (get: 0 fromTree: grid) value ((x >= 0) + (y >= 0) + (x < maxX) + (y < maxY)) > 0 } - - /* - ListGet <- :cell idx { - if: idx = 0 {cell value} else: { - ListGet: (cell tail) (idx - 1) - } - } - TupGet <- :cell depth size { - if: idx = 0 {cell value} else: { - if: size = 1 {cell tail} else: { // warning, out-of-bounds idx will return a value! - TupGet: (cell tail) (idx - 1) (size - 1) - }} - } - - // rowmajor lists - GridGet <- :x y w h{ - ListGet - ... - } - */ visited <- 0 - /* - advancer <- :listOfTupsLams { + + advancer <- :continuations { + print: 5 notdone <- 1 while: { notdone } do: { - listOfLamTups <- fold: listOfLamTups [] with: :acc el{ - ret <- 0 - newTupLams <- (el tail): - - - // zero means "I have not found it" - - if: (el value) = 0 { - newTupLams <- (el tail): - if: (isInteger?: newTupLams) { - ret <- acc - } else: { - ret <- acc | newTupLams - } - } else: { - notdone <- 0 - ret <- [(el tail)] - } + if: (continuations isInteger?) { + notdone <- 0 + } else: { + print: 6 + continuations <- flatten: (fold: continuations [] with: :acc el{ + print: 7 + ret <- acc + if: notdone { + ret <- el: + if: (ret isInteger?) { + } else: { + if: (ret value) { + notdone <- 0 + ret <- (ret tail) + } else: { + ret <- (ret tail) | acc + } + } + } else: {} + }) } } - + continuations } - */ calcPos <- :move from { x <- from value @@ -265,15 +254,21 @@ ret <- [] move <- 0 atpos <- 0 + print: 9 if: (grid: grid inBounds?: myLoc) { + print: 10 if: (grid: visited get: myLoc) { } else: { + print: 11 atpos <- grid: grid get: myLoc if: (atpos = 2) + (atpos = 3) + (atpos = 4) { + print: 12 ret <- #[1 (reverse: path)] } else: { + print: 13 visited <- grid: visited set: myLoc to: 1 if: atpos { + print: 14 move <- 0 while: { move < 4 } do: { ret <- (makeContClos: grid (calcPos: move myLoc) move | path) | ret @@ -282,41 +277,29 @@ } else: {} } } - } else: {} + } else: { + print: 42 + } ret } } - //scanFor <- :target visited { - //} - counterLoad <- 4 step <- :myState world { + print: -1 grid <- makeTree: (map: (world value) :row { makeTree: row }) - lmState <- (world value) tail + print: 0 + lmState <- (world tail) value + print: 1 myLoc <- (lmState tail) value - - visited <- treeMap: grid :el { 0 } - /* - cont <- { - if: (grid: grid get: myLoc - visited <- tree: visited set: myLoc to: 1 - */ - - - - //myPos <- - path <- [3 1 3 1] //scanFor: 2 3 [myPos] - move <- myState value - counter <- (myState tail) - 1 - if: counter = 0 { - move <- move + 1 - counter <- counterLoad - if: move = 4 { - move <- 0 - } else: {} - } else: {} - #[0 ((path tail) value)] + print: 2 + visited <- treeMap: grid :row { + treeMap: row :el { 0 } + } + print: 3 + path <- advancer: [(makeContClos: grid myLoc [])] + print: #[4 path] + #[0 (path value)] } main <- :initWorld mystery { @@ -324,7 +307,4 @@ } } -//does not work: -//someListOrTup get: 0 -//lambdaman program (step function) faulted TagMismatch