DvorakやNeoのような新しいキーボードレイアウトを退屈に学んでいる人々に対するこの継続的な流行は、生産性を高めていると思われるためです。キーボードレイアウトを切り替えるのは悪い考えだと思います。スピードを上げるのに数か月かかることがあり、他のコンピューターよりも最終的に5%速くなったときに、コンピューターで入力する必要がある場合はめちゃくちゃになります自分ではない。
また、これらすべての人々は、現代のコミュニケーションの本当のボトルネックがどこにあるのか、電話のキーパッドを忘れています。
これは、平均的な電話キーパッドの外観です。
文字「r」はボタン7の3番目の文字です。したがって、携帯電話で文字「r」を入力する場合、ボタン7を3回押し、「s」の場合は4回押し、「a」の場合はボタン2を1回押します。
これを考慮すると、「d」の後に「e」を付けるのはおそらく悪い決定でした-「e」は英語のアルファベットで最も一般的に使用される文字です。したがって、「DEF」の代わりにボタン3「EDF」にラベルを付けると、キーストロークをかなり節約できます。
さらに、同じボタンを共有する2文字を入力するのは面倒であることに気付いたでしょう。「TU」を書きたい場合、「V」になるので8を3回押すだけではいけません。したがって、通常は「T」と入力し、スペースを押してからバックスペースを押し、「U」と入力します。これは、3回ではなく5回のボタンを押す操作に相当します。
TL; DR
次の2つのルールがある場合:
- ボタンをn回押すと、文字が入力されます。nは、ボタンのラベル上の文字の位置です。
- 同じボタンを使用して入力される2つの文字を書くには、追加の2ボタンを押す必要があります
特定のテキストが与えられた場合、ボタンを押す必要が最も少ない電話キーボードレイアウトは何ですか?ボタン2〜9のみを使用する必要があり、1と0は特別なシンボル用に予約されています。
入力
最適なレイアウトを見つける必要があるテキストは、stdinを介して提供されます。小文字のアルファベット以外のものを処理する必要はなく、入力がそれだけで構成されていると想定できます。また、入力テキストが適度に大きく、すべての文字が少なくとも一度はそこにあると想定できます(それが役立つ場合)。
出力
出力にあまり多くの制約を付けたくありません。これは、一部の言語が他の言語よりも有利になる場合があるためです。ただし、言語で配列が適切であると示されている場合は、各ラベルを改行で区切ることもできます。
最適なレイアウトは複数存在する可能性があり、それらのいずれかを印刷できます。以下に簡単な例を示します。
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
ボーナスポイント
-35アルゴリズムがすべての可能なレイアウトを強引に強制していない場合(ここではHaskellの「順列」を調べています)
-3コードがテキストメッセージ(140文字)に収まり、コードを友人に送信する写真を投稿した場合。
これはStackExchangeでの最初の課題です。私はあなたがそれを好むかどうか、またはそれについて他のフィードバックがあるかどうか聞いてうれしいです!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
単純な再配置を1回だけカウントするユニークな順列があります。