view src/driver.tp @ 56:f864792a1b17

Improve prefiltering in program generator. Make solver use similar logic to driver when run standalone.
author Mike Pavone <pavone@retrodev.com>
date Sun, 11 Aug 2013 14:11:47 -0700
parents e634e81c4c84
children
line wrap: on
line source

#{
	main <- :args {
		if: (args length) > 1 {
			numops <- int32: (args get: 1)


			file <- os open: "data/myproblems.json" (os O_RDONLY)
			fstr <- (os read: file 400 * 1024)  // file was 276k before bonus problems...
			os close: file

			probs <- requests problems: fstr

			filtered <- #[]
			foreach: probs :idx el {
				if: (not: (el solved)) && (el size) = numops && (el timeLeft) > 0 {
					filtered append: el
				}
			}
			numtests <- #[16 32 64 128 256 256]
			if: (args length) > 2 {
				prog <- bv program
				authKey <- args get: 2
				if: numops < 10 {
					//nt <- numtests get: (numops - 3)
					nt <- 32
					trees <- (prog allOfSize: numops)
					foreach: filtered :idx el {
						probtrees <- prog filterTrees: trees (el operators)
						info <- solver classify: prog probtrees nt
						solver solve: (el id) withAuth: authKey andInfo: info andProg: prog
					}
				} else: {
					nt <- 24
					foreach: filtered :idx el {
						print: "Generating programs for operators: " . ((el operators) fold: "" with: :acc el { acc . el }) . "\n"
						probtrees <- prog allOfSize: numops withOps: (el operators)
						print: "Generated " . (string: (probtrees length)) . " programs\n"
						probtrees <- prog filterTrees: probtrees (el operators)
						print: "Running classifier on " . (string: (probtrees length)) . " programs\n"
						info <- solver classify: prog probtrees nt
						solver solve: (el id) withAuth: authKey andInfo: info andProg: prog
					}
				}
			} else: {
				foreach: filtered :idx el {
					print: el
				}
			}
			0
		}
	}
}