Changes
5 changed files (+48/-34)
-
-
@@ -79,12 +79,21 @@ free[term] = max((bound | free).values()) + 1return free[term] # Get size of term def size(term): if type(term) is L: return 1 + size(term.body) if type(term) is A: return size(term.fn) + size(term.arg) return 1 # Check equality def eq(term1, term2): return canonicalize(term1, {}, {}) == canonicalize(term2, {}, {}) animals = "๐ฆ๐ฑ๐ธ๐ท๐ผ๐ถ๐ญ๐ป๐จ๐ฏ๐บ๐ฆ๐ฎ๐น๐ฐ๐ฆ" animals = "๐ฆ๐ฑ๐ธ๐ท๐ผ๐ถ๐ญ๐ป๐จ๐ฏ๐บ๐ฆ๐ฎ๐น๐ฐ๐ต๐ฆ๐ค๐ฑ" # Get friendly uncurried repr of canon term
-
@@ -144,6 +153,9 @@ for j in range(len(terms)):newterms = terms.copy() try: newterms[j] = red(A(terms[i], terms[j])) # if size(newterms[j]) > 50: # Heuristic: stop if term is blowing up # continue except: continue solve(newterms, moves + [i, j], depth - 1)
-
@@ -156,7 +168,11 @@if __name__ == "__main__": import sys sys.setrecursionlimit(50) solve([L(1, A(2, L(2, 1))), L(1, 1)], [], 6) # solve([L(1, A(2, L(2, 1))), L(1, 1)], [], 6) # solve([L(1, L(2, L(3, 1))), A(1, A(2, L(3, 4)))], [], 10) # solve([L(1, L(2, 1)), L(1, A(1, L(2, 1))), A(1, 2)], [], 8) # solve([L(1, L(2, 1)), L(1, A(A(A(A(1, 2), 3), 4), L(5, 6))), L(1, A(1, 1))], [], 8) # solve([L(1, L(2, 1)), L(1, L(2, 1)), A(A(1, 2), L(1, 1))], [], 9) solve([])
-
-
lambcalc.rpy (new)
-
@@ -0,0 +1,22 @@init python: from lambcalc import * # https://www.renpy.org/doc/html/save_load_rollback.html # terms is a Ren'Py list with rollback capabilities label level(id, terms): $ N = len(terms) $ i = 1 narrator "Level [id]" while not all(type(term) is int for term in terms): # https://www.renpy.org/doc/html/statement_equivalents.html narrator "[i].1 Select eater" (interact=False) $ fn = renpy.display_menu(list(zip(map(animal_repr, terms), range(N)))) narrator "[i].2 Select food" (interact=False) $ arg = renpy.display_menu(list(zip(map(animal_repr, terms), range(N)))) # Replace arg because if we did the other way around # Then it would be impossible to get rid of A terms because they aren't funcs $ terms[arg] = red(A(terms[fn], terms[arg])) $ i += 1 narrator "Level cleared! Select any option to continue." (interact=False) $ renpy.display_menu(list(zip(map(animal_repr, terms), range(N)))) return
-
-
lambcalc.rpyc (new)
-
-
@@ -1,27 +1,4 @@๏ปฟinit python: from lambcalc import * # https://www.renpy.org/doc/html/save_load_rollback.html # terms is a Ren'Py list with rollback capabilities label level(id, terms): $ N = len(terms) $ i = 1 narrator "Level [id]" while not all(type(term) is int for term in terms): # https://www.renpy.org/doc/html/statement_equivalents.html narrator "[i].1 Select eater" (interact=False) $ fn = renpy.display_menu(list(zip(map(animal_repr, terms), range(N)))) narrator "[i].2 Select food" (interact=False) $ arg = renpy.display_menu(list(zip(map(animal_repr, terms), range(N)))) # Replace arg because if we did the other way around # Then it would be impossible to get rid of A terms because they aren't funcs $ terms[arg] = red(A(terms[fn], terms[arg])) $ i += 1 narrator "Level cleared! Select any option to continue." (interact=False) $ renpy.display_menu(list(zip(map(animal_repr, terms), range(N)))) return # Chars ๏ปฟ# Chars define k = Character("Kublai", color="#A8836B") define g = Character("The Go Gopher", color="#E994B2") define s = Character("SHL", color="#EB4653")
-
@@ -275,19 +252,18 @@# [1, 2, 1, 0, 1, 1] call level(5, [L(1, 1), L(1, 2), A(1, A(2, 3))]) s "blah" jump minigame call level(7, [L(1, L(2, 1)), A(1, A(2, 3))]) # [0, 0, 0, 2, 0, 2, 2, 0, 2, 1, 2, 2] call level(6, [L(1, L(2, A(1, A(2, L(3, 4))))), L(1, L(2, 2)), L(1, L(2, 1))]) # Possible solutions # [0, 0, 0, 2, 2, 0, 1, 0, 2, 0, 0, 1, 0, 2, 0, 0] # [0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 2, 2, 0, 2, 1, 2, 2] call level(8, [L(1, L(2, 1)), L(1, A(A(A(A(1, 2), 3), 4), L(5, 6))), L(1, A(1, 1))]) call level(7, [L(1, L(2, 1)), L(1, A(A(A(A(1, 2), 3), 4), L(5, 6))), L(1, A(1, 1))]) # TODO call level(8, [A(1, A(2, A(3, A(4, 5)))), L(1, L(2, 1)), L(1, 1), L(1, 1), L(1, 1), L(1, 1)]) # Make 8 more levels if have time k "blah" k "blah"
-
-