X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=picoclvr.py;h=6dd8114ddd5a82f5704010e68db21645233aa360;hb=c8d0cf6842db19f84a78c1b3a4d2666b323a5d4a;hp=601bdf7dbe7bce3291b7b7e07cecc1b9587e94ca;hpb=119d5e84350bcab97c06a5c30227a294ebadb3c3;p=mygpt.git diff --git a/picoclvr.py b/picoclvr.py index 601bdf7..6dd8114 100755 --- a/picoclvr.py +++ b/picoclvr.py @@ -71,6 +71,25 @@ color_tokens = dict( [ (n, c) for n, c in zip(color_names, colors) ] ) ###################################################################### +def all_properties(height, width, nb_squares, square_i, square_j, square_c): + s = [ ] + + for r, c in [ (k, color_names[square_c[k]]) for k in range(nb_squares) ]: + s += [ f'there is {c}' ] + + if square_i[r] >= height - height//3: s += [ f'{c} bottom' ] + if square_i[r] < height//3: s += [ f'{c} top' ] + if square_j[r] >= width - width//3: s += [ f'{c} right' ] + if square_j[r] < width//3: s += [ f'{c} left' ] + + for t, d in [ (k, color_names[square_c[k]]) for k in range(nb_squares) ]: + if square_i[r] > square_i[t]: s += [ f'{c} below {d}' ] + if square_i[r] < square_i[t]: s += [ f'{c} above {d}' ] + if square_j[r] > square_j[t]: s += [ f'{c} right of {d}' ] + if square_j[r] < square_j[t]: s += [ f'{c} left of {d}' ] + + return s + def generate(nb, height = 6, width = 8, max_nb_squares = 5, max_nb_statements = 10, many_colors = False): @@ -93,21 +112,7 @@ def generate(nb, height = 6, width = 8, # generates all the true relations - s = [ ] - - for r, c in [ (k, color_names[square_c[k]]) for k in range(nb_squares) ]: - s += [ f'there is {c}' ] - - if square_i[r] >= height - height//3: s += [ f'{c} bottom' ] - if square_i[r] < height//3: s += [ f'{c} top' ] - if square_j[r] >= width - width//3: s += [ f'{c} right' ] - if square_j[r] < width//3: s += [ f'{c} left' ] - - for t, d in [ (k, color_names[square_c[k]]) for k in range(nb_squares) ]: - if square_i[r] > square_i[t]: s += [ f'{c} below {d}' ] - if square_i[r] < square_i[t]: s += [ f'{c} above {d}' ] - if square_j[r] > square_j[t]: s += [ f'{c} right of {d}' ] - if square_j[r] < square_j[t]: s += [ f'{c} left of {d}' ] + s = all_properties(height, width, nb_squares, square_i, square_j, square_c) # pick at most max_nb_statements at random