diff options
author | Bryan Bishop <kanzure@gmail.com> | 2013-09-08 22:52:50 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2013-09-08 22:52:50 -0500 |
commit | 72cdd7ba645e02c928fd56def4465e38e4c03709 (patch) | |
tree | a3f6411a4170d07a67e1ae03155176a72f535b8f /vba/vba_keyboard.py | |
parent | 5ce5342833f8170390c0112ed6047243e67465a9 (diff) |
move vba/ -> pokemontools/vba/
Diffstat (limited to 'vba/vba_keyboard.py')
-rw-r--r-- | vba/vba_keyboard.py | 562 |
1 files changed, 0 insertions, 562 deletions
diff --git a/vba/vba_keyboard.py b/vba/vba_keyboard.py deleted file mode 100644 index 7d57953..0000000 --- a/vba/vba_keyboard.py +++ /dev/null @@ -1,562 +0,0 @@ -# -*- encoding: 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() - -graph_data = """ -A a select -A B r -A I l -A lower-upper-column-1 u -A J d - -B b select -B A l -B C r -B lower-upper-column-2 u -B K d - -C c select -C D r -C B l -C lower-upper-column-3 u -C L d - -D d select -D E r -D C l -D del-upper-column-1 u -D M d - -E e select -E del-upper-column-2 u -E N d -E D l -E F r - -F f select -F del-upper-column-3 u -F O d -F E l -F G r - -G g select -G end-upper-column-1 u -G P d -G F l -G H r - -H h select -H end-upper-column-2 u -H Q d -H G l -H I r - -I i select -I end-upper-column-3 u -I R d -I H l -I A r - -J j select -J A u -J S d -J R l -J K r - -K k select -K B u -K T d -K J l -K L r - -L l select -L C u -L U d -L K l -L M r - -M m select -M D u -M V d -M L l -M N r - -N n select -N E u -N W d -N M l -N O r - -O o select -O F u -O X d -O N l -O P r - -P p select -P G u -P Y d -P O l -P Q r - -Q q select -Q H u -Q Z d -Q P l -Q R r - -R r select -R I u -R space-upper-x8-y2 d -R Q l -R J r - -S s select -S J u -S - d -S space-upper-x8-y2 l - -T t select -T K u -T ? d -T S l -T U r - -U u select -U L u -U ! d -U T l -U V r - -V v select -V M u -V / d -V U l -V W r - -W w select -W N u -W . d -W V l -W X r - -X x select -X O u -X , d -X W l -X Y r - -Y y select -Y P u -Y space-upper-x6-y3 d -Y X l -Y Z r - -Z z select -Z Q u -Z space-upper-x7-y3 d -Z Y l -Z space-upper-x8-y2 r - -end-upper-column-1 lower-upper-column-1 r -end-upper-column-2 lower-upper-column-1 r -end-upper-column-3 lower-upper-column-1 r -end-upper-column-1 del-upper-column-1 l -end-upper-column-2 del-upper-column-1 l -end-upper-column-3 del-upper-column-1 l -lower-upper-column-1 end-upper-column-1 l -lower-upper-column-2 end-upper-column-1 l -lower-upper-column-3 end-upper-column-1 l -lower-upper-column-1 del-upper-column-1 r -lower-upper-column-2 del-upper-column-1 r -lower-upper-column-3 del-upper-column-1 r -del-upper-column-1 lower-upper-column-1 l -del-upper-column-2 lower-upper-column-1 l -del-upper-column-3 lower-upper-column-1 l -del-upper-column-1 end-upper-column-1 r -del-upper-column-2 end-upper-column-1 r -del-upper-column-3 end-upper-column-1 r - -lower-upper-column-1 A d -lower-upper-column-2 B d -lower-upper-column-3 C d -lower-upper-column-1 - u -lower-upper-column-2 ? u -lower-upper-column-3 ! u - -del-upper-column-1 D d -del-upper-column-2 E d -del-upper-column-3 F d -del-upper-column-1 / u -del-upper-column-2 . u -del-upper-column-3 , u - -end-upper-column-1 G d -end-upper-column-2 H d -end-upper-column-3 I d -end-upper-column-1 space-upper-x6-y3 u -end-upper-column-2 space-upper-x7-y3 u -end-upper-column-3 space-upper-x8-y3 u - -space-upper-x8-y2 space-lower-x8-y2 select -space-upper-x8-y2 R u -space-upper-x8-y2 space-upper-x8-y3 d -space-upper-x8-y2 Z l -space-upper-x8-y2 S r - -space-upper-x8-y3 MN select -space-upper-x8-y3 space-upper-x8-y2 u -space-upper-x8-y3 end-upper-column-3 d -space-upper-x8-y3 space-upper-x7-y3 l -space-upper-x8-y3 - r - -space-upper-x7-y3 PK select -space-upper-x7-y3 Z u -space-upper-x7-y3 end-upper-column-2 d -space-upper-x7-y3 space-upper-x6-y3 l -space-upper-x7-y3 space-upper-x8-y3 r - -space-upper-x6-y3 ] select -space-upper-x6-y3 Y u -space-upper-x6-y3 end-upper-column-1 d -space-upper-x6-y3 , l -space-upper-x6-y3 space-upper-x7-y3 r - -end-upper-column-1 end-lower-column-1 select -end-upper-column-2 end-lower-column-2 select -end-upper-column-3 end-lower-column-3 select -lower-upper-column-1 lower-lower-column-1 select -lower-upper-column-2 lower-lower-column-2 select -lower-upper-column-3 lower-lower-column-3 select -del-upper-column-1 del-lower-column-1 select -del-upper-column-2 del-lower-column-2 select -del-upper-column-3 del-lower-column-3 select - -lower-lower-column-1 × u -lower-lower-column-2 ( u -lower-lower-column-3 ) u -lower-lower-column-1 a d -lower-lower-column-2 b d -lower-lower-column-3 c d - -end-lower-column-1 ] u -end-lower-column-2 PK u -end-lower-column-3 MN u -end-lower-column-1 g d -end-lower-column-2 h d -end-lower-column-3 i d - -del-lower-column-1 : u -del-lower-column-2 ; u -del-lower-column-3 [ u -del-lower-column-1 d d -del-lower-column-2 e d -del-lower-column-3 f d - -- × select -- S u -- lower-upper-column-1 d -- space-upper-x8-y3 l -- ? r - -? ( select -? T u -? lower-upper-column-2 d -? - l -? ! r - -! ) select -! U u -! lower-upper-column-3 d -! ? l -! / r - -/ : select -/ V u -/ del-upper-column-1 d -/ ! l -/ . r - -. ; select -. W u -. del-upper-column-2 d -. / l -. , r - -, [ select -, X u -, del-upper-column-3 d -, . l -, space-upper-x6-y3 r - -× - select -× s u -× upper-lower-column-1 d -× MN l -× ( r - -( ? select -( t u -( upper-lower-column-2 d -( × l -( ) r - -) ! select -) u u -) upper-lower-column-3 d -) ( l -) : r - -: / select -: v u -: del-lower-column-1 d -: ) l -: ; r - -; . select -; w u -; del-lower-column-2 d -; : l -; [ r - -[ , select -[ x u -[ del-lower-column-3 d -[ ; l -[ ] r - -] space-upper-x6-y3 select -] y u -] end-lower-column-1 d -] [ l -] PK r - -PK space-upper-x7-y3 select -PK z u -PK end-lower-column-2 d -PK ] l -PK MN r - -MN space-upper-x8-y3 select -MN space-lower-x8-y2 u -MN end-lower-column-3 d -MN PK l -MN × r - -space-lower-x8-y2 space-upper-x8-y2 select -space-lower-x8-y2 r u -space-lower-x8-y2 MN d -space-lower-x8-y2 z l -space-lower-x8-y2 s r - -a A select -a upper-lower-column-1 u -a j d -a i l -a b r - -b B select -b upper-lower-column-2 u -b k d -b a l -b c r - -c C select -c upper-lower-column-3 u -c l d -c b l -c d r - -d D select -d del-lower-column-1 u -d m d -d c l -d e r - -e E select -e del-lower-column-2 u -e n d -e d l -e f r - -f F select -f del-lower-column-3 u -f o d -f e l -f g r - -g G select -g end-lower-column-1 u -g p d -g f l -g h r - -h H select -h end-lower-column-2 u -h q d -h g l -h i r - -i I select -i end-lower-column-3 u -i r d -i h l -i a r - -j J select -j a u -j s d -j r l -j k r - -k K select -k b u -k t d -k j l -k l r - -l L select -l c u -l u d -l k l -l m r - -m M select -m d u -m v d -m l l -m n r - -n N select -n e u -n w d -n m l -n o r - -o O select -o f u -o x d -o n l -o p r - -p P select -p g u -p y d -p o l -p q r - -q Q select -q h u -q z d -q p l -q r r - -r R select -r i u -r space-lower-x8-y2 d -r q l -r j r - -s S select -s j u -s × d -s space-lower-x8-y2 l -s t r - -t T select -t k u -t ( d -t s l -t u r - -u U select -u l u -u ) d -u t l -u v r - -v V select -v m u -v : d -v u l -v w r - -w W select -w n u -w ; d -w v l -w x r - -x X select -x o u -x [ d -x w l -x y r - -y Y select -y p u -y ] d -y x l -y z r - -z Z select -z q u -z PK d -z y l -z space-lower-x8-y2 r""" - -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 |