To pytanie wymaga funkcji dopasowania słownika T9, co jest bardzo interesującym problemem. Ale T9 ma inny sposób pisania, czyli pisanie znak po znaku. NIE potrzebujesz słownika do implementacji tej klawiatury.
Oto mapa klawiszy klawiatury T9, jeśli zapomniałeś:
+-------+-------+-------+
| 1 | 2 | 3 |
| .?! | ABC | DEF |
+-------+-------+-------+
| 4 | 5 | 6 |
| GHI | JKL | MNO |
+-------+-------+-------+
| 7 | 8 | 9 |
| PQRS | TUV | WXYZ |
+-------+-------+-------+
| * | 0 | # |
| ← | SPACE | → |
+-------+-------+-------+
Jak działa T9
Aby wpisać znak za pomocą T9, musisz nacisnąć klawisz numeryczny reprezentujący n
czasy tego znaku . n
jest kolejnością tego znaku zapisanego na tym kluczu. Cyfry to ostatni znak, który możesz wpisać dla każdego klawisza. Na przykład, aby wpisać B
I, naciśnij 2
dwa razy lub, aby wpisać 5
I, naciśnij 5
cztery razy. Aby zakończyć wpisywanie tego znaku, naciskam #
. *
jest po prostu backspace. W naszej wersji klawiatury nie ma wielkich liter.
Przykłady danych wejściowych i wyjściowych:
8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD
Wyjaśnienie:
8
wybieraT
i#
przechodzi do następnej postaci99999
wybierz ostatni znak9
klucza, który jest9
i#
przechodzi do następnego znaku0
wstawia spację33
wybiera drugi znak3
klawisza, który jest,K
i#
przechodzi do następnego znaku- I tak dalej...
Zasady
Twoja funkcja lub program powinien akceptować ciąg reprezentujący naciśnięcia klawiszy T9. Wynik jest tekstem wynikowym z tych naciśnięć klawiszy, jak opisano powyżej.
Jest to podstawowy kod golfowy, więc zwycięzca ma najkrótszą bajt i obowiązują standardowe zasady / luki.
T9 KEYBOARD
jest całkowicie błędny. Ten czytaT9 JEYBARD
#
jeśli kolejne przyciski i tak są różne. powiedziane: bez tej premii, co by się stało, gdyby#
zostało pominięte?Odpowiedzi:
CJam,
10994 bajtów (2 nd premii)Bardzo naiwne i długie rozwiązanie
Jest to pełny program, chociaż funkcja będzie miała tę samą długość.
Wejście przechodzi w STDIN
Przykład:
Wynik:
Wypróbuj online tutaj
źródło
JavaScript ES6,
220-10 = 210178 bajtówW ramach CMC Helki wygrałem pierwsze wyzwanie.
Przykładowe wyniki:
Wyjaśnienie
Wprowadza to zastępowanie rekurencyjne, zastępując wszystkie znaki, po których następuje,
*
dopóki nie ma już żadnych znaków*
.To pasuje do wszystkich przebiegów kolejnych cyfr lub
*
s.Spowoduje to utworzenie pożądanego słownika, uzyskanie zakodowanej części z dużego łańcucha, a następnie dołączenie do niej żądanej cyfry.
To dostaje postać,
a
długość modulo .To przygotowuje ciąg do przetwarzania i usuwania
*
s.źródło
t("2#2");
dajeB
zamiastAA
. Spróbuj dopasować dowolne#
zamiast je usuwać.Python,167157151 bajtów(nie obsługuje „*”)
Nic specjalnego. Używam wyrażenia regularnego, aby przekonwertować dane wejściowe na listę, a następnie zapętlić wpisy. Używam pierwszego znaku i długości każdego wpisu, aby wyszukać go na liście odnośników:
Po golfie wygląda to tak:
Brak bonusów (jeszcze). Nie wiem, jak zaimplementowałbym pierwszy bonus w regexie. Drugi bonus dodałby dużo bajtów, ponieważ elementy wyszukiwania nie są tego samego rozmiaru. Naprawdę nie rozumiem trzeciej premii.
źródło
Perl 5: 106 (kod 104 + 2 flagi)
Zmodyfikowany do obsługi usuwania.
Stosowanie:
Perl 5: 88 (kod 86 + 2 flagi)Stara wersja bez gwiazdki-delete.
źródło
AWK 211 bajtów (z bonusami)
Jest to pełny program, który odczytuje dane wejściowe ze standardowego wejścia. Bardziej efektywne byłoby nierelitowanie klawiatury dla każdej linii, ale wydłużyłoby skrypt.
Również jeśli klucz „0” byłby inny niż 0, skrypt byłby o 4 bajty krótszy, ale to część gry: o)
źródło
C (245 bajtów)
Wynik
Wyjaśnienie
Liczba bajtów nie obejmuje ciągu wejściowego podanego w pierwszym
#define
.Używam dwuwymiarowej tablicy jako tabeli odnośników do wydrukowania znaku. Program wczytuje znaki rozdzielane przez
'#'
.Dla każdej grupy numer wejściowy określa indeks tablicy pierwszego wymiaru, a liczba powtórzeń numeru wejściowego określa indeks tablicy drugiego wymiaru. W
'*'
cofa indeks tablicy do łańcucha wyjściowego tak, aby zastąpić poprzedni list.Tak więc łańcuch wejściowy
44#
(1 powtórzenie'4'
) jest tłumaczony na tablicę odnośnikówK[4][1]
, która jest znakiemH
.Wersja bez golfa
źródło
Ruby
254,248, 229 bajtówGra w golfa:
Nie golfowany:
Wszystkie te specyfikacje powinny się powieść:
0 0
Odpowiedź wygląda trochę jak hacky rozwiązania. Zajmę się tym, kiedy będę miał czas.źródło
PHP, 183-10 = 173 bajtów
Wszystkie wersje pobierają dane wejściowe z argumentu wiersza poleceń; zadzwoń z
php -r '<code>' <string>
.Uwaga : Wszystkie wersje generują ostrzeżenie, jeśli dane wejściowe zaczynają się od
*
.Przygotuj
$o=[];
się do kodu, aby usunąć tę wadę.210-10 - ?? = ??? bajty
181 bajtów, bez premii
awaria
Wersje „no hash tags” dzielą ciąg na (ciąg równych liczb) i (gwiazdka) i zapominają o wszystkim innym. Wersja bez bonusu ma (pasmo liczb, po których następuje
#
) i (gwiazdka).Następnie przejdź przez dopasowania: Jeśli zostanie znalezione „*”, usuń ostatni element tablicy wyników.
Różnica między wersjami polega na
else
części:-1
.źródło
JavaScript, 147 bajtów
Odpowiedź Conora naprawiona przez regex z mojej odpowiedzi PHP i grała w golfa.
awaria
wersja obrotowa, 158 bajtów
dodano,
s=
aby zapamiętać ciąg i%s.length
obrócić.źródło