Skip to content
Snippets Groups Projects
Commit 478696e6 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '2-check-fix-improve-default-templates' into 'master'

Resolve "Check/fix/improve default templates"

Closes #2

See merge request !3
parents 9a9adc28 5de30cde
No related branches found
Tags Release_0.0.5_5
1 merge request!3Resolve "Check/fix/improve default templates"
Pipeline #7788 passed
Add grid generator, add default templates.
Ajout d'un générateur de grilles et de grilles de démarrage.
__pycache__
from shapes import *
from functions import *
class Cell:
# 1st char = name, 2nd = number of rotations, 3rd = number of reflections
s = {"s1": ["p00"], # List of all the shapes possible, indexed by the number of cells
"s2": ["s00", "s10"],
"s3": ["l00", "l10",
"c00", "c10", "c20", "c30"],
"s4": ["O00",
"J00", "J10", "J20", "J30", "J01", "J11", "J21", "J31",
"i00", "i10",
"z00", "z10", "z01", "z11",
"t00", "t10", "t20", "t30"],
"s5": ["L00", "L10", "L20", "L30", "L01", "L11", "L21", "L31",
"T00", "T10", "T20", "T30",
"N00", "N10", "N20", "N30", "N01", "N11", "N21", "N31",
"Z00", "Z10", "Z01", "Z11",
"I00", "I10",
"P00", "P10", "P20", "P30", "P01", "P11", "P21", "P31",
"W00", "W10", "W20", "W30",
"F00", "F10", "F20", "F30", "F01", "F11", "F21", "F31",
"X00",
"Y00", "Y10", "Y20", "Y30", "Y01", "Y11", "Y21", "Y31"]}
def __init__(self, co: list, val: int): # Initialisaiton
self.co = co # Coordinates
self.val = val # Value
self.numGroup = None # Number of group
# List of possible positions
self.lpos = [z + 1 for z in range(self.val)]
self.lform = list(Cell.s["s" + str(self.val)]
) # List of possible forms
self.selForm = None # Selected form
self.selPos = None # Selected position
self.coefx = None # Coefficient of x
self.coefy = None # Coefficient of y
def give(self): # Give a new form and/or position
if self.selForm == None:
self.selForm = select(extract(self.lform))
elif len(self.lpos) == 0:
if len(self.lform) == 0:
return False
else:
self.selForm = select(extract(self.lform))
self.lpos = [z + 1 for z in range(self.val)]
self.selPos = extract(self.lpos)
z = 0 # Determination of the position of the selected form corresponding to the number
for y in range(len(self.selForm)):
for x in range(len(self.selForm[0])):
if self.selForm[y][x] == 1:
z += 1
if z == self.selPos:
# Coordinates of the point inside the form
coForme = [y, x]
self.coefx = self.co[1] - coForme[1]
self.coefy = self.co[0] - coForme[0]
return True
def getSelForm(self):
return self.selForm
def getCoefx(self):
return self.coefx
def getCoefy(self):
return self.coefy
def getNum(self):
return self.numGroup
def setNum(self, num: int):
self.numGroup = num
class Cell2:
def __init__(self, co: tuple):
self.pos = [1, 2, 3, 4, 5]
self.num = 0
self.co = co
def give(self):
if len(self.pos) == 0:
return False
else:
self.num = self.pos[0]
self.pos = self.pos[1:]
return True
def getNum(self):
return self.num
def getCo(self):
return self.co
from random import choice
def isFin(m, arg):
'''Check if a matrix (m) has a cell with arg in it'''
for i in range(len(m)):
for j in range(len(m[0])):
if m[i][j] == arg:
return True
return False
def next(t, tform):
'''Find the next cell without any form in it, and with the biggest number'''
a = [0, None, None]
for i in range(len(t)):
for j in range(len(t[0])):
if tform[i][j] == 0:
if t[i][j] > a[0]:
a[0] = t[i][j]
a[1] = i
a[2] = j
return a
def inGrid(cx, cy, tf, tm):
'''Check if a matrix f can fit in a matrix m with the coefficients cx and cy'''
if cx < 0 or cy < 0 or tf[0] + cy > tm[0] or tf[1] + cx > tm[1]:
return False
return True
def with0(fo, gr, cx, cy):
'''Check if a form can fit in a formTab'''
for i in range(len(fo)):
for j in range(len(fo[0])):
if fo[i][j] == 1 and gr[i + cy][j + cx] != 0:
return False
return True
def allNums(fo, tab, cx, cy):
'''Check if all the nums in the form are from 1 to n'''
liste = []
for i in range(len(fo)):
for j in range(len(fo[0])):
if fo[i][j] == 1:
liste.append(tab[i + cy][j + cx])
liste.sort()
if liste[0] != 1:
return False
for i in range(1, len(liste)):
if liste[i] - liste[i - 1] != 1:
return False
return True
def testNear(co, tab):
'''Check if the number at co is not present in the surrounding cells'''
for i in range(-1, 2):
for j in range(-1, 2):
if i != 0 or j != 0:
y = co[0] + i
x = co[1] + j
if y >= 0 and x >= 0 and len(tab) > y and len(tab[0]) > x:
if tab[y][x] == tab[co[0]][co[1]]:
return False
return True
def testForm(co, tab, formTab):
'''Check if the numbers in the form are valid'''
l = []
for i in range(-4, 5):
for j in range(-4, 5):
y = co[0] + i
x = co[1] + j
if y >= 0 and x >= 0 and len(tab) > y and len(tab[0]) > x:
if 0 <= abs(i) + abs(j) < 5:
if formTab[y][x] == formTab[co[0]][co[1]]:
l.append(tab[y][x])
l.sort()
if l[-1] > len(l):
return False
l = [elt for elt in l if elt != 0]
for i in range(1, len(l)):
if l[i] == l[i - 1]:
return False
return True
def next2(tab):
'''Find the next cell to put a number in'''
for j in range(len(tab)):
for i in range(len(tab[0])):
if tab[j][i] == 0:
return j, i
def extract(liste):
'''Choose randomly an item from a list, remove it, and return it'''
if len(liste) > 0:
a = choice(liste)
liste.remove(a)
return a
return None
from math import floor
from tectonic import *
def build_and_print_grid(size_x, size_y):
print('building ' + str(size_x) + 'x' + str(size_y) + '...')
cells_count = size_x * size_y
if cells_count > 47:
print('too big')
else:
tab, formTab = generate(size_x, size_y)
if tab == 'Error':
error = ''
for elt in formTab:
for i in elt:
error += str(i)
print(
'Error : no shape placement configuration found - Code error : ' + str(size_y) + str(size_x) + error)
else:
print('values: ' + str(tab))
print('blocks: ' + str(formTab))
# size
template = str(size_x)+'x'+str(size_y)
template += ';'
# blocks
max_block_index = 0
for line in formTab:
for block in line:
template += chr(block+64)
if (block > max_block_index):
max_block_index = block
template += ';'
# values
empty_cells_count = 0
for line in tab:
for cell in line:
template += str(cell)
if (cell == 0):
empty_cells_count += 1
size = ''
if (cells_count < 26): # < 5x5
size = 'small'
else:
if (cells_count < 37): # < 6x6
size = 'medium'
else:
size = 'large'
ratio = floor(100 * empty_cells_count / cells_count)
level = ''
if (ratio < 70): # < 5x5
level = 'easy'
else:
if (ratio < 80): # < 6x6
level = 'medium'
else:
level = 'hard'
debug = ''
debug += ' (size:'+size+')'
debug += ' (level:'+level+')'
# debug += ' (blocks:' + str(max_block_index)+')'
# debug += ' (empty:'+str(empty_cells_count)+')'
# debug += ' (ratio:'+str(ratio)+')'
print('template:' + debug + ' ' + template)
size_min = 4
size_max = 9
for count in range(5):
for size_x in range(size_min, size_max + 1):
for size_y in range(size_min, size_max + 1):
build_and_print_grid(size_x, size_y)
#!/bin/bash -i
python3 ./generate.py
c = {"p": [[1]], # 1
"s": [[1, 1]], # 2
"l": [[1, 1, 1]], # 3
"c": [[1, 1], [1, 0]],
"O": [[1, 1], [1, 1]], # 4
"J": [[1, 1, 1], [1, 0, 0]],
"i": [[1, 1, 1, 1]],
"z": [[1, 1, 0], [0, 1, 1]],
"t": [[1, 1, 1], [0, 1, 0]],
"L": [[1, 1, 1, 1], [1, 0, 0, 0]], # 5
"T": [[1, 0, 0], [1, 1, 1], [1, 0, 0]],
"N": [[0, 1, 1, 1], [1, 1, 0, 0]],
"Z": [[0, 0, 1], [1, 1, 1], [1, 0, 0]],
"I": [[1, 1, 1, 1, 1]],
"P": [[1, 1, 1], [1, 1, 0]],
"W": [[1, 1, 0], [0, 1, 1], [0, 0, 1]],
"F": [[0, 1, 0], [1, 1, 1], [0, 0, 1]],
"X": [[0, 1, 0], [1, 1, 1], [0, 1, 0]],
"Y": [[1, 1, 1, 1], [0, 1, 0, 0]]}
def select(name):
na = name[0]
ro = int(name[1])
re = int(name[2])
ans = c[na]
for i in range(ro):
ans = rotate(ans)
for i in range(re):
ans = reflect(ans)
return ans
def rotate(m):
return [[m[len(m) - j - 1][i] for j in range(len(m))] for i in range(len(m[0]))]
def reflect(m):
return m[::-1]
from cell2 import *
from functions import *
def numOfSol(tab, formTab):
all = []
c = True
state = True
nbSol = 0
while len(all) > 0 or c:
c = False
if state:
a = next2(tab)
if a != None:
current = a
all.append(Cell2(current)) # Creation of a new element
state = False
current = all[-1].getCo()
if all[-1].give():
n = all[-1].getNum()
tab[current[0]][current[1]] = n
if testNear(current, tab) and testForm(current, tab, formTab):
state = True
else:
tab[current[0]][current[1]] = 0
else:
tab[current[0]][current[1]] = 0
all.pop()
if not isFin(tab, 0):
nbSol += 1
return nbSol == 1
from random import randint, choice
from cell import *
from solver import *
from functions import *
def generate(x, y) -> list:
xMatrice = x
yMatrice = y
#### Phase 1 : Creation of a matrix of numbers ####
tab = [[0 for i in range(xMatrice)] for j in range(
yMatrice)] # Creation of the matrix (empty)
for i in range(yMatrice):
for j in range(xMatrice):
cond = True
while cond:
cond = False
nb = randint(1, 5)
for k in range(-1, 2):
for l in range(-1, 2):
if i + k >= 0 and i + k < yMatrice and j + l >= 0 and j + l < xMatrice and nb == tab[k + i][l + j]:
cond = True
tab[i][j] = nb
# Counting occurrences of numbers in the matrix
l = [[1, 0], [2, 0], [3, 0], [4, 0], [5, 0]]
for i in range(yMatrice):
for j in range(xMatrice):
a = tab[i][j]
l[a - 1][1] += 1
for i in range(1, len(l)): # Sort occurrences in ascending order
j = i
while l[j][1] > l[j - 1][1] and j > 0:
l[j], l[j - 1] = l[j - 1], l[j]
j -= 1
t2 = [[0 for i in range(xMatrice)] for j in range(yMatrice)]
# Exchange of the numbers to respect the rule ( nb 1 >= nb 2 >= nb 3 >= nb 4 >= nb 5)
for k in range(len(l)):
for i in range(yMatrice):
for j in range(xMatrice):
if tab[i][j] == l[k][0]:
t2[i][j] = k + 1
tab = list(t2)
#### Phase 2 : Setting up shapes ####
formTab = [[0 for i in range(xMatrice)] for j in range(
yMatrice)] # Creation of the form matrix
all = []
tailleMatrice = [yMatrice, xMatrice]
state = True
while isFin(formTab, 0):
if state:
current = next(tab, formTab)
# Creation of a new element
all.append(Cell(current[1:], current[0]))
state = False
if all[-1].give(): # See if the element is finished
forme = all[-1].getSelForm() # Retrieving the shape of the element
# Retrieving of the size of the form
tailleForme = len(forme), len(forme[0])
# Retrieving of the coefficient in x of the element
coefx = all[-1].getCoefx()
# Retrieving of the coefficient in y of the element
coefy = all[-1].getCoefy()
if inGrid(coefx, coefy, tailleForme, tailleMatrice): # Verifications
if with0(forme, formTab, coefx, coefy):
if allNums(forme, tab, coefx, coefy):
n = len(all)
# Affectation of the number of the form
all[-1].setNum(n)
for y in range(tailleForme[0]):
for x in range(tailleForme[1]):
if forme[y][x] == 1:
formTab[y + coefy][x + coefx] = n
state = True
else:
all.pop()
if len(all) == 0:
return 'Error', tab
for y in range(len(tab)):
for x in range(len(tab[0])):
if all[-1].getNum() == formTab[y][x]:
formTab[y][x] = 0
### Phase 3 : Clearing some cells ###
tabCheck = [[False for i in range(xMatrice)] for j in range(yMatrice)]
tabNumber = [[(j, i) for i in range(xMatrice)] for j in range(yMatrice)]
while isFin(tabCheck, False):
y, x = choice(choice(tabNumber))
if tabCheck[y][x] == False:
save = tab[y][x]
tab[y][x] = 0
if not numOfSol(tab, formTab):
tab[y][x] = save
tabCheck[y][x] = True
return tab, formTab
...@@ -7,44 +7,185 @@ class GameData { ...@@ -7,44 +7,185 @@ class GameData {
// }, // },
'small': { 'small': {
'easy': [ 'easy': [
// ok '4x4;AAAACADBCCBBCCBB;0004000530200004',
'5x5;AABBBAABBCADECCDDCCFGGGGG;0205030001000300000040003', '4x4;AAACAACCBBCDBBBD;0140230000000500',
'4x4;BBAABBAACBADCCCC;0050204000000420',
'4x4;BBAABBAACBADCCCD;2001100040000100',
'4x4;CAAACAABCBBBCCBD;0001052020053000',
'4x4;DDCCAACCAABBABBB;0003304002034000',
'4x5;BAAEBBAABBCADDCCDDCC;25000023000000302100',
'4x5;EAAAAABBCBBBCCDDCCDD;02100300021000000401',
'4x6;AAAEAAEEBBBECBBDCCDDCCDD;020000304500000005052101',
'4x6;DDAADDAABBBABBEECCEEFCCC;205000010230000103000510',
'4x6;EAAAEEAAEBCCBBCCBBCDDDDD;052020400010030002020430',
'5x4;DDDAABBAAABBCCEBCCCE;00050140310310020000',
'5x5;AAFBBAAEBBAEEEBCCCDDCCDDD;0300414030000020023004000',
'5x5;BBAAABBAAEDBCEEDDCCCDDFCG;0000140040120000400520000',
'6x4;BBBAEEBBAAEEDAACCCDDDDCC;012031400000000000504004',
'6x4;DAABBBDAABBEDACCEEDDCCCE;051305400000000040300300',
], ],
'medium': [ 'medium': [
// duplicate // to replace '4x4;AACCBAACBBACBBDD;0020400000001001',
'5x5;AAABCAADBBEEEEBEFFFBEEGGG;1000002004504000000000000', '4x4;CCAACAAACDDBBBBB;0030200030000040',
'4x5;BAAEBBAACBBACCDDCCDD;00201003400000001020',
'4x5;BBBBAABDAAADCCCDCCDD;40100300000000045010',
'4x5;DDAABDAEBAAEBCCCBBCC;03000040000250000003',
'4x5;DDAADAABDABBCBBECCCC;20040000300400005000',
'4x5;DDDBAABBAABBACCCCCEE;20005004020000500002',
'4x6;BAAABBAAEBFCEBFCDDCCDDDC;000440001000000400005040',
'4x6;EEAAEAAAFBBDBBBDCCCDCCDD;100200300000000210002005',
'4x6;EEACEAACBBACBBACFBDDFFDD;305020000000100000000030',
'4x6;EEBBEAABAAABCDDBCCDDCCFD;010105000005000050400002',
'4x6;EEEFABBBAABBAACCDCCCDDDD;000000050200000500003041',
'5x4;AAAABACEEBDCCBBDDCCB;01405000000040030000',
'5x4;AAABBAABBBCCCDDECCDD;20040300002042000000',
'5x4;AADDBAAADBCEEBBCCCCB;00000304020000050300',
'5x4;EAADDAAADDBBBCCBBCCC;00201000000500401020',
'6x4;AAAFDDAABBBDEBBCCDEECCCD;000000300043000010003000',
'6x4;BFAAAEBBAAEEBBCCCCDDDDDC;000000400000100004403000',
'6x4;EEAAADEBAADDFBBCCDBBCCCD;000000003020000005040040',
'6x4;FABBBBAAABEEACCCEDCCDDDD;040040020000300204000000',
'6x4;FBBBAABBCAADEECADDECCCDD;000000005310020003100000',
'6x4;FDAAAABDDDACBBDECCBBEECC;030400000005300002000000',
], ],
'hard': [ 'hard': [
// to check '4x5;DDDDAABBAABBEABCCCCC;04000000305000000005',
'5x5;AAABCAADBBEEEEBEFFFBEEGGG;1000002004504000000000000', '5x4;DDDBEDABBBAAABCACCCC;00020000000200040100',
'5x4;EAAAACCCCAFBBDDBBBDD;00040400000000303000',
'5x5;AAAEEAABBEBBBDFCCGDDCCCDD;0000050000200305000000200',
'5x5;ABBBBAADBFAADDFCCCDDCCEEE;1003005000000004000300000',
'5x5;DDAAADDAAFEBBBFEBBCCEGCCC;0100500000000000003400000',
'5x5;EEADDEAADDCAABBCCCBBGCFFB;0050100030000020000400000',
'5x5;GAAAACCADDCCBDDEEBBFEEBBF;0052002000000040000000000',
'5x5;GABBBAAABBFCAEEFCDDDCCCDD;0013003000000000405000000',
], ],
}, },
'medium': { 'medium': {
'easy': [ 'easy': [
// to check '4x7;AABBAABBDACBDCCCDDCEFDEEFFEE;0402300000051000300000002015',
'8x5;ABBBBCDDAABECCDDFAAECCGDFFEEHHGGFFEHHHIG;0005005040300404020500001040000002000500', '4x8;BBBABBAACCCACCEADEEEDDFEDDFFGGFF;02055100000001000300000530100005',
'7x4;GCCAABBCCCAABBDDDAEEBDDFFEEE;0000052540214003005014000040',
], ],
'medium': [ 'medium': [
// to check '4x7;AAAAAEEEBBBECCBBDCCCDDFFGDDF;1032000001000200000504000000',
'8x5;AABBCCCDAABBCCDDAEBFFGDHIIIFFJJHIIKFJJJH;2020003000000000003050005000000000001050', '4x7;AABBAABBCADBCCDDCCDDFEEEFFEE;1004005000000300205000000102',
'4x7;BBBBAABDAAADCFFDCFDDCCEECEEE;4000005000010000005001000203',
'4x7;EEAAFEEAFFBAFBBACCBBCCDDCDDD;0205000000030050000000051001',
'4x8;AAAACABBCCBBCCDBDDDDFFGGFFEEFEEE;00044000050300040200000000405010',
'4x8;AAAFAAFFBBBFBBCCDDCCDDCEDGEEGGEE;00003004000120400500000003510000',
'4x8;AAAFBAFFBACFBBCCEBCCEDDDEDDGEEGG;00010400300320000000005000002002',
'4x8;AAHBAAABCCCBCCBBFDDDFFDDEEEGEEGG;00000035000034100000001020500010',
'4x8;FFAHFFAABBAABBCCGBCCGEECDDEEDDDE;00000030000500300040000004003005',
'4x8;FFFABFAABAAGBBGGDBCCDECCDEECDDEE;01005032000000003000000000142020',
'4x8;FFFAFAAAGGACBBCCBBBCHDDCDDEEDEEE;10000000204000003000000220050302',
'4x9;AAACAACCBCCEBBEEDBBEDGFEDGFHDGFHDGFF;350000100400000350000300000000000004',
'4x9;AAACAACCBCCHBBBHDDBEDDEEFDEEFFGGFFGG;320100400000400000000040010000000303',
'4x9;HHAAAAABGGBBGGBBCCDDCDDFCDFFCEEFEEEF;000000104050000050020004003000005025',
'5x6;AABBBAADBBGADDDGCCCDFCCEEFFEEE;000400300000200050000000320050',
'5x6;AAFFBAAFFBACCCBGCCBBDDDEEDDEEE;402003000000000000400530000150',
'5x6;BAAAABFFFABBCCCBDCCGHDEEEDDDEE;400040000005005000000024004000',
'5x6;BGAAABBAACBBFCCDFFCCDDFEEDDEEE;000054031050003000000400510000',
'5x6;GABBBAABBFCAAFFCCCEFCDDEEDDDEE;000300205000000005000000350100',
'5x6;GBBBHGAABBAACEEACCEEDDCCFDDDFF;040000525004000005000100100000',
'5x7;AAABBAABBBEGGJFECCFFECCDFECDDDHHDII;02501000400000040540000000050400000',
'5x7;BBBAABBDAAGDDCAGDCCIEDCCFEEHFFEEHFF;00002040000300010030040002005000101',
'5x7;DGGABDGAABDAABBDCCCBDCCEEFFFEEFFHHE;00000000050010200000500100400250000',
'5x7;GAAHHGAABBGABBBECCCCECFDDEFFDDEEFFD;00301040000000000400010504000000014',
'5x7;HAAGGHABBGAACBBCCCDBECDDDEEFFDEEFFF;04003000000000540001000500400010102',
'6x5;AAAACCFFABCCFFBBECDDDBEEDDGBEE;052001000000000003000201030000',
'6x5;AABBBBFAACDBFFACDDFEECCDGEEECD;050054000000002025040003000000',
'6x5;ABBFFCAABBFCAABECCDDEEECDDDEGG;003000100002300000000000034510',
'6x5;FFFBBGAFBBCCAADBCCADDEECADDEEE;402000000400400000303000000040',
'6x5;GGBBBBAAAEEBAACEEDCCCCDDFFFFDD;000000050005000040000105010004',
'6x6;AAAAHBCCCABBDDCCEBDDDEEBFFEEGGFFFGGG;050000020000400030000054000100020001',
'6x6;BBAAAACBBBHACCCCDDEEDDDGEEFFGGEFFFGG;000003400000020500000000100500404002',
'6x6;BBAAGGBBAAGGBCCADDCCCFDDHEEFFDHEEEFF;000003102002005000200004040300000010',
'6x6;CAABBBCCAABBECADDDECHDDGEEFFGGEFFFGG;000300404050000000000400030023004000',
'7x4;DDDAAEEBBDAAEEBBGACFFBCCCCFF;4000500000004100005002000000',
'7x4;EEEAABGCEAAABFCCDDBBFCCDDDBF;0000000001005052050000000003',
'7x4;GAADBBBAAADDBBFCCDDEEFFCCCEE;0000502320004000000012000000',
'7x5;AAAFFFFAACCBBHECCCBBBEEDDDGGEEDDIGG;05000033402000000003000050000200000',
'7x5;BGGGGAABBBCCAAEBCCCDAEEFFFDDHEEFFDD;00300200000004000005050050000000034',
'7x5;GBBBBHHGAABCCCGAAEECCDDAEEEFDDDFFFF;00200020500300000000104000040010100',
'8x4;ABBEEECCAABBECCCADDBEFFGADDDFFFG;00000042300000300003000040200002',
'8x4;CAAAFFBBCCAAFFBBCCDEEEBGDDDDEEGG;05000005300010300000400004000000',
'8x4;FAAABBBCFFAABBCCGDDEEECCGGDDDEEH;00300000000005053020000400005000',
'8x4;FAAABBBGFFAABBCGFDDDEECCDDHEEECC;00502030400000000520001000003000',
'9x4;FAAAABBHHFGACBBBEEFGGCCDDEEFFGCCDDDE;000001000100004003000200000054003002',
'9x4;HHAAABBCCGAADBBBCCGGDDEEFFCGDDEEEFFF;005301000000000200000000104000500050',
], ],
'hard': [ 'hard': [
// to check '4x7;AAGBACCBACBBACBDECDDEEFDEFFD;4000000300000000000000053000',
'8x5;AABCCCDDEEBBCCDDEEFFFGGDEHHFFGGGHHHIIIII;0000100500000200000500014030005001001000', '4x7;EEAGEAAAEBBADBBBDDDFCCDFCCCH;0200000000000040200000002000',
'4x7;GEEEBBAEBBAHCBAACCDACDDFCDDF;0000400400000004000030400000',
'4x9;FFFHBAFHBAAABBACBDICGDCCGDDCGDEEGEEE;100000000003300000000000300000000050',
'4x9;GGGBGABBAAABACEBCCEEDCCEDHHEDDFFDFFF;010000040000400200000400000000000013',
'4x9;HHAAAAABCBBBCCCBEECDGEEDGGEDFFFDFFID;000000000004500000050000302000400000',
'4x9;HHFFAAFFGAAAGBCCGBBCDDBCDEBCDEEIDEEI;000300000020000000010000000054000050',
'5x6;BAAGCBAAGCBBACCDBFCEDDFEEDDFEE;005001000350000000044000000000',
'5x6;EAAAHEEGAAECGBBCCBBBCDDDDCDFFF;000300000020000400301000000200',
'5x7;FFFAAFAAAGHCBBGHCBBGECCBGEECDDEEDDD;30100000000005003000000004000100030',
'5x7;GGGBBGAABBAAABDCCCDDCCDDEFFHEEFFFEE;40004000020000000000000303000000202',
'5x7;HAAAGHAAGGFFBBCFBBCCFDBCCDDEEEDDIEE;10002000000300000000040102000000000',
'6x5;AAAFCGAABFCCDBBFCCDDBBEEDDEEEH;040040500000000200000000205000',
'6x5;AGBBCCAAABBCFADBHCFDDEECFDDEEE;000000500002000000005000000010',
'6x5;GGAABBAAAFBECCFFBECCDDBEHCDDDE;100000050050100000000001040000',
'6x6;BAAAAHBBBACHDBGGCCDDGGFCDEEEFCDEEFFF;000000400400000000100100000020400000',
'6x6;HHAABBHAAABBFFFCCBFDDECCDDGEECDGGGEE;000305040000000010000003030000100000',
'6x6;IAACCFBAAACFBBBBCFEEEGCFDEEGGHDDDDGH;050000000004400001000000500000104000',
'7x5;CCDAAABCDDGAABCDGGEBBCDFFEBHFFFEEEH;04000005000101000000300000004000000',
'8x4;CAAFFFBBCCAAFDBBGCADDDEBGCHDEEEE;04500005500000000000504000000000',
'9x4;AAAABBBDDAEHBBCDDDEEFFFCCCCEEFFGGGGG;030010000000000205500300000000002000',
], ],
}, },
'large': { 'large': {
'easy': [ 'easy': [
// duplicate // to replace '5x8;BBBIIAABBCAADDCADDCCEDFFCEEEFFEGGHFGGGHH;0200250530020000000400000304300100450000',
'5x11;ABBCCDBBCCDDBCEDDFFEGGHEEGGHEIJGHIIJHHKIJLKKILLKMMLLMMM;0003040004000000200000030200000400000003300000400520000',
], ],
'medium': [ 'medium': [
// to check '5x8;AAABBAABBDICCBDCCHHDCEHFDEEHFDEEGFFGGGGF;1005000000002003000100002000002053030000',
'5x11;ABBCCDBBCCDDBCEDDFFEGGHEEGGHEIJGHIIJHHKIJLKKILLKMMLLMMM;0003040004000000200000030200000400000003300000400520000', '5x8;AHHHHAAAADBBBCDBBCCDEICCDEEEFDGGEFFGGGFF;0001040004000000400000000500000004240200',
'5x8;BBBAABBAAHDDAHHDCCHEDCCEEDCIEEFFFGGFFGGG;0005050000020040000100004000200000010024',
'5x8;HABBBHAJBIHAABIGGACCGGDCCEDDDCEEDFFEEFFF;0003004000300000000002000040042000000203',
'5x8;IAABBAABBBADDDDCCDEECCCEEFFFFEFHHGGHHGGG;0000420030004200000503400020020000000050',
'5x8;IIBBBAABBDAAADDCCCDDCCFFFEEEFFHEEGGHHGGG;2000450003100040401000020000000400000305',
'5x9;AJBBBAABBCDAACCDDCCEDDEEEGGEFFGGHFFGIHHFIIIHH;003020050040000000000000000300000015000301040',
'5x9;HHHJBHABBBAABCKAACCCDDCELDDEEEDFFGEFFGGGMFGII;004001000040000000040400005050000003000402000',
'6x7;AABBBBAACCBJACCCEEHDDEEEHHDDDGHFFGGGIIFFFG;450040000000000102000300040020000030020000',
'6x7;BAAAAIBBBBAIDDEECCDDEECCDFEGCHFFGGHHFFGGHH;001050403000100000000004500000000000015050',
'6x8;AAJJJDAAABBDCCFBBDCCFFBDCEFFHDGEEEHHGGEHHIGGIIII;050200000003500004000000100000000200000000200430',
'6x8;JAAAAAJBCCDDJBBCDDBBFCCDEEFFFGEEEFGGHHIIIGHHHIIG;201000000003000000200000000300200000000243030000',
'6x8;JAAABDJAABBDCCBBKDCCEEDDCGEEFFGGEFFFGHHHIIGHHIII;001000200054000000500000000010305004000300500004',
'6x8;KKAACCAAABCCDDEBBCDDEEBBDGEEFFGGGFFFIGHHHJIIHHJJ;000001402030010000050340000000000001000002003010',
'7x6;AABCCCIAABBCCIADDBBHHFDDEEEHFFDEEGGJFFGGGK;000010020400001000002230500000000300004000',
'7x6;CCIIAAACCBBBAACFFBBDDFFEHDDDFEEHHGGEEHHGGG;200003000501200000000100000000003050000400',
'7x6;HHABBBJHHAABBEICFAAEEICFDDEECCFDDGGCFFDGGG;300205010030020500000000003000100010000002',
'8x5;HHAEBBBIHHAEBBCCDAAECCCGDDAEEFGGDDFFFFGG;0300500000004000003000000002050043000002',
'8x6;AAAADDDDEEBACCDJEEBBCCCJEBBIFFFJGGIIIHFFGGGHHHHK;040103000050000030000000000010001000000002500100',
'8x6;AACCCBBBKAACCEBBDDAFFEEIDDFFFEJIDHHGGEJIHHHGGGII;500003020005000000000000000000034002000420004000',
'8x6;JJAAAAABJCEEEDBBCCEEDDBBHCCFDDKKHHFFIGGGHFFIIIGG;100020000000050100000004000020000000003000032002',
], ],
'hard': [ 'hard': [
// duplicate // to replace '5x8;GGIIAHGGAAHHBAACBBBBCCDDDCCDDFEEJFFEEEFF;0001300000000000000005004000000002020005',
'5x11;ABBCCDBBCCDDBCEDDFFEGGHEEGGHEIJGHIIJHHKIJLKKILLKMMLLMMM;0003040004000000200000030200000400000003300000400520000', '5x9;BAAAABACCEBCCCEBBJJEDDDEEDDFFGIFFGGIIFGGHHHHH;050000003000000200020105003000050000000004000',
'5x9;BBIIJBBIAADBKAADDCCADCCEEDCEEEFFFFGFHHGGHHHGG;000000200000004000000030040001050000001050004',
'5x9;HAAABHHAABCHDBBCDDDBCIIDFCEIFFCEFFGEEJGGEJJGG;000101000530000001000000000004000000005200030',
'5x9;HCCAAHCAAAHCJBBHCJBBIIJDBIFDDDFFDEEFFEEEGGGGG;010310002000000000000000000040000000000140300',
'5x9;IIABBIAABBAACCBJCCCDJEEDDEEDDFEGFFFGGGFHGHHHH;010000400000004050000000020000000000000120400',
'5x9;JBAHHBBAHHBBACCDAACCDDKGCIDDGEIIGGEIFFGEFFFEE;000020230000000020030000000000000020000040203',
'6x7;BAAAAIBBCAEGBBCCEGFDCCEGFDDDEGFFDHEGFHHHHJ;210000000003000000200400000030000020005000',
'6x7;HAAAAIHHBBAICCBBEECCDBEEFCDDDEFFFDGGFJJGGG;102040000000500002005000000000000000000025',
'6x8;BBAAAAJBBBADJCCCDDKCCDDFKEEEHFEEHHHFGGGHFFGGIIIL;000503000000000500000000000000000100054004000000',
'7x6;AAABBBBAAIICDBFFCCCDJEFFCKDDEEFGGGDEEGGHHH;030430000000000400000000000004540001000000',
'7x6;HHHABBJHAAAABBIFFCCEBIDFCCEEDDFGCEEDDFGGGG;300002000000500000000000040320100000000400',
'8x5;DAAAAIBBDDACCCBBDDEEECCBGGGEEFFFGGHHHFFJ;0000000540000001010000000000002005100000',
'8x5;HAAABBCJHEEAABCCDDEEEBBCIDDFFGGCIDFFFGGG;0050000000000005050400000000000004100501',
'8x5;HHHBBAADCCBBBADDCCGGAADDCGGEFFFFIIIEEEEF;0200050100000404500000200000000000000500',
'8x5;IAHHHBDDIAABBBBDEAACCCCDEEEFFCGDEFFFGGGG;0003030205000000000000000005000001030000',
'8x6;AAAACJDIAEBCCJDIEEBCCJDIEBBFFDDIEBGGFFHHKGGGFHHH;002000000000000050100100000000400000005100002040',
'9x5;GGGGBCIIIAABBBCCCJADDBKKCHJADDEEFFHHADEEEFFFH;020001003100000050200000000050000000000400000',
'9x5;HHBBKCIIIHABBBCCCFHAAAACJFFDDEEEEJGFDDDEGGGGF;402000000000000003100000000300000000004000002',
'9x5;JJBBKAAAIDJBBBAACIDDGGGGCCIHDDEECCFFHHHEEEFFF;000005000030000000014000000000000000100000403',
], ],
}, },
}; };
......
...@@ -29,6 +29,11 @@ class PageGame extends StatelessWidget { ...@@ -29,6 +29,11 @@ class PageGame extends StatelessWidget {
const GameBoardWidget(), const GameBoardWidget(),
const SizedBox(height: 8), const SizedBox(height: 8),
const GameBottomWidget(), const GameBottomWidget(),
// StyledButton.text(
// onPressed: () => SuguruSolver.checkAllTemplates(),
// caption: '[debug] test all templates',
// color: Colors.red,
// ),
const Expanded(child: SizedBox.shrink()), const Expanded(child: SizedBox.shrink()),
currentActivity.isFinished ? const GameEndWidget() : const SizedBox.shrink(), currentActivity.isFinished ? const GameEndWidget() : const SizedBox.shrink(),
], ],
......
...@@ -3,7 +3,7 @@ description: A suguru game application. ...@@ -3,7 +3,7 @@ description: A suguru game application.
publish_to: "none" publish_to: "none"
version: 0.0.4+4 version: 0.0.5+5
environment: environment:
sdk: "^3.0.0" sdk: "^3.0.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment