2017-07-04 68 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 –

相關問題