/* Test of char_count, i.e. the number of characters in a string representation of a number. 1 4 3 11 15 18 (number) one four three eleven fifteen eighteen (word) 3 4 5 6 7 8 (chars) I would expect 2+char_count(A) Here is the traditional point sequence index -> number data = [[[1],1], [[2],4], [[3],3], [[4],11], [[5],15], [[6],18]] But this is wrong representation! It should be the other way around -> number to index [[[1],1], [[4],2], [[3],3], [[11],4], [[15],5], [[18],6]], Now it finds the expected: [program = char_count(A) - 2,res = 1,count = 14] [program = char_count(A) - 1 - 1,res = 1,count = 8] [program = char_count(A) - (1 + 1),res = 1,count = 8] [program = char_count(A) + (1 - char_count(1)),res = 1,count = 8] [program = char_count(A) - (2 - (2 - 2)),res = 1,count = 7] [program = A - A + (char_count(A) - 2),res = 1,count = 6] [program = 2 + char_count(A) - 1 - (2 + 1),res = 1,count = 4] [program = A - 2 - A + char_count(A),res = 1,count = 2] [program = char_count(1) - (2 + 2) + (char_count(A) - 1),res = 1,count = 2] [program = char_count(A) + (A - A - 2),res = 1,count = 2] [program = char_count(A) - 2 + (A - A),res = 1,count = 1] Let's test it with some other values: * 17 [program = char_count(A) - 2,res = 7,count = 17] * 10001 [program = char_count(A) - 2,res = 15,count = 18] Picat> english(10001).len=X X = 17 * 12345678980 [program = char_count(A) - 2,res = 15 Picat> english(12345678980).len=X X = 97 Cf: Using english/1 from euler17: Picat> cl(euler17) Picat> X=[ [english(I).len, I, english(I)] : I in 1..20].sort X = [[3,1,[o,n,e]],[3,2,[t,w,o]],[3,6,[s,i,x]],[3,10,[t,e,n]],[4,4,[f,o,u,r]],[4,5,[f,i,v,e]],[4,9,[n,i,n,e]],[5,3,[t,h,r,e,e]],[5,7,[s,e,v,e,n]],[5,8,[e,i,g,h,t]],[6,11,[e,l,e,v,e,n]],[6,12,[t,w,e,l,v,e]],[6,20,[t,w,e,n,t,y]],[7,15,[f,i,f,t,e,e,n]],[7,16,[s,i,x,t,e,e,n]],[8,13,[t,h,i,r,t,e,e,n]],[8,14,[f,o,u,r,t,e,e,n]],[8,18,[e,i,g,h,t,e,e,n]],[8,19,[n,i,n,e,t,e,e,n]],[9,17,[s,e,v,e,n,t,e,e,n]]] */ data(rec_puzzle_problem1,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [[[1],1],[[4],2],[[3],3],[[11],4],[[15],5],[[18],6]], % reversed % Seq = [1,4,3,11,15,18], % make_point_seq(Seq,Data,Unknown,Vars), % make_seq(Seq,1,Data,Unknown,Vars), % make_seq(Seq,2,Data,Unknown,Vars), % make_seq(Seq,3,Data,Unknown,Vars), % Ops = [+,*,mod,-,/,pow_mod2,if_then_else,!=,==,even,odd,char_count], Ops = [+,-,char_count], Unknown = [10001], Vars = ['A'], Constants = 1..2, MaxSize = 7, Params = new_map([debug=false]).