Created
June 24, 2021 12:11
-
-
Save youxkei/a1859a44a691b383da88dba3d96fb4da to your computer and use it in GitHub Desktop.
A Puzzle A Day Solver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:- use_module(library(clpfd)). | |
:- use_module(library(lists)). | |
month_rows([ | |
[[jan, _, _, _, _, _, xxx], [_, _, _, _, _, _, xxx]], | |
[[_, feb, _, _, _, _, xxx], [_, _, _, _, _, _, xxx]], | |
[[_, _, mar, _, _, _, xxx], [_, _, _, _, _, _, xxx]], | |
[[_, _, _, apr, _, _, xxx], [_, _, _, _, _, _, xxx]], | |
[[_, _, _, _, may, _, xxx], [_, _, _, _, _, _, xxx]], | |
[[_, _, _, _, _, jun, xxx], [_, _, _, _, _, _, xxx]], | |
[[_, _, _, _, _, _, xxx], [jul, _, _, _, _, _, xxx]], | |
[[_, _, _, _, _, _, xxx], [_, aug, _, _, _, _, xxx]], | |
[[_, _, _, _, _, _, xxx], [_, _, sep, _, _, _, xxx]], | |
[[_, _, _, _, _, _, xxx], [_, _, _, oct, _, _, xxx]], | |
[[_, _, _, _, _, _, xxx], [_, _, _, _, nov, _, xxx]], | |
[[_, _, _, _, _, _, xxx], [_, _, _, _, _, dec, xxx]] | |
]). | |
day_rows([ | |
[[nn1, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, nn2, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, nn3, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, nn4, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, nn5, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, nn6, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, nn7], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [nn8, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, nn9, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, n10, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, n11, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, n12, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, n13, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, n14], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [n15, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, n16, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, n17, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, n18, _, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, n19, _, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, n20, _], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, n21], [_, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [n22, _, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, n23, _, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, n24, _, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, n25, _, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, n26, _, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, n27, _], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, n28], [_, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [n29, _, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, n30, _, xxx, xxx, xxx, xxx]], | |
[[_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, _, _, _, _, _], [_, _, n31, xxx, xxx, xxx, xxx]] | |
]). | |
zero_mino(aaa, aaa, aaa, aaa, aaa, aaa). | |
zero_mino([[E1, E2, E3 | _], [E4, E5, E6 | _] | _]) :- | |
zero_mino(E1, E2, E3, E4, E5, E6). | |
zero_mino([[E1, E4 | _], [E2, E5 | _], [E3, E6 | _] | _]) :- | |
zero_mino(E1, E2, E3, E4, E5, E6). | |
six_mino(_, bbb, bbb, bbb, bbb, bbb). | |
six_mino(bbb, bbb, _, bbb, bbb, bbb). | |
six_mino(bbb, bbb, bbb, _, bbb, bbb). | |
six_mino(bbb, bbb, bbb, bbb, bbb, _). | |
six_mino([[E1, E2, E3 | _], [E4, E5, E6 | _] | _]) :- | |
six_mino(E1, E2, E3, E4, E5, E6). | |
six_mino([[E1, E4 | _], [E2, E5 | _], [E3, E6 | _] | _]) :- | |
six_mino(E1, E2, E3, E4, E5, E6). | |
ko_mino(ccc, _, ccc, ccc, ccc, ccc). | |
ko_mino(ccc, ccc, ccc, ccc, _, ccc). | |
ko_mino([[E1, E2, E3 | _], [E4, E5, E6 | _] | _]) :- | |
ko_mino(E1, E2, E3, E4, E5, E6). | |
ko_mino([[E1, E4 | _], [E2, E5 | _], [E3, E6 | _] | _]) :- | |
ko_mino(E1, E2, E3, E4, E5, E6). | |
to_mino(_, ddd, _, _, ddd, ddd, ddd, ddd). | |
to_mino(_, _, ddd, _, ddd, ddd, ddd, ddd). | |
to_mino(ddd, ddd, ddd, ddd, _, ddd, _, _). | |
to_mino(ddd, ddd, ddd, ddd, _, _, ddd, _). | |
to_mino([[E1, E2, E3, E4 | _], [E5, E6, E7, E8 | _] | _]) :- | |
to_mino(E1, E2, E3, E4, E5, E6, E7, E8). | |
to_mino([[E1, E5 | _], [E2, E6 | _], [E3, E7 | _], [E4, E8 | _] | _]) :- | |
to_mino(E1, E2, E3, E4, E5, E6, E7, E8). | |
rifle_mino(_, _, eee, eee, eee, eee, eee, _). | |
rifle_mino(eee, eee, _, _, _, eee, eee, eee). | |
rifle_mino(eee, eee, eee, _, _, _, eee, eee). | |
rifle_mino(_, eee, eee, eee, eee, eee, _, _). | |
rifle_mino([[E1, E2, E3, E4 | _], [E5, E6, E7, E8 | _] | _]) :- | |
rifle_mino(E1, E2, E3, E4, E5, E6, E7, E8). | |
rifle_mino([[E1, E5 | _], [E2, E6 | _], [E3, E7 | _], [E4, E8 | _] | _]) :- | |
rifle_mino(E1, E2, E3, E4, E5, E6, E7, E8). | |
j_mino(_, _, _, fff, fff, fff, fff, fff). | |
j_mino(fff, _, _, _, fff, fff, fff, fff). | |
j_mino(fff, fff, fff, fff, _, _, _, fff). | |
j_mino(fff, fff, fff, fff, fff, _, _, _). | |
j_mino([[E1, E2, E3, E4 | _], [E5, E6, E7, E8 | _] | _]) :- | |
j_mino(E1, E2, E3, E4, E5, E6, E7, E8). | |
j_mino([[E1, E5 | _], [E2, E6 | _], [E3, E7 | _], [E4, E8 | _] | _]) :- | |
j_mino(E1, E2, E3, E4, E5, E6, E7, E8). | |
s_mino(_, _, ggg, ggg, ggg, ggg, ggg, _, _). | |
s_mino(ggg, _, _, ggg, ggg, ggg, _, _, ggg). | |
s_mino([[E1, E2, E3 | _], [E4, E5, E6 | _], [E7, E8, E9 | _] | _]) :- | |
s_mino(E1, E2, E3, E4, E5, E6, E7, E8, E9). | |
s_mino([[E1, E4, E7 | _], [E2, E5, E8 | _], [E3, E6, E9 | _] | _]) :- | |
s_mino(E1, E2, E3, E4, E5, E6, E7, E8, E9). | |
l_mino(_, _, hhh, _, _, hhh, hhh, hhh, hhh). | |
l_mino(hhh, _, _, hhh, _, _, hhh, hhh, hhh). | |
l_mino(hhh, hhh, hhh, _, _, hhh, _, _, hhh). | |
l_mino(hhh, hhh, hhh, hhh, _, _, hhh, _, _). | |
l_mino([[E1, E2, E3 | _], [E4, E5, E6 | _], [E7, E8, E9 | _] | _]) :- | |
l_mino(E1, E2, E3, E4, E5, E6, E7, E8, E9). | |
mino(Mino, Rows) :- | |
call(Mino, Rows). | |
mino(Mino, [_ | Rows]) :- call(Mino, Rows). | |
mino(Mino, [_, _ | Rows]) :- call(Mino, Rows). | |
mino(Mino, [_, _, _ | Rows]) :- call(Mino, Rows). | |
mino(Mino, [_, _, _, _ | Rows]) :- call(Mino, Rows). | |
mino(Mino, [_, _, _, _, _ | Rows]) :- call(Mino, Rows). | |
mino(Mino, Rows) :- transpose(Rows, [_ | Columns]), transpose(Columns, Rows1), call(Mino, Rows1). | |
mino(Mino, Rows) :- transpose(Rows, [_, _ | Columns]), transpose(Columns, Rows1), call(Mino, Rows1). | |
mino(Mino, Rows) :- transpose(Rows, [_, _, _ | Columns]), transpose(Columns, Rows1), call(Mino, Rows1). | |
mino(Mino, Rows) :- transpose(Rows, [_, _, _, _ | Columns]), transpose(Columns, Rows1), call(Mino, Rows1). | |
mino(Mino, Rows) :- transpose(Rows, [_, _, _, _, _ | Columns]), transpose(Columns, Rows1), call(Mino, Rows1). | |
mino(Mino, [_ | Rows]) :- | |
transpose(Rows, [_ | Columns]), | |
transpose(Columns, Rows1), | |
mino(Mino, Rows1). | |
solve(Month, Day, Result) :- | |
month_rows(MonthRows), | |
day_rows(DayRows), | |
nth1(Month, MonthRows, SelectedMonthRows), | |
nth1(Day, DayRows, SelectedDayRows), | |
append(SelectedMonthRows, SelectedDayRows, Result), | |
mino(zero_mino, Result), | |
mino(six_mino, Result), | |
mino(ko_mino, Result), | |
mino(to_mino, Result), | |
mino(rifle_mino, Result), | |
mino(j_mino, Result), | |
mino(s_mino, Result), | |
mino(l_mino, Result). |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment