| 1 | function lazyRobot({place, parcels}, route) { |
| 2 | if (route.length == 0) { |
| 3 | // Describe a route for every parcel |
| 4 | let routes = parcels.map(parcel => { |
| 5 | if (parcel.place != place) { |
| 6 | return {route: findRoute(roadGraph, place, parcel.place), |
| 7 | pickUp: true}; |
| 8 | } else { |
| 9 | return {route: findRoute(roadGraph, place, parcel.address), |
| 10 | pickUp: false}; |
| 11 | } |
| 12 | }); |
| 13 | |
| 14 | // This determines the precedence a route gets when choosing. |
| 15 | // Route length counts negatively, routes that pick up a package |
| 16 | // get a small bonus. |
| 17 | function score({route, pickUp}) { |
| 18 | return (pickUp ? 0.5 : 0) - route.length; |
| 19 | } |
| 20 | route = routes.reduce((a, b) => score(a) > score(b) ? a : b).route; |
| 21 | } |
| 22 | |
| 23 | return {direction: route[0], memory: route.slice(1)}; |
| 24 | } |
| 25 | |
| 26 | runRobotAnimation(VillageState.random(), lazyRobot, []); |