https://gist.github.com/sephiron99/d819ba7239dce866b27817470392fe2b
평소 아인슈타인 퍼즐에 관심이 많아서 모든 아인슈타인 문제를 풀 수 있는 방법을 생각해봤음
기초가 부실하니 별것도 아닌데 너무 오래 걸렸다. 다시 대학생으로 돌아가면 공부 진짜 열심히 할 수 있는데...
알고리즘이 완벽하지는 않지만
완전탐색과 소거법 둘 다 풀수 있으며, 소거법으로 경우의 수를 줄인 다음에 완전탐색으로 마무리할 수도 있음.
완전탐색은 한 14초 걸리고, 소거법은 0.1초 미만임
출제된 나무위키 문제는 소거법으로 풀 수 있는데, 다른 아인슈타인 문제는 탐색해야만 풀리는 문제도 있음
소거법 패턴은 총 3가지 정도로 분류되는 듯.
for ((row0, bits0), (row1 bits1)) in PAIRS { ... }
근데 왜 bitflags 써놓고 u8로 하드코딩 하는거야
bitflags로 하려니 계속 FLAG.bits()를 호출해줘야 하더라고....
그리고 중복 플래그 그니까, 0b11011 같은건 bitflag로 사용하기 어려운거 같어
그러면 걍 const로 만들자