Files
farmer/sunflower.py

151 lines
2.7 KiB
Python

import utils, solve
def growbase(xl, xr, yl, yr):
def init():
utils.mv(xl, yl)
def fillx(x):
def ret():
for y in range(yl, yr):
utils.mv(x, y)
utils.soil()
utils.replant(Entities.Sunflower)
while utils.meas() != 7:
harvest()
plant(Entities.Sunflower)
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():
pass
return (init, run)
def grow(xl, xr, yl, yr):
def init():
utils.mv(xl, yl)
def fillx(x):
def ret():
for y in range(yl, yr):
utils.mv(x, y)
utils.water()
utils.soil()
utils.replant(Entities.Sunflower)
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():
pos = list()
for i in range(7, 15+1):
pos.append(list())
for x in range(xl, xr):
l, r, d = yl, yr, 1
if x%2 == 1:
l, r, d = yr-1, yl-1, -1
for y in range(l, r, d):
utils.mv(x, y)
pos[measure()-7].append((x, y))
for p in pos[::-1]:
for x, y in p:
utils.mv(x, y)
while not utils.harv():
pass
init()
return (init, run)
def growparallel(xl, xr, yl, yr):
def init():
utils.mv(xl, yl)
def fillx(x):
def ret():
for y in range(yl, yr):
utils.mv(x, y)
utils.water()
utils.soil()
utils.replant(Entities.Sunflower)
return ret
drowns = list()
for x in range(xl, xr-1):
utils.mv(x, get_pos_y())
drown = None
while drown == None:
drown = spawn_drone(fillx(x))
drowns.append(drown)
fillx(xr-1)()
for drown in drowns:
wait_for(drown)
def run():
def harvx(k, x, inv):
def ret():
l, r, d = yl, yr, 1
if inv == True:
l, r, d = yr-1, yl-1, -1
for y in range(l, r, d):
utils.mv(x, y)
if measure() == k:
while not utils.harv():
pass
return ret
for k in range(15, 6, -1):
drowns = list()
l, r, d = xl, xr, 1
if k%2 == 1:
l, r, d = xr-1, xl-1, -1
for x in range(l, r-d, d):
utils.mv(x, get_pos_y())
drown = None
while drown == None:
drown = spawn_drone(harvx(k, x, k%2 == 1))
drowns.append(drown)
harvx(k, r-d, k%2 == 1)()
for drown in drowns:
wait_for(drown)
init()
return (init, run)
def check():
def init():
pass
def run():
if num_items(Items.Power) >= 100000:
return True
return (init, run)
if __name__ == '__main__':
set_world_size(32)
clear()
solve.run([
growparallel(0, 32, 0, 32)
# check(),
])()