0
수수께끼를 풀려고하는 Im, 레벨 48에 도달하는 약간의 교활하고 무차별 한 힘을 사용합니다.하지만 이제는 계산을 재사용하기 위해 메모를 사용합니다.어떻게 모든 조각 조합을 만들 수 있습니까?
+-----------+-----------+-------------+-------------+-------------+-------------+-------------+
| puzzle_id | piece_id | flips_row1 | flips_row2 | flips_row3 | flips_row4 | flips_row5 |
+-----------+-----------+-------------+-------------+-------------+-------------+-------------+
| 1 | 1 | 2 | 1 | 2 | 0 | 0 |
| 1 | 2 | 2 | 1 | 0 | 0 | 0 |
| 1 | 3 | 2 | 2 | 2 | 0 | 0 |
| 1 | 4 | 3 | 1 | 3 | 0 | 0 |
| 1 | 5 | 4 | 3 | 3 | 3 | 0 |
| 1 | 6 | 3 | 0 | 0 | 0 | 0 |
| 1 | 7 | 3 | 1 | 3 | 0 | 0 |
| 1 | 8 | 3 | 4 | 1 | 2 | 2 |
| 1 | 9 | 1 | 0 | 0 | 0 | 0 |
| 1 | 10 | 2 | 2 | 2 | 0 | 0 |
| 1 | 11 | 2 | 3 | 4 | 0 | 0 |
| 1 | 12 | 1 | 3 | 1 | 3 | 2 |
| 1 | 13 | 1 | 2 | 2 | 0 | 0 |
| 1 | 14 | 2 | 4 | 1 | 1 | 0 |
| 1 | 15 | 1 | 2 | 1 | 0 | 0 |
| 1 | 16 | 1 | 1 | 3 | 0 | 0 |
| 1 | 17 | 3 | 2 | 3 | 1 | 0 |
| 1 | 18 | 1 | 3 | 2 | 2 | 0 |
+-----------+-----------+-------------+-------------+-------------+-------------+-------------+
내가 모든 조각의 조합으로 테이블 solution_pieces
을 채우기 위해 도움이 필요 :이 수준
puzzles: (puzzle_id, level, flips)
CONSTRAINT puzzle_id_pk PRIMARY KEY (puzzle_id)
puzzle_rows (puzzle_id, row_id, row_flips)
CONSTRAINT puzzle_row_pk PRIMARY KEY (puzzle_id, row_id),
CONSTRAINT puzzle_row_puzzle_id_fk FOREIGN KEY (puzzle_id)
pieces: (puzzle_id, piece_id, flips_row1, flips_row2, flips_row3, flips_row4, flips_row5)
CONSTRAINT piece_id_pk PRIMARY KEY (puzzle_id, piece_id),
CONSTRAINT piece_puzzle_id_fk FOREIGN KEY (puzzle_id)
18 개 있습니다
나는 일부 테이블이있다. 이 경우는 2^18 = 262144
입니다. 아이디어는 행 패리티를 먼저 확인하여 검색 공간을 정리하는 것입니다. (SUM(pieces.flips_row1) + puzzle_row[1].flips) % 3 = 0
. 첫 번째 행에 조각 {14,15}
와 아래 그림에서 예를 들어
solutions: (solution_id, puzzle_id,
flips_row1, flips_row2, flips_row3, flips_row4, flips_row5)
CONSTRAINT solution_pk PRIMARY KEY (solution_id),
CONSTRAINT solution_puzzle_id_fk FOREIGN KEY (puzzle_id)
solution_pieces: (solution_id, piece_id)
CONSTRAINT solution_pieces_pk PRIMARY KEY (solution_id, piece_id),
CONSTRAINT solution_pieces_solution_id_fk FOREIGN KEY (solution_id)
CONSTRAINT solution_puzzle_id_fk FOREIGN KEY (puzzle_id)
pieces total flips (3) + row_flips (3) = 6 % 3 = 0
그래서 나는 다음과 같은 테이블 solution_pieces
를 입력해야합니다.
solution_id piece_id
1 1
.... -- solutions with only one piece
18 18
19 1
19 2
20 1
20 3
.... -- solutions with two pieces
262144 {1..18} -- solution with all pieces
은 다음 표
solutions
은 행 배열을 변환 unnest 추가, 단지
GROUP BY