import utils, solve def grow(xl, xr, yl, yr): def init(): def fillx(x): def ret(): for y in range(yl, yr): utils.mv(x, y) utils.soil() utils.water() utils.replant(Entities.Cactus) return ret drowns = list() for x in range(xl+1, xr): drown = None while drown == None: drown = spawn_drone(fillx(x)) drowns.append(drown) fillx(xl)() for drown in drowns: wait_for(drown) def run(): def sortx(x): def ret(): l, r = yl, yr-1 while l < r: for i in range(l, r): utils.mv(x, i) cur, nxt = utils.meas(), utils.meas(North) if nxt < cur: swap(North) r -= 1 for i in range(r, l, -1): utils.mv(x, i) cur, nxt = utils.meas(), utils.meas(South) if nxt > cur: swap(South) l += 1 return ret drowns = list() for x in range(xl+1, xr): drown = None while drown == None: drown = spawn_drone(sortx(x)) drowns.append(drown) sortx(xl)() for drown in drowns: wait_for(drown) def sorty(y): def ret(): l, r = xl, xr-1 while l < r: for i in range(l, r): utils.mv(i, y) cur, nxt = utils.meas(), utils.meas(East) if nxt < cur: swap(East) r -= 1 for i in range(r, l, -1): utils.mv(i, y) cur, nxt = utils.meas(), utils.meas(West) if nxt > cur: swap(West) l += 1 return ret drowns = list() for y in range(yl+1, yr): drown = None while drown == None: drown = spawn_drone(sorty(y)) drowns.append(drown) sorty(yl)() for drown in drowns: wait_for(drown) utils.harv() init() return (init, run) def check(): def init(): pass def run(): if num_items(Items.Cactus) >= 33554432: return True return (init, run) if __name__ == '__main__': set_world_size(32) clear() solve.run([ grow.cactus(0, 32, 0, 32), check(), ])()