INDIA + CHINA = JAPAN

เห็นมีคนโพสท์ถามกันใน FB ว่า INDIA + CHINA = JAPAN โดยที่ตัวอักษรอังกฤษแต่ละตัวแทนเลขโดด อักษรต่างกันแทนเลขต่างกัน

ผมก็เขียนด้วยภาษาวุลแฟรมแก้ปัญหานี้แบบง่ายๆได้ตามนี้ครับ

num = Range[0, 9];
bigls = Permutations[num, {8}];
outls = Reap[
 (Clear[i, n, d, a, c, h, j, p];
 {i, n, d, a, c, h, j, p} = #;
 If[
 FromDigits@{i, n, d, i, a} + FromDigits@{c, h, i, n, a} == 
 FromDigits@{j, a, p, a, n}
 , Sow[#]]) & /@ bigls][[2, 1]];

โดยคำตอบที่ได้คือ

((#1 -> #2 & @@@ ({{i, n, d, a, c, h, j, p}, #}\[Transpose]))&/@
 outls) 

{{i -> 6, n -> 8, d -> 3, a -> 4, c -> 2, h -> 5, j -> 9, p -> 0}, {i -> 8, n -> 4, d -> 6, a -> 2, c -> 0, h -> 7, j -> 9, p -> 5}}

หรือ

{"INDIA = " <> ToString@FromDigits@({i, n, d, i, a} /. #), 
 "CHINA = " <> ToString@(FromDigits@({c, h, i, n, a}) /. #), 
 "JAPAN = " <> 
 ToString@(FromDigits@({j, a, p, a, 
 n}) /. #)} & /@ ((#1 -> #2 & @@@ ({{i, n, d, a, c, h, j, 
 p}, #}\[Transpose])) & /@ outls)

{{"INDIA = 68364", "CHINA = 25684", 
 "JAPAN = 94048"}, {"INDIA = 84682", "CHINA = 7842", 
 "JAPAN = 92524"}}

วิธีการก็เพียงสร้างลิสของตัวเลข 8 ตัวตามจำนวนอักษรที่เป็นไปได้ทั้งหมด แล้วก็หาดูว่าชุดไหนที่มันตรงตามเงื่อนไข