책보다가 나온 흔한 인공지능 문제 중 노가다 알고리즘 일반버전 만들고 떡실신 ㅋ
늬들이 두려워하는 재귀가 있다 ㅋㅋㅋㅋ
%
% D O N A L D
% + G E R A L D
% -------------
% R O B E R T
%
assign(_, []).
assign(Digs, [D | Vars]) :-
select(D, Digs, Digs1),
assign(Digs1, Vars).
compute_crypt([], 0).
compute_crypt([FirstVar | RestVars], Answer) :-
length(RestVars, Len),
compute_crypt(RestVars, Answer1),
Answer is FirstVar * 10 ** Len + Answer1.
uniq_list(Appended, Uniq) :-
sort(Appended, Uniq).
cryptarithmatic(Vars, ExpVars1, ExpVars2, ResultVars) :-
assign([0,1,2,3,4,5,6,7,8,9], Vars),
compute_crypt(ExpVars1, Exp1),
compute_crypt(ExpVars2, Exp2),
compute_crypt(ResultVars, Result),
Exp1 + Exp2 =:= Result.
?- L1=[D, O, N, A, L, D], L2 = [G, E, R, A, L, D], L3 = [R, O, B, E, R, T], append([L1, L2, L3], Appended), uniq_list(Appended, Uniq), cryptarithmatic(Uniq, L1, L2, L3).
L1 = [5, 2, 6, 4, 8, 5],
D = 5,
O = 2,
N = 6,
A = 4,
L = 8,
L2 = [1, 9, 7, 4, 8, 5],
G = 1,
E = 9,
R = 7,
L3 = [7, 2, 3, 9, 7, 0],
B = 3,
T = 0,
Appended = [5, 2, 6, 4, 8, 5, 1, 9, 7|...],
Uniq = [5, 2, 6, 4, 8, 1, 9, 7, 3|...]
?- L1=[S, E, N, D], L2 = [M, O, R, E], L3 = [M, O, N, E, Y], append([L1, L2, L3], Appended), uniq_list(Appended, Uniq), cryptarithmatic(Uniq, L1, L2, L3).
L1 = [2, 8, 1, 7],
S = 2,
E = 8,
N = 1,
D = 7,
L2 = [0, 3, 6, 8],
M = 0,
O = 3,
R = 6,
L3 = [0, 3, 1, 8, 5],
Y = 5,
Appended = [2, 8, 1, 7, 0, 3, 6, 8, 0|...],
Uniq = [2, 8, 1, 7, 0, 3, 6, 5]
?-
미친아재는 직업이 뭐임
얌마 그건 니가 알아 뭐하냐?ㅋ 중요한건 뭘 할 수 있는 인간인가!
나 궁금함 그런거
일단 위 문제 니코드를 까봐라. 얘기는 그 다음에 ㅋ
아 이거 그건가 알파벳 하나가 숫자 하나의미해서 각각의 알파벳이 뭔지 맞추는문제.. 본거같은데
그래 그거다. 얼른 하나 짜서 니코드 올려봐라 ㅋ
근데 이게 느린 알고리즘 이다. 내일 혹시 시간나면 고쳐야지 ㅋ