machine/synthesize/moving-av.rkt
#lang racket

(require "cegis.rkt" "state.rkt")

;; (fastest-program "@p a! @p nop 0    12    b! @b !+ nop a push @p nop 0    a! @p @+ nop 0    + @+ nop + @+ nop + nop @+ nop + nop 2/ 2/ @p nop 14    b! !b pop nop a! @p b! nop 12    @b !+ a nop push @p a! @p 0    0    @+ nop + nop @+ nop + nop @+ nop + nop @+ nop + nop 2/ 2/ @p nop 14    b! !b pop nop a! nop nop nop"
;;    #:init "dup or dup dup a! @+ nop + @+ nop + nop @+ nop + nop @+ nop + nop over a! nop nop"
;;    #:slots "@ - 1 nop + nop + 12 b! @b dup nop !+ a 3 nop and a! nop + dup 2/ 2/ 14 b! !b nop nop"
;;    #:repeat 2 #:constraint (constraint r) #:inst-pool `no-fake #:num-bits 4
;;    #:mem 4 #:comm 2 #:time-limit 1000
;;    #:name "check")

(fastest-program "@p a! @p nop 0    12    b! @b !+ nop a push @p nop 0    a! @p @+ nop 0    + @+ nop + @+ nop + nop @+ nop + nop 2/ 2/ @p nop 14    b! !b pop nop a! @p b! nop 12    @b !+ a nop push @p a! @p 0    0    @+ nop + nop @+ nop + nop @+ nop + nop @+ nop + nop 2/ 2/ @p nop 14    b! !b pop nop a! nop nop nop" 
   #:init "dup or dup dup a! @+ nop + @+ nop + nop @+ nop + nop @+ nop + _ _ _ _ _"
   #:slots "_ _ _ _
_ _ _ 12 
b! @b _ _ 
_ _ _ _ 
_ _ _ _ 
dup 2/ 2/ 14 
b! !b _ _"
   #:repeat 2 #:constraint constraint-none #:inst-pool `no-fake #:num-bits 4 
   #:mem 4 #:comm 2 #:time-limit 1000
   #:name "2exp")


;;    #:init "dup or dup dup a! @+ nop + @+ nop + nop @+ nop + nop @+ nop + nop over a! nop nop"
;;    #:slots "@ - 1 nop
;; + nop + 12
;; b! @b dup nop
;; !+ a 3 nop
;; and a! nop +
;; dup 2/ 2/ 14
;; b! !b nop nop"