Menüverknüpfungen
Auf Benutzermenüs kann traditionell über Tastaturkürzel zugegriffen werden, z. B. durch Alt + (a letter)
einfaches Drücken des Buchstabens, wenn alle Textfelder nicht fokussiert sind ( Google Mail- Stil).
Deine Aufgabe
Angesichts der Menüeinträge als Eingabe besteht Ihre Aufgabe darin, jedem Menüeintrag einen richtigen Verknüpfungsbuchstaben zuzuweisen.
Schreiben Sie eine Funktion oder ein Programm, das eine Reihe von Wörtern akzeptiert - die Menüeinträge (als Array von Zeichenfolgen oder Ihr Sprachäquivalent) und ein Wörterbuch oder eine Hashmap von einem einzelnen Buchstaben zu einem Menüeintrag zurückgibt.
Sie können entweder einen Parameter verwenden und einen Wert zurückgeben oder STDIN verwenden und Ihre Ergebnisse an STDOUT ausgeben. Sie dürfen nicht davon ausgehen, dass eine globale Variable / scope bereits mit der Eingabe gefüllt ist.
Algorithmus zur Bestimmung des richtigen Buchstabens
- Grundsätzlich ist es der erste verfügbare Buchstabe des Wortes. Siehe Annahmen und Beispiele unten.
- Falls nicht alle Buchstaben des Eintrags verfügbar sind, wird die Verknüpfung angezeigt
(a letter) + (a number)
. Welcher Buchstabe Sie aus dem Eintrag auswählen, ist beliebig. Die Zahl sollte bei 0 beginnen und um 1 erhöht werden - damit alle Verknüpfungen eindeutig sind. Siehe drittes Beispiel unten.
Annahmen
- Die Eingabe ist ein Set, dh keine Wiederholungen, jeder Eintrag ist eindeutig.
- Die Länge der Eingabe kann eine beliebige nicht negative Ganzzahl sein (bis zu MAX_INT Ihrer Sprache).
- Groß- und Kleinschreibung beachten: Die Eingabe unterscheidet zwischen Groß- und Kleinschreibung (bleibt jedoch eindeutig, wenn Groß- und Kleinschreibung ignoriert wird). Die Ergebnisse sollten die Originaleinträge mit ihrem Originalgehäuse enthalten. Bei den Ausgabe-Verknüpfungsbuchstaben wird jedoch nicht zwischen Groß- und Kleinschreibung unterschieden.
- Alle eingegebenen Wörter enden nicht mit Zahlen.
- Es wird kein "böser Input" getestet. "Böse Eingabe" ist so, dass Sie den Zähler eines bestimmten Buchstabens mehr als 10 Mal erhöhen müssen.
Beispiele
Die folgenden Beispiele sind in JSON enthalten. Sie können jedoch Ihr Sprachäquivalent für ein Array und ein Wörterbuch verwenden oder - falls Sie STD I / O verwenden - ein beliebiges lesbares Format für Ihre Eingabe und Ausgabe (z. B. CSV oder sogar Leerzeichen). getrennte Werte).
1.
Input: ['File', 'Edit', 'View', 'Help']
Output: {f:'File', e:'Edit', v:'View', h:'Help'}
2.
Input: ['Foo', 'Bar', 'FooBar', 'FooBars']
Output: {f:'Foo', b:'Bar', o:'FooBar', a:'FooBars'}
3.
Input: ['a', 'b', 'aa', 'bb', 'bbq', 'bbb', 'ba']
Output: {a:'a', b:'b', a0:'aa', b0:'bb', q:'bbq', b1:'bbb', b2:'ba'}
Gewinnbedingungen
Der kürzeste Code gewinnt. Nur ASCII ist erlaubt.
['ab', 'a']
geben{a:'ab', a0:'a'}
oder{b:'ab', a:'a'}
?Antworten:
Javascript ( ES6 )
106105100Diese Funktion nimmt die Eingabe als Array und gibt ein Javascript-Objekt aus.
Ergebnisse:
Ungolfed / Kommentiert:
quelle
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaaa', 'aaaaaaaaaaaa']
, aber ich denke, wir können solche Randfälle ignorieren, nicht wahr?11
? Sie können die eine Taste in einer Tastenkombination nicht zweimal drücken: PPython 2.x -
176 170 157114 BytesSehr einfacher Ansatz, aber jemand muss das Spiel in Gang bringen.
Beispiele:
Ich denke, die einzige erforderliche Erklärung ist der ungolfed Code. (Dies ist eigentlich die Originalversion)
quelle
JavaScript (ECMAScript 6) - 107 Zeichen
Erläuterung:
Tests:
quelle
PHP> = 5,4 - 149 Zeichen
Gemäß den PHP-Standards (hier Snigger einfügen) ist die Eingabe nicht gültig, da JSON
'
anstelle von verwendet wird. Daher war"
ich etwas frech und verwende die Eingabe als tatsächliche Variablendeklaration:Anhand der Beispiele:
Ohne Golf ist es ziemlich einfach:
quelle
json_encode
Aufruf entfernen .)echo
funktioniert nicht mit Arrays;print_r($c);
würde es aber tun und 9 Bytes sparen.str_split(strtoupper($w))
unducfirst($w[0])
kann das lösen (+21); oder$s=strtoupper($w);
(+18)PowerShell ,
9183 ByteProbieren Sie es online aus!
Es wird eine Ausnahme ausgelöst, wenn keine richtige Verknüpfung gefunden wurde.
Abgerollt:
quelle
PHP, 153 Bytes
Laufen Sie mit
php-r '<code>' <<EOF
+ Enter +<word1>
+ Enter +<word2>
+ Enter + ... +EOF
+ EnterArbeiten an argv für 155 Bytes :
laufen mit
php -r '<code>' <word1> <word2> ...
(-13 Bytes mit einem definierten globalen:
foreach($i as$w)
anstelle vonforeach($argv as$i=>$w)if($i)
)quelle