2017-07-04 77 views
1

道歉提前,因为我明白大致没有什么对这里发生的事情,但是这似乎是问的地方......生成速记键盘的所有可能的排列组合吗?

我希望从速记键盘产生的所有可能的单招同步: https://en.wikipedia.org/wiki/Stenotype#Keyboard_layout

的速记键盘包含23个按键 - 主22:

STKPWHRAO*EUFRPBLGTSDZ 

如果没有AO *欧盟按键都包括在内,连字符是在他们的地方使用,所以这个序列的所有排列也必要:

STKPWHR-FRPBLGTSDZ 

第23关键是多少吧,这会改变一些按键的,所以这些排列,虽然分开,也将有助于:

#12K3W4RAT50*EU6R7B8G9SDZ 
#12K3W4R-6R7B8G9SDZ 

在单同时击键,任何键将始终按照上述顺序进行识别;他们要么被选中要么被忽略。例如,如果包含“Z”,它将始终是任何排列的最后一个键。我试图产生所有潜在的排列,包括个别密钥的排列。

键盘中间的连字符或星号有助于区分键盘两侧的键(S,T,P,R)。例如,对于单个按键,您可以在键盘左侧列出“T-”,在键盘右侧列出“-T”。键盘的整个左边是“STKPWHR-”;整个右岸将是“-FRPBLGTSDZ”。

我天真地认为有一个简单的方法来产生这个在线,但是...我以前错了。从我所能找到的内容来看,主要的障碍似乎是让人物顺序排列。我可以很容易地删除任何重复,其中有四个序列中会有很多重复。

即使是涉及23个密钥中的10个密钥的排列也是巨大的帮助;很少有15个或更多的钥匙可以同时使用。

任何帮助非常感谢!

+0

你在找,所有的组合的文本文件输出什么?你想考虑“不可能”的组合(允许-SD,-TZ的费城转变)吗? 或者你只是想根据你可以与每一边做出的组合数量来计数/统计数据吗? ? –

回答

0

我在Python中编写了一个脚本,它可以像你想要的那样生成steno命令的组合。一些注意事项:

  • 这与一些Plover代码类似,它也是用Python编写的。
  • 这段代码会产生不可能组合的和弦(除非你使用费城转换,例如-SD,-TZ,-TSD,-SDZ等)
  • 我还包括数字栏输出。

有很多组合......和弦范围从1到10个键我有1,698,159个结果。对于1到23,有8,388,606个可能的和弦。

Here are the possible chords with 1 to 10 keys(请注意,由于大量数据,此页面加载速度会很慢)。

这里是我用来生成此文件中的脚本:

from itertools import combinations 
steno_order = (
    '#', 'S-', 'T-', 'K-', 'P-', 'W-', 'H-', 'R-', 
    'A', 'O', '*', 'E', 'U', 
    '-F', '-R', '-P', '-B', '-L', '-G', '-T', '-S', '-D', '-Z', 
) 
steno_to_number ={ 
    'S-': '1-', 
    'T-': '2-', 
    'P-': '3-', 
    'H-': '4-', 
    'A': '5', 
    'O': '0', 
    '-F': '-6', 
    '-P': '-7', 
    '-L': '-8', 
    '-T': '-9', 
} 

def combinations_of_steno_order(min_keys, max_keys): 
    assert min_keys < max_keys, 'Chord size must increase' 
    for i in range(min_keys, max_keys): 
     for chord in combinations(steno_order, i): 
      shortform = '' 
      add_hyphen = True 
      if chord[0] == '#': 
       # Convert to numbers if number bar is pressed. 
       chord = [steno_to_number.get(steno_key, steno_key) for steno_key in chord] 
      for steno_key in chord: 
       if steno_key == '#': 
        shortform += steno_key 
       elif steno_key[-1] == '-': 
        # Left-hand 
        shortform += steno_key[0] 
       elif steno_key[0] == '-': 
        # Right-hand 
        if add_hyphen: 
         shortform += '-' 
         add_hyphen = False 
        shortform += steno_key[1] 
       else: 
        # Center key 
        add_hyphen = False 
        shortform += steno_key 
      yield shortform 

print('\n'.join(list(combinations_of_steno_order(1, 10)))) 
+0

这是我见过的最令人印象深刻的事情。我们可以通过这里的答案推荐骑士服饰吗? 要回答您的问题,这是为实际应用而设计的 - 基本上作为任何尚未定义的单笔划的备份。 不够感谢你! –

+0

布鲁斯没问题。授予答案的最佳方式是“接受”答案。请参阅:https://stackoverflow.com/help/someone-answers –