def ff(x0, op, fstr, post):
    out = []
    z = [x0]
    for i in range(1,len(x0)):
        x = z[-1]
        x1 = [eval(fstr, {'x': x, 'j':j}) for j in range(len(x)-1)]
        x1 = '[' + ', '.join(x1) + ']'
        x2 = [eval(op, {'x': x, 'j':j}) for j in range(len(x)-1)]
        out.append([x1,x2])
        z.append(x2)
    z = eval(post, {'z':z})
    out.append(z)
    return out

with open('part_c1_template.txt', encoding='utf-8') as f:
    template = f.read()

OPs = [['จำนวนเต็ม', 'บวกกัน', '', 'x[j]+x[j+1]', "f'{x[j]}+{x[j+1]}'", [1,2,3,4]],
       ['จำนวนเต็ม', 'คูณกัน', '', 'x[j]*x[j+1]', "f'{x[j]}*{x[j+1]}'", [1,2,3,4]],
       ['จำนวนเต็ม', 'ลบกัน', '', 'x[j]-x[j+1]', "f'{x[j]}-{x[j+1]}'", [1,2,8,32]],
       ['จำนวนเต็ม', 'หาตัวมาก', '', 'max(x[j],x[j+1])', "f'max({x[j]},{x[j+1]})'",[4,2,3,9]],
       ['จำนวนเต็ม', 'หาตัวน้อย', '', 'min(x[j],x[j+1])', "f'min({x[j]}+{x[j+1]})'",[7,9,8,2]],
       ['สตริง', ' "รวม" กัน', '\n        นิยามการ "รวม" สตริงสองตัวที่ติดกันในลิสต์คือ การนำ\n        ตัวอักษรแรกของตัวซ้าย มาต่อกับ ตัวอักษรสุดท้ายของตัวขวา',
        'x[j][0]+x[j+1][-1]', 'f"\'{x[j][0]}\'+\'{x[j+1][-1]}\'"',["Aa","Bb","Cc","Dd"]],
       ['สตริง', ' "รวม" กัน', '\n        นิยามการ "รวม" สตริงสองตัวที่ติดกันในลิสต์คือ การนำ\n        ตัวอักษรสุดท้ายของตัวซ้าย มาต่อกับ ตัวอักษรแรกของตัวขวา',
        'x[j][-1]+x[j+1][0]', 'f"\'{x[j][-1]}\'+\'{x[j+1][0]}\'"',["Aa","Bb","Cc","Dd"]],
      ]
POSTs = [('[x0, x1, x2, ..., xk]', 'z'),
         ('[xk, ..., x2, x1, x0]', 'z[::-1]'),]
out = '<P>\n'
for dtype, op1, opx, op2, fstr, x0 in OPs:
    for post1,post2 in POSTs:
            xx = ff(x0, op2, fstr, post2)
            t = template
            t = t.replace('$$OP$$', op1)
            t = t.replace('$$OPx$$', opx)
            t = t.replace('$$PATTERN$$', post1)
            t = t.replace('$$DTYPE$$', dtype)
            t = t.replace('$$X0$$', str(x0))
            t = t.replace('$$X11$$', str(xx[0][0]))
            t = t.replace('$$X12$$', str(xx[0][1]))
            t = t.replace('$$X21$$', str(xx[1][0]))
            t = t.replace('$$X22$$', str(xx[1][1]))
            t = t.replace('$$X31$$', str(xx[2][0]))
            t = t.replace('$$X32$$', str(xx[2][1]))
            t = t.replace('$$XX$$', post1)            
            t = t.replace('$$RESULT$$', str(xx[-1]))
            out += t

out += '</P>'

with open('part_c1.txt', 'w', encoding='utf-8') as f:
    f.write(out)


