Skróty menu
Tradycyjnie menu użytkownika są dostępne za pomocą skrótów klawiaturowych, takich jak Alt + (a letter)
, a nawet po prostu naciśnięcie litery, gdy wszystkie pola tekstowe są nieaktywne ( styl Gmaila ).
Twoje zadanie
Biorąc pod uwagę pozycje menu jako dane wejściowe, Twoim zadaniem jest nadanie każdej pozycji menu odpowiedniej litery skrótu.
Napisz funkcję lub program, który akceptuje zestaw słów - pozycje menu (jako tablicę ciągów lub odpowiednik języka) i zwraca słownik lub skrót od jednej litery do pozycji menu.
Możesz albo użyć parametru i zwrócić wartość, albo użyć STDIN i wyprowadzić wyniki do STDOUT. Teraz nie wolno zakładać zmienną globalną / zakres jest już wypełniona wejścia.
Algorytm określający właściwą literę
- Zasadniczo jest to pierwsza dostępna litera tego słowa. Zobacz założenia i przykłady poniżej.
- W przypadku, gdy wszystkie litery wpisów nie są dostępne, skrót będzie
(a letter) + (a number)
. Która litera, którą wybierzesz z wpisu, jest dowolna. Liczba powinna zaczynać się od 0 i być zwiększana o 1 - tak, aby wszystkie skróty były unikalne. Zobacz trzeci przykład poniżej.
Założenia
- Wejście będzie zbiorem, tzn. Bez powtórzeń, każdy wpis jest unikalny.
- Długość wejścia może być dowolną nieujemną liczbą całkowitą (do MAX_INT twojego języka).
- Rozróżnianie wielkości liter: w danych wejściowych rozróżniana jest wielkość liter, (ale pozostanie unikalna, gdy ignoruje wielkość liter). Wyniki powinny zawierać oryginalne wpisy w oryginalnej obudowie. Jednak w wyjściowych literach skrótów nie jest rozróżniana wielkość liter.
- Wszystkie wprowadzone słowa nie kończą się cyframi.
- Żadne „złe wejście” nie będzie testowane. „Złe wejście” powoduje, że musisz zwiększyć licznik pewnej litery więcej niż 10 razy.
Przykłady
Poniższe przykłady są w języku JSON, ale możesz użyć swojego odpowiednika językowego dla tablicy i słownika lub - w przypadku korzystania ze STD I / O - dowolnego czytelnego formatu dla danych wejściowych i wyjściowych (np. Csv, a nawet spacja- wartości rozdzielone).
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'}
Warunki wygranej
Najkrótszy kod wygrywa. Dozwolone jest tylko ASCII.
['ab', 'a']
dać{a:'ab', a0:'a'}
lub{b:'ab', a:'a'}
?Odpowiedzi:
JavaScript ( ES6 )
106105100Ta funkcja przyjmuje dane wejściowe jako tablicę i generuje obiekt javascript.
Wyniki:
Niegolfowane / komentowane:
źródło
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaaa', 'aaaaaaaaaaaa']
, ale myślę, że możemy zignorować takie przypadki skrajne, prawda?11
? Nie można nacisnąć tego klawisza dwa razy w skrócie klawiaturowym: PPython 2.x -
176 170 157114 bajtówBardzo proste podejście, ale ktoś musi zacząć grę.
Przykłady:
Wydaje mi się, że jedynym wymaganym wyjaśnieniem jest niepoznany kod. (To faktycznie jest oryginalna wersja)
źródło
JavaScript (ECMAScript 6) - 107 znaków
Wyjaśnienie:
Testy:
źródło
PHP> = 5,4 - 149 znaków
Zgodnie ze standardami PHP (wstaw tutaj sniggery) , dane wejściowe nie są poprawne JSON, ponieważ są używane
'
zamiast"
, więc byłem trochę bezczelny i używam Input jako rzeczywistej deklaracji zmiennej:Korzystając z przykładów:
Bez golfa jest to dość podstawowe:
źródło
json_encode
wywołanie).echo
nie działa z tablicami; aleprint_r($c);
zrobiłby to, oszczędzając 9 bajtów.str_split(strtoupper($w))
iucfirst($w[0])
może rozwiązać ten problem (+21); lub$s=strtoupper($w);
(+18)PowerShell ,
9183 bajtówWypróbuj online!
Zgłasza wyjątek, jeśli nie znaleziono odpowiedniego skrótu.
Rozwinięty:
źródło
PHP, 153 bajty
uruchom z
php-r '<code>' <<EOF
+ Enter +<word1>
+ Enter +<word2>
+ Enter + ... +EOF
+ Enterpraca na argv dla 155 bajtów :
Biegnij z
php -r '<code>' <word1> <word2> ...
(-13 bajtów ze zdefiniowanym globalnym:
foreach($i as$w)
zamiastforeach($argv as$i=>$w)if($i)
)źródło