changeset 25:ec0b74f4f2d9

Merge
author William Morgan <billjunk@mrgn.org>
date Fri, 25 Jul 2014 22:52:52 -0700
parents 37158acf31e5 (current diff) 5ded24518dc5 (diff)
children 4f7a421e77c6
files code/dotScanner.lm
diffstat 3 files changed, 296 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/code/dotScanner.lm	Fri Jul 25 22:52:05 2014 -0700
+++ b/code/dotScanner.lm	Fri Jul 25 22:52:52 2014 -0700
@@ -1,4 +1,183 @@
 #{
+	length <- :lst {
+		len <- []
+		while: { not: (lst isInteger?)} do: {
+			lst <- lst tail
+			len <- len + 1
+		}
+		len
+	}
+	
+	reverse <- :lst {
+		new <- []
+		while: { not: (lst isInteger?)} do: {
+			new <- (lst value) | new
+			lst <- lst tail
+		}
+		new
+	}
+
+	split:at <- :lst :pos {
+		first <- []
+		i <- 0
+		while: { i < pos } do: {
+			first <- (lst value) | first
+			lst <- lst tail
+			i <- i + 1
+		}
+		#[(reverse: first) lst]
+	}
+	
+	map <- :lst fun {
+		new <- []
+		while: { not: (lst isInteger?) } do: {
+			new <- (fun: (lst value)) | new
+			lst <- lst tail
+		}
+		reverse: new
+	}
+	
+	fold:with <- :lst acc :fun {
+		while: { not: (lst isInteger?) } do: {
+			acc <- fun: acc (lst value)
+			lst <- lst tail
+		}
+		acc
+	}
+	
+	filter <- :lst pred {
+		new <- []
+		while: { not: (lst isInteger?) } do: {
+			if: (pred: (lst value)) {
+				new <- (lst value) | new
+			} else: {}
+			lst <- lst tail
+		}
+		reverse: new
+	}
+	
+	makeTree:size <- :lst :size {
+		ret <- 0
+		sub <- 0
+		half <- size / 2
+		if: size = 2 {
+			ret <- #[(lst value) ((lst tail) value)]
+		} else: {
+			if: size = 1 {
+				ret <- lst
+			} else: {
+				sub <- split: lst at: half
+				ret <- #[
+					(makeTree: (sub value) size: half)
+					(makeTree: (sub tail) size: size-half)
+				]
+			}
+		}
+		ret
+	}
+	
+	makeTree <- :lst {
+		size <- lst length
+		#[size (makeTree: lst size: size)]
+	}
+	
+	get:fromTree:size <- :idx :tree :size {
+		print: #[1 tree size]
+		ret <- 0
+		half <- size / 2
+		if: size <= 2 {
+			if: idx = 0 {
+				ret <- tree value
+			} else: {	
+				ret <- tree tail
+			}
+		} else: {
+			if: idx < half {
+				ret <- get: idx fromTree: (tree value) size: half
+			} else: {
+				ret <- get: idx-half fromTree: (tree tail) size: size-half
+			}
+		}
+		ret
+	}
+	
+	get:fromTree <- :idx :tree {
+		size <- tree value
+		print: #[0 size]
+		get: idx fromTree: (tree tail) size: size
+	}
+	
+	treeMap:size <- :tree fun :size {
+		ret <- 0
+		half <- size / 2
+		if: size = 2 {
+			ret <- #[(fun: (tree value)) (fun: (tree tail))]
+		} else: {
+			if: size = 1 {
+				ret <- #[(fun: (tree value)) 0]
+			} else: {
+				ret <- #[
+					(treeMap: (tree value) fun size: half)
+					(treeMap: (tree tail) fun size: size-half)
+				]
+			}
+		}
+		ret
+	}
+	
+	treeMap <- :tree fun {	
+		#[(tree value) (treeMap: (tree tail) fun size: (tree value))]
+	}
+	
+	tree:size:update:with <- :tree :size :idx :fun {
+		ret <- 0
+		half <- size / 2
+		if: size = 2 {
+			if: idx = 0 {
+				ret <- #[(fun: (tree value)) (tree tail)]
+			} else: {
+				ret <- #[(tree value) (fun: (tree tail))]
+			}
+		} else: {
+			if: size = 1 {
+				ret <- #[(fun: (tree value)) 0]
+			} else: {
+				if: (idx < half) {
+					ret <- #[
+						(tree: (tree value) size: half update: idx with: fun)
+						(tree tail)
+					]
+				} else: {
+					ret <- #[
+						(tree value)
+						(tree: (tree tail) size: size-half update: idx-half with: fun)
+					]
+				}
+			}
+		}
+		ret
+	}
+	
+	tree:update:with <- :tree :idx :fun {
+		#[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)]
+	}
+	
+	tree:set:to <- :tree :idx :val {
+		tree: tree update: idx with: :el { val }
+	}
+	
+	grid:update:with <- :grid :pos :fun {
+		x <- pos value
+		y <- pos tail
+		tree: grid update: y with: :row {
+			tree: row update: x with: fun
+		}
+	}
+	
+	grid:set:to <- :grid :pos :val {
+		grid: grid update: pox with: :el { val }
+	}
+	
     /*
 	ListGet <- :cell idx {
 		if: idx = 0 {cell value} else: {
@@ -56,7 +235,16 @@
 	//}
 	counterLoad <- 4
 	step <- :myState world {
-		print: (world value)
+		grid <- makeTree: (map: (world value) :row { makeTree: row })
+		lmState <- (world value) tail
+		myLoc <- (lmState tail) value
+		
+		
+		visited <- treeMap: grid :el { 0 }
+		visited <- tree: visited set: myLoc to: 1
+		
+		
+		
 		//myPos <- 
 		path <- [3 1 3 1] //scanFor: 2 3 [myPos]
 		move <- myState value
@@ -68,11 +256,11 @@
 				move <- 0
 			} else: {}
 		} else: {}
-		#[#[move counter] ((path tail) value)]
+		#[0 ((path tail) value)]
 	}
 	
 	main <- :initWorld mystery {
-		#[#[0 counterLoad] step]
+		#[0 step]
 	}
 }
 
--- a/code/mike00.lm	Fri Jul 25 22:52:05 2014 -0700
+++ b/code/mike00.lm	Fri Jul 25 22:52:52 2014 -0700
@@ -37,7 +37,26 @@
 		reverse: new
 	}
 	
-	makeTree <- :lst size {
+	fold:with <- :lst acc :fun {
+		while: { not: (lst isInteger?) } do: {
+			acc <- fun: acc (lst value)
+			lst <- lst tail
+		}
+		acc
+	}
+	
+	filter <- :lst pred {
+		new <- []
+		while: { not: (lst isInteger?) } do: {
+			if: (pred: (lst value)) {
+				new <- (lst value) | new
+			} else: {}
+			lst <- lst tail
+		}
+		reverse: new
+	}
+	
+	makeTree:size <- :lst :size {
 		ret <- 0
 		sub <- 0
 		half <- size / 2
@@ -49,15 +68,21 @@
 			} else: {
 				sub <- split: lst at: half
 				ret <- #[
-					(makeTree: (sub value) half)
-					(makeTree: (sub tail) size-half)
+					(makeTree: (sub value) size: half)
+					(makeTree: (sub tail) size: size-half)
 				]
 			}
 		}
 		ret
 	}
 	
+	makeTree <- :lst {
+		size <- lst length
+		#[size (makeTree: lst size: size)]
+	}
+	
 	get:fromTree:size <- :idx :tree :size {
+		print: #[1 tree size]
 		ret <- 0
 		half <- size / 2
 		if: size <= 2 {
@@ -76,6 +101,71 @@
 		ret
 	}
 	
+	get:fromTree <- :idx :tree {
+		size <- tree value
+		print: #[0 size]
+		get: idx fromTree: (tree tail) size: size
+	}
+	
+	treeMap:size <- :tree fun :size {
+		ret <- 0
+		half <- size / 2
+		if: size = 2 {
+			ret <- #[(fun: (tree value)) (fun: (tree tail))]
+		} else: {
+			if: size = 1 {
+				ret <- #[(fun: (tree value)) 0]
+			} else: {
+				ret <- #[
+					(treeMap: (tree value) fun size: half)
+					(treeMap: (tree tail) fun size: size-half)
+				]
+			}
+		}
+		ret
+	}
+	
+	treeMap <- :tree fun {	
+		#[(tree value) (treeMap: (tree tail) fun size: (tree value))]
+	}
+	
+	tree:size:update:with <- :tree :size :idx :fun {
+		ret <- 0
+		half <- size / 2
+		if: size = 2 {
+			if: idx = 0 {
+				ret <- #[(fun: (tree value)) (tree tail)]
+			} else: {
+				ret <- #[(tree value) (fun: (tree tail))]
+			}
+		} else: {
+			if: size = 1 {
+				ret <- #[(fun: (tree value)) 0]
+			} else: {
+				if: (idx < half) {
+					ret <- #[
+						(tree: (tree value) size: half update: idx with: fun)
+						(tree tail)
+					]
+				} else: {
+					ret <- #[
+						(tree value)
+						(tree: (tree tail) size: size-half update: idx-half with: fun)
+					]
+				}
+			}
+		}
+		ret
+	}
+	
+	tree:update:with <- :tree :idx :fun {
+		#[(tree value) (tree: (tree tail) size: (tree value) update: idx with: fun)]
+	}
+	
+	tree:set:to <- :tree :idx :val {
+		tree: tree update: idx with: :el { val }
+	}
+	
 	height <- 0
 	width <- 0
 	
@@ -89,8 +179,18 @@
 		print: (length: lst)
 		print: (map: lst :el { el + 1 })
 		print: (split: lst at: (length: lst) / 2)
-		tree <- makeTree: lst (length: lst)
+		tree <- makeTree: lst
 		print: tree
+		print: (get: 0 fromTree: tree)
+		print: (get: 6 fromTree: tree)
+		print: (get: 8 fromTree: tree)
+		print: (treeMap: tree :el { el + 1 })
+		print: (tree: tree set: 0 to: 42)
+		print: (tree: tree set: 6 to: 42)
+		print: (tree: tree set: 8 to: 42)
+		print: (fold: lst 0 with: :acc el { acc + el })
+		print: (filter: lst :el { el > 4 })
+		print: (tree: tree update: 8 with: :el { el + 29 })
 	}
 	
 }
\ No newline at end of file
--- a/code/simple.lm	Fri Jul 25 22:52:05 2014 -0700
+++ b/code/simple.lm	Fri Jul 25 22:52:52 2014 -0700
@@ -14,6 +14,7 @@
 	}
 	
 	main <- :initWorld mystery {
+		print: mystery
 		#[#[0 counterLoad] step]
 	}
 }
\ No newline at end of file