package net.ciklum.icfpc11.controller.ai import net.ciklum.icfpc11.parser.Command import static net.ciklum.icfpc11.domain.Card.* import static net.ciklum.icfpc11.parser.Application.LEFT import static net.ciklum.icfpc11.parser.Application.RIGHT /** * blabla * @author vic */ @Typed class StaticStrategy implements Strategy { private final List commands private int index StaticStrategy(List commands) { this.commands = commands this.index = 0 } Command getNextCommand() { commands.get(index++) } boolean isComplete() { index >= commands.size() } public static final List COMMANDO42 = [ // 10moves prepare attack in 2 new Command(RIGHT, 2, zero), // 0 new Command(LEFT, 2, attack),// attack(0) new Command(LEFT, 2, K), // K(attack(0)) new Command(LEFT, 2, S), // S(K(attack(0))) new Command(RIGHT, 2, get), // S(K(attack(0)), get) // 11moves to help in 4 new Command(RIGHT, 4, zero), // 0 new Command(LEFT, 4, succ), // 1 new Command(LEFT, 4, help), // help(1) new Command(RIGHT, 4, zero), // help(1,0) new Command(LEFT, 4, K), // K(help(1,0)) new Command(LEFT, 4, S), // S(K(help(1,0))) new Command(RIGHT, 4, get), // S(K(help(1,0)), get) // 16moves = 255 in 0th new Command(RIGHT, 0, zero), // 0 new Command(LEFT, 0, succ),// 1 new Command(LEFT, 0, dbl), // 2 new Command(LEFT, 0, succ),// 3 new Command(LEFT, 0, dbl), // 6 new Command(LEFT, 0, succ),// 7 new Command(LEFT, 0, dbl), // 14 new Command(LEFT, 0, succ),// 15 new Command(LEFT, 0, dbl), // 30 new Command(LEFT, 0, succ),// 31 new Command(LEFT, 0, dbl), // 62 new Command(LEFT, 0, succ),// 63 new Command(LEFT, 0, dbl), // 126 new Command(LEFT, 0, succ),// 127 new Command(LEFT, 0, dbl), // 254 new Command(LEFT, 0, succ),// 255 // completing attack() in 2 new Command(RIGHT, 2, zero), // attack(0, 255) new Command(LEFT, 2, K), // K(attack(0,255)) new Command(LEFT, 2, S), // S(K(attack(0,255))) new Command(RIGHT, 2, get), // S(K(attack(0,255)), get) // copy 255 to 1st new Command(RIGHT, 1, zero), // 0 new Command(LEFT, 1, get), // 255 // 5moves to ~8000 in 0 new Command(LEFT, 0, dbl), // 510 new Command(LEFT, 0, dbl), // 1020 new Command(LEFT, 0, dbl), // 2040 new Command(LEFT, 0, dbl), // 4080 new Command(LEFT, 0, dbl), // 8160 // execute help new Command(RIGHT, 4, zero), // I (effect: help(1,0,8160)) // copy 8000 to 4th new Command(RIGHT, 4, zero), // zero new Command(LEFT, 4, get), // 8160 // 16000 in 0th new Command(LEFT, 0, dbl), // 16320 // THIS IS SPARTA!!! execute attack new Command(RIGHT, 2, zero), // I (effect: attack(0,255,16320)) // copy 255 to 0th new Command(LEFT, 0, put), // I -> f[0] new Command(RIGHT, 0, zero), // 0 new Command(LEFT, 0, succ), // 1 new Command(LEFT, 0, get), // 255 (from 1st cell) ] // old 45-turn rusher not used now public static final List COMMANDO45 = [ // 16moves = 255 in 0th new Command(RIGHT, 0, zero), // 0 new Command(LEFT, 0, succ),// 1 new Command(LEFT, 0, dbl), // 2 new Command(LEFT, 0, succ),// 3 new Command(LEFT, 0, dbl), // 6 new Command(LEFT, 0, succ),// 7 new Command(LEFT, 0, dbl), // 14 new Command(LEFT, 0, succ),// 15 new Command(LEFT, 0, dbl), // 30 new Command(LEFT, 0, succ),// 31 new Command(LEFT, 0, dbl), // 62 new Command(LEFT, 0, succ),// 63 new Command(LEFT, 0, dbl), // 126 new Command(LEFT, 0, succ),// 127 new Command(LEFT, 0, dbl), // 254 new Command(LEFT, 0, succ),// 255 // 10moves prepare attack in 177 new Command(RIGHT, 177, zero), // 0 new Command(LEFT, 177, succ), // 1 new Command(LEFT, 177, attack),// attack(1) new Command(LEFT, 177, K), // K(attack(1)) new Command(LEFT, 177, S), // S(K(attack(1))) new Command(RIGHT, 177, get), // S(K(attack(1)), get) new Command(RIGHT, 177, zero), // attack(1, 255) new Command(LEFT, 177, K), // K(attack(1,255)) new Command(LEFT, 177, S), // S(K(attack(1,255))) new Command(RIGHT, 177, get), // S(K(attack(1,255)), get) // 11moves to help in 211 new Command(RIGHT, 211, zero), // 0 new Command(LEFT, 211, succ), // 1 new Command(LEFT, 211, succ), // 2 new Command(LEFT, 211, help), // help(2) new Command(LEFT, 211, K), // K(help(2)) new Command(LEFT, 211, S), // S(K(help(2))) new Command(RIGHT, 211, succ), // S(K(help(2)), succ) new Command(RIGHT, 211, zero), // help(2, 1) new Command(LEFT, 211, K), // K(help(2,1)) new Command(LEFT, 211, S), // S(K(help(2,1))) new Command(RIGHT, 211, get), // S(K(help(2,1)), get) // copy 255 to 1st new Command(RIGHT, 1, zero), // 0 new Command(LEFT, 1, get), // 255 // 5moves to ~8000 in 0 new Command(LEFT, 0, dbl), // 510 new Command(LEFT, 0, dbl), // 1020 new Command(LEFT, 0, dbl), // 2040 new Command(LEFT, 0, dbl), // 4080 new Command(LEFT, 0, dbl), // 8160 // execute help new Command(RIGHT, 211, zero), // I (effect: help(2,1,8160)) // 16000 in 0th new Command(LEFT, 0, dbl), // 16320 // THIS IS SPARTA!!! execute attack new Command(RIGHT, 177, zero), // I (effect: attack(1,255,16320)) // copy 255 to 0th new Command(LEFT, 0, put), // I -> f[0] new Command(RIGHT, 0, zero), // 0 new Command(LEFT, 0, succ), // 1 new Command(LEFT, 0, get), // 255 (from 1st cell) new Command(LEFT, 1, dec), // dec the 0th (255-255) cell // loop new Command(RIGHT, 77, zero), // 0 new Command(LEFT, 77, get), // 255 (from oth cell) new Command(LEFT, 77, dec) // dec the 0th (255-255) cell ] }