#!/usr/bin/env python # coding: utf-8 # # ปัญหา AFBF + CGHB + DAFG +AEAB = BCDC # # สืบเนื่องจากกระทู้พันทิพเรื่องการบ้านเด็กป.4 https://pantip.com/topic/39141834 ที่ถามว่าถ้า A-H เป็นตัวเลขโดดๆไม่ซ้ำกันและ AFBF + CGHB + DAFG +AEAB = BCDC ให้หาค่าว่า A-H มีค่าอะไรบ้าง ถ้าเราไม่อยากคิดด้วยสมองเราเองเราก็อาจสั่งให้คอมพิวเตอร์ไปนั่งไล่ค่าที่เป็นไปได้ของ A,B,C,...,H ดูว่าค่าแบบไหนทำให้สมการเป็นจริงบ้าง มีวิธีอื่นๆที่สามารถทำงานได้เร็วกว่าแต่เด็กๆม.ต้นยังไม่มีพื้นฐานความรู้ของวิธีเหล่านั้น เราจึงใช้วิธีตรงไปตรงมาที่สุดที่พอจะนั่งรอได้ก่อน เด็กๆหัดใช้ list comprehension และ for loop # In[1]: import time def mkn(a,b,c,d): """ เอาตัวเลขโดด a, b, c, d มาทำเป็นจำนวน abcd """ return 1000*a+100*b+10*c+d d = range(0,10) begin = time.time() ans = [(A,B,C,D,E,F,G,H) \ for A in d for B in d for C in d \ for D in d for E in d for F in d \ for G in d for H in d \ if len(set((A,B,C,D,E,F,G,H))) == len((A,B,C,D,E,F,G,H))\ and mkn(A,F,B,F) + mkn(C,G,H,B) + mkn(D,A,F,G) + mkn(A,E,A,B) == mkn(B,C,D,C)] end = time.time() print(f"Done in {end-begin:.1f} seconds") print(f"There are {len(ans)} answers\n") print("Solutions of AFBF + CGHB + DAFG +AEAB = BCDC:\n") for a in ans: (A,B,C,D,E,F,G,H) = a print(f"(A, B, C, D, E, F, G, H) is {a}") print(f"{mkn(A,F,B,F)} + {mkn(C,G,H,B)} + {mkn(D,A,F,G)} + {mkn(A,E,A,B)} = {mkn(B,C,D,C)}") print(f"{mkn(A,F,B,F) + mkn(C,G,H,B) + mkn(D,A,F,G) + mkn(A,E,A,B)} == {mkn(B,C,D,C)}") # In[2]: # โจทย์ AFBF + CGHB + DAFG +AEAB = BCDC # อาจใช้เวลานานหลายนาที import time def mkn(a,b,c,d): """ เอาตัวเลขโดด a, b, c, d มาทำเป็นจำนวน abcd """ return 1000*a+100*b+10*c+d d = range(0,10) ans = [] begin = time.time() for A in range(0,10): for B in range(0,10): for C in range(0,10): for D in range(0,10): for E in range(0,10): for F in range(0,10): for G in range(0,10): for H in range(0,10): if len(set((A,B,C,D,E,F,G,H))) == len((A,B,C,D,E,F,G,H))\ and mkn(A,F,B,F) + mkn(C,G,H,B) + mkn(D,A,F,G) + mkn(A,E,A,B)\ == mkn(B,C,D,C): ans.append((A,B,C,D,E,F,G,H)) end = time.time() print(f"Done in {end-begin:.1f} seconds") print(f"There are {len(ans)} answers\n") print("Solutions of AFBF + CGHB + DAFG +AEAB = BCDC:\n") for a in ans: (A,B,C,D,E,F,G,H) = a print(f"(A, B, C, D, E, F, G, H) is {a}") print(f"{mkn(A,F,B,F)} + {mkn(C,G,H,B)} + {mkn(D,A,F,G)} + {mkn(A,E,A,B)} = {mkn(B,C,D,C)}") print(f"{mkn(A,F,B,F) + mkn(C,G,H,B) + mkn(D,A,F,G) + mkn(A,E,A,B)} == {mkn(B,C,D,C)}") #print()