Es scheint diesen anhaltenden Wahnsinn zu geben, wenn Leute mühsam neue Tastaturlayouts wie Dvorak oder Neo erlernen, weil sie dadurch angeblich produktiver werden. Ich behaupte, dass das Wechseln des Tastaturlayouts eine schlechte Idee ist, da es Monate dauern kann, bis Sie auf dem neuesten Stand sind, und wenn Sie im Endeffekt 5% schneller als der Rest sind, sind Sie fertig, wenn Sie auf einem nicht kompatiblen Computer tippen müssen nicht deine eigene.
Außerdem vergessen all diese Menschen, wo der eigentliche Engpass in der modernen Kommunikation liegt - die Telefontastatur.
So sieht eine durchschnittliche Telefontastatur aus:

Buchstabe 'r' ist der dritte Buchstabe auf Knopf 7; Wenn Sie also auf einem Mobiltelefon den Buchstaben "r" eingeben, drücken Sie die Taste 7 dreimal, bei "s" viermal und bei "a" einmal die Taste 2.
In Anbetracht dessen war es wahrscheinlich eine schlechte Entscheidung, "e" nach "d" zu setzen - "e" ist der am häufigsten verwendete Buchstabe im englischen Alphabet. Wenn Sie also Knopf 3 "EDF" anstelle von "DEF" beschriften, haben Sie würde ziemlich viele Tastenanschläge sparen.
Darüber hinaus haben Sie wahrscheinlich selbst erlebt, dass die Eingabe von 2 Buchstaben, die dieselbe Schaltfläche haben, ein Ärgernis ist. Wenn Sie "TU" schreiben möchten, können Sie nicht einfach dreimal 8 drücken, da dies zu "V" führen würde. Normalerweise schreibst du 'T', drückst dann die Leertaste, drückst dann die Rücktaste und dann 'U', was 5 Tastendrücken anstelle von 3 entspricht.
TL; DR
Angesichts dieser beiden Regeln:
- Ein Buchstabe wird durch n-maliges Drücken einer Taste eingegeben, wobei n die Position ist, an der sich der Buchstabe auf der Beschriftung der Taste befindet
- Das Schreiben von zwei Buchstaben, die mit derselben Taste eingegeben wurden, erfordert zusätzliche 2 Tastendrücke
Wie sieht das Layout der Telefontastatur aus, bei dem bei einem bestimmten Text am wenigsten gedrückt werden muss? Sie sollten nur die Tasten 2-9 verwenden, 1 und 0 sind für spezielle Symbole reserviert.
Eingang
Der Text, für den Sie das optimale Layout finden sollten, wird über stdin geliefert. Sie müssen nichts anderes als das Kleinbuchstaben behandeln und können davon ausgehen, dass die Eingabe nur aus diesem besteht. Sie können auch davon ausgehen, dass der eingegebene Text ziemlich groß ist und jeder Buchstabe mindestens einmal darin enthalten ist, wenn dies hilfreich ist.
Ausgabe
Ich möchte die Ausgabe nicht zu stark einschränken, da dies manchmal einige Sprachen gegenüber anderen vorteilhafter macht. Wenn Ihre Sprache jedoch Arrays anzeigt, ist dies in Ordnung. Alternativ können Sie jedes Etikett mit einem Zeilenumbruch trennen.
Möglicherweise gibt es mehrere optimale Layouts. Sie können eines davon drucken. Hier ist ein einfaches Beispiel:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
Bonuspunkte
-35 wenn Ihr Algorithmus nicht alle möglichen Layouts brachial erzwingt (ich schaue hier auf Haskells `Permutationen ')
-3 wenn Ihr Code in eine Textnachricht passt (140 Zeichen) und Sie ein Bild von Ihnen posten, das Ihren Code an einen Freund sendet.
Dies ist meine erste Herausforderung bei StackExchange. Ich würde mich freuen zu hören, ob es Ihnen gefällt oder ob Sie ein anderes Feedback dazu haben!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77eindeutige Permutationen, bei denen die einfachen Neuanordnungen der Tasten nur einmal gezählt werden.