Przed przeczytaniem proponuję przeczytać tę małą łamigłówkę: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard
Chcę, abyś utworzył program, który pobiera jeden argument, słowo (tylko małe litery) i wyświetla „Tak”, jeśli słowo można wpisać za pomocą sąsiednich klawiszy na klawiaturze (patrz artykuł) i „Nie”, jeśli słowo może nie będą pisane przylegającymi literami.
Oto układ klawiatury zastosowany w tym wyzwaniu:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | W | E | R | T | Y | U | I | O | P |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘
| A | S | D | F | G | H | J | K | L |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘
| Z | X | C | V | B | N | M |
└───┴───┴───┴───┴───┴───┴───┘
Pamiętaj: to kodegolf, więc wygrywa najkrótsza odpowiedź!
code-golf
puzzle-solver
keyboard
Loovjo
źródło
źródło
Odpowiedzi:
Pyth, 66
Wypróbuj tutaj.
Zaskoczyło mnie, że Pyth nie ma funkcji przeciwprostokątnej, więc prawdopodobnie zostanie pokonany przez inny język. Zaproponuję Pythowi funkcję przeciwprostokątną, więc to okrucieństwo nie nastąpi w przyszłości.
Wyjaśnienie
Przekształcam klawiaturę w to:
Które następnie koduję jako
"qwertyuiopasdfghjkl*zxcvbnm"
. Następnie użyłem divmod z modułem 9.5, aby obliczyć współrzędne 2D każdego klawisza. Następnie obliczam odległości między kolejnymi klawiszami i sprawdzam, czy kwadratowa odległość <2.źródło
CJam,
837574 bajtyWypróbuj online.
Wyjaśnienie
Ogólne podejście polega na utworzeniu dużego ciągu sąsiedniego zawierającego każdą parę sąsiednich znaków klawiatury, a następnie sprawdzenie, czy każda para sąsiednich znaków wejściowych jest zawarta w tym ciągu.
Jestem całkiem zadowolony z tego, jak udało mi się zbudować ciąg sąsiedztwa, który wykorzystuje bardzo prostą i zwartą logikę.
źródło
J, 77 bajtów
Stosowanie:
Metoda:
Dla każdej litery wejściowej generuję jej współrzędną 2D (podobną do obrazu w pytaniu) na podstawie jej indeksu w ciągu
'qazwsxedcrfvtgbyhnujmikXolX'
. Dla każdej pary liter na wejściu sprawdzam, czy odległość ich współrzędnych na Manhattanie jest mniejsza niż 2. Jeśli wszystkie są, wyprowadzam daneYes
, wNo
przeciwnym razie (nadużywając operatora `).Wypróbuj online tutaj.
źródło
p
.i.
operator zwraca wartość,index of the last element + 1
dzięki czemu mogę zapisać 1 bajt, nie zapisując gop
i nadal uzyskując poprawny indeks.CJam, 75
Wypróbuj tutaj ( Firefox tutaj ).
Przegapił część Tak / Nie ... Naprawiono.
źródło