From 5d41f8a91dc47e41f45ecaeec4ad1640196be37e Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Mon, 9 Sep 2013 00:12:34 -0500 Subject: move vba_keyboard.py -> keyboard.py --- pokemontools/vba/keyboard.py | 63 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 pokemontools/vba/keyboard.py (limited to 'pokemontools/vba/keyboard.py') diff --git a/pokemontools/vba/keyboard.py b/pokemontools/vba/keyboard.py new file mode 100644 index 0000000..f25fd06 --- /dev/null +++ b/pokemontools/vba/keyboard.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +""" +This file constructs a networkx.DiGraph object called graph, which can be used +to find the shortest path of keypresses on the keyboard to type a word. +""" + +import itertools +import networkx + +graph = networkx.DiGraph() + +# load graph data from file +data_path = os.path.join(os.path.abspath(__file__), "keyboard.data") +graph_data = open(data_path, "r").read() + +for line in graph_data.split("\n"): + if line == "": + continue + elif line[0] == "#": + continue + + (node1, node2, edge_name) = line.split(" ") + graph.add_edge(node1, node2, key=edge_name) + + #print "Adding edge ("+edge_name+") "+node1+" -> "+node2 + +def shortest_path(node1, node2): + """ + Figures out the shortest list of button presses to move from one letter to + another. + """ + buttons = [] + last = None + path = networkx.shortest_path(graph, node1, node2) + for each in path: + if last != None: + buttons.append(convert_nodes_to_button_press(last, each)) + last = each + return buttons + #return [convert_nodes_to_button_press(node3, node4) for (node3, node4) in zip(*(iter(networkx.shortest_path(graph, node1, node2)),) * 2)] + +def convert_nodes_to_button_press(node1, node2): + """ + Determines the button necessary to switch from node1 to node2. + """ + print "getting button press for state transition: " + node1 + " -> " + node2 + return graph.get_edge_data(node1, node2)["key"] + +def plan_typing(text, current="A"): + """ + Plans a sequence of button presses to spell out the given text. + """ + buttons = [] + for target in text: + if target == current: + buttons.append("a") + else: + print "Finding the shortest path between " + current + " and " + target + more_buttons = shortest_path(current, target) + buttons.extend(more_buttons) + buttons.append("a") + current = target + return buttons -- cgit v1.2.3 From cdf1b82fad704ca31ffc607b8954aef94d207317 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Mon, 9 Sep 2013 01:59:58 -0500 Subject: keyboard needs os --- pokemontools/vba/keyboard.py | 1 + 1 file changed, 1 insertion(+) (limited to 'pokemontools/vba/keyboard.py') diff --git a/pokemontools/vba/keyboard.py b/pokemontools/vba/keyboard.py index f25fd06..b954800 100644 --- a/pokemontools/vba/keyboard.py +++ b/pokemontools/vba/keyboard.py @@ -4,6 +4,7 @@ This file constructs a networkx.DiGraph object called graph, which can be used to find the shortest path of keypresses on the keyboard to type a word. """ +import os import itertools import networkx -- cgit v1.2.3 From 709850fff5ee7c8f6bff61a2b0f3b23d4954dcac Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Mon, 9 Sep 2013 02:02:45 -0500 Subject: fix keyboard.data path in keyboard.py --- pokemontools/vba/keyboard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pokemontools/vba/keyboard.py') diff --git a/pokemontools/vba/keyboard.py b/pokemontools/vba/keyboard.py index b954800..4a07e57 100644 --- a/pokemontools/vba/keyboard.py +++ b/pokemontools/vba/keyboard.py @@ -11,7 +11,7 @@ import networkx graph = networkx.DiGraph() # load graph data from file -data_path = os.path.join(os.path.abspath(__file__), "keyboard.data") +data_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "keyboard.data") graph_data = open(data_path, "r").read() for line in graph_data.split("\n"): -- cgit v1.2.3