/* Number of moves for a leap frog puzzle. See leap_frog_puzzle.pi For N = 1..15 (go2/0) this program gives these counts (lengths): counts=[3,8,15,24,35,48,63,80,99,120,143,168,195,224,255] It's http://oeis.org/A005563 """ A005563 n*(n+2) (or, (n+1)^2-1) .... This is also the number of moves that it takes n frogs to swap places with n toads on a strip of 2n+1 squares (or positions, or lilypads) where a move is a single slide or jump, """ * Point sequence [program = A * (2 + A),res = 120,count = 14] [program = A * (A + 2),res = 120,count = 10] [program = (2 + A) * A,res = 120,count = 9] [program = 1 * (2 + A) * A,res = 120,count = 9] [program = 1 * A * (A + 2),res = 120,count = 9] [program = A * 1 * (1 + 1 + A),res = 120,count = 7] [program = 1 * ((A + 2) * A),res = 120,count = 7] [program = (1 + (A + 1)) * A,res = 120,count = 5] [program = A * (2 + A) * 1,res = 120,count = 5] [program = A * (1 * A + 2),res = 120,count = 5] [program = A * A + (A + A),res = 120,count = 4] [program = A + (1 + A) * A,res = 120,count = 4] [program = (2 + A) * 1 * A,res = 120,count = 4] [program = (A + 2) * A * 1,res = 120,count = 3] [program = A * (A + 2) * 1,res = 120,count = 3] [program = A * 1 * (1 * (2 + A)),res = 120,count = 3] [program = A + (A + A * A),res = 120,count = 2] [program = (2 + A * 1) * A,res = 120,count = 2] [program = (A + 2) * A * (1 + (A - A)),res = 120,count = 2] [program = 1 * A * (1 * (2 + A)),res = 120,count = 2] [program = A * (2 * 1 + A),res = 120,count = 2] [program = 2 - 2 - (A - A) + A * (A + 2),res = 120,count = 1] [program = A + (A - A) + 1 * A * (1 + A),res = 120,count = 1] [program = A + A * A + A,res = 120,count = 1] [program = (2 - 1) * A + 1 * A * (1 + A),res = 120,count = 1] [program = (1 - 1) * 2 + (A + 2) * A,res = 120,count = 1] [program = (A + 2) * A + (A - A),res = 120,count = 1] [program = (A + 2) * A + (A - A) * 1,res = 120,count = 1] [program = (A + 1) * A + A,res = 120,count = 1] [program = 1 * A * 2 + A * A,res = 120,count = 1] [program = A * (A - 2) + 2 * (A + A),res = 120,count = 1] [program = A * A + A * (1 * 2),res = 120,count = 1] [program = 2 * (A * 1) + A * A,res = 120,count = 1] [program = A + (A * A + A),res = 120,count = 1] [program = A + A * (A + 1),res = 120,count = 1] [program = (A - (A - A)) * (2 * 1 + A),res = 120,count = 1] [program = (A - (A - A)) * (1 * A + 2),res = 120,count = 1] [program = (1 + A + (2 - 1)) * A,res = 120,count = 1] [program = (2 * 1 + A) * A,res = 120,count = 1] [program = (1 * A + 2) * A,res = 120,count = 1] [program = (A + 2) * A,res = 120,count = 1] [program = (2 + A) * 1 * (A - (A - A)),res = 120,count = 1] [program = A * (A + 1 + 1),res = 120,count = 1] resultMap = [120 = 43] * Recursive sequence, order 2 [program = 2 + 2 * B - A,res = 120,count = 9] [program = B - A + (1 + B) + 1,res = 120,count = 9] [program = 2 * 1 + (B + B - A),res = 120,count = 8] [program = 1 + B + B + (1 - A * 1),res = 120,count = 7] [program = 2 - A + (B + B),res = 120,count = 4] [program = B - A + (1 + B) + (2 - 1),res = 120,count = 4] [program = 2 * (1 + B) - A,res = 120,count = 2] [program = 1 + (B - A + (1 + B)),res = 120,count = 1] resultMap = [120 = 8] */ data(leap_frog_puzzle,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Seq = [3,8,15,24,35,48,63,80,99], % ,120,143,168,195,224,255], ( % println("point_seq:"), % make_point_seq(Seq,Data,Unknown,Vars) % ; println("seq:"), make_seq(Seq,2,Data,Unknown,Vars) ), Ops = [+,-,*], Constants = 1..2, MaxSize = 5, Params = new_map().