package net.ciklum.icfpc11.plan import net.ciklum.icfpc11.domain.Card /** * blabla * @author vic */ @Typed final class ConstantCommandPlanner { /** * Get a Card to reach target constant from a given constant. * FIXME: Duplicates FunctionTreeBuilder.n() somewhat * @param target * @param slot * @param current * @return null if target can't be obtained from current value */ Card nextCardToObtainConstant(int target, int current) { if (target == current) return null List path = ConstantPlanner.instance.findPath(target) int index = path.findIndexOf { ConstantPlanner.Constant it -> it.value == current } if (index < 0) return null // no way to reach that constant switch (path[index+1].obtainedBy) { case ConstantPlanner.Operation.DBL: return Card.dbl case ConstantPlanner.Operation.SUCC: return Card.succ default: throw new RuntimeException('unexpected constant operation') } } // FIXME: TEST ME int stepsToReach(int target, int current) { List path = ConstantPlanner.instance.findPath(target) int index = path.findIndexOf { ConstantPlanner.Constant it -> it.value == current } if (index < 0) return path.size() + 1 return path.size() - index } }