Last active
August 29, 2015 14:16
-
-
Save clawtros/5fabc061a5ff38810cac to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| import sys | |
| def is_valid(p): | |
| # words must be at least 3 characters | |
| padded = '1' + p + '1' | |
| return "101" not in padded and "1001" not in padded | |
| def groups(size): | |
| current = "" | |
| result = [] | |
| for count in range(2**size): | |
| current = bin(count)[2:] | |
| if is_valid(current.zfill(size)): | |
| result.append(current.zfill(size)) | |
| return result | |
| def get_minion_constraints(possibilities): | |
| result = "" | |
| size = len(possibilities[0]) | |
| # all rows are rows | |
| for prefix in ['a', 'd']: | |
| for i in range(size): | |
| result += "table({0}{1}, possibilities)\n".format(prefix, i) | |
| # all cells are cells | |
| for i in range(size): | |
| for j in range(size): | |
| result += "eq(a{0}[{1}], d{1}[{0}])\n".format(i, j) | |
| # grid is symmetric | |
| for i in range(size): | |
| for j in range(size): | |
| result += "eq(a{0}[{1}], a{2}[{3}])\n".format(i, j, size - i - 1, size - j - 1) | |
| return result | |
| def get_minion_vars(possibilities): | |
| result = "" | |
| size = len(possibilities[0]) | |
| for prefix in ['a', 'd']: | |
| for i in range(size): | |
| result += "BOOL {0}{1}[{2}]\n".format(prefix, i, size) | |
| result += """**TUPLELIST** | |
| possibilities {0} {1}\n{2}""".format( | |
| len(possibilities), | |
| size, | |
| "\n".join([" ".join(c for c in t) for t in possibilities])) | |
| return result | |
| def generate_minioncode(size): | |
| possibilities = groups(size) | |
| return """MINION 3 | |
| **VARIABLES** | |
| {0} | |
| **CONSTRAINTS** | |
| {1} | |
| **EOF** | |
| """.format(get_minion_vars(possibilities), get_minion_constraints(possibilities)) | |
| print generate_minioncode(int(sys.argv[1]) or 4) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment