提前道歉,因为我对这里发生的事情一无所知,但这似乎是要问的地方......
我希望从速记键盘中生成所有可能的单个同步笔画: https://en.wikipedia.org/wiki/Stenotype#Keyboard_layout
速记键盘包含23个键 - 主要22:
STKPWHRAO*EUFRPBLGTSDZ
如果没有包含AO * EU键,则在其位置使用连字符,因此此序列的所有排列也是必要的:
STKPWHR-FRPBLGTSDZ
第23个键是数字栏,它改变了一些键,因此这些键的排列虽然是单独的,但也会有所帮助:
#12K3W4RAT50*EU6R7B8G9SDZ
#12K3W4R-6R7B8G9SDZ
在单个同时按键中,任何按键将始终按上述顺序识别;他们要么被选中,要么被忽略了。例如,如果包含“Z”,它将始终是任何排列的最后一个键。我正在尝试生成所有可能的排列,包括单个键的排列。
键盘中间的连字符或星号有助于区分键盘两侧的键(S,T,P,R)。例如,对于单个按键,您可以在键盘左侧列出“T-”,在键盘右侧列出“-T”。键盘的整个左岸将是“STKPWHR-”;整个右岸都是“-FRPBLGTSDZ”。
我天真地假设有一种简单的方法可以在线生成这个,但是......我以前错了。从我能够找到的,主要的障碍似乎是按顺序保持角色。我可以轻松删除任何重复项,其中有四个序列中有许多重复项。
即使是涉及23个最多10个键的排列也是一个巨大的帮助;很难同时使用15个或更多的密钥。
非常感谢任何帮助!
答案 0 :(得分:0)
我在Python中编写了一个脚本,它会像你想要的那样生成steno顺序的组合。一些说明:
有很多组合......用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))))