Прежде чем читать это, я предлагаю прочитать эту маленькую головоломку: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard
Я хочу, чтобы вы создали программу, которая принимает один аргумент, слово (только строчные буквы) и выводит «Да», если слово можно набирать с помощью смежных клавиш на клавиатуре (см. Статью), и «Нет», если слово может не набирайте соседними буквами.
Вот раскладка клавиатуры, используемая в этом вызове:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| 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 |
└───┴───┴───┴───┴───┴───┴───┘
Помните: это Codegolf, поэтому выигрывает самый короткий ответ!
code-golf
puzzle-solver
keyboard
Loovjo
источник
источник
Ответы:
Пиф, 66
Попробуй это здесь.
Я был удивлен, узнав, что у Pyth нет функции гипотенузы, так что это, вероятно, будет побеждено другим языком. Я предложу Пифу функцию гипотенузы, чтобы в будущем этого зверства не случилось.
объяснение
Я превращаю клавиатуру в это:
Который я тогда закодирую как
"qwertyuiopasdfghjkl*zxcvbnm"
. Затем я использовал divmod с модулем 9.5, чтобы выяснить 2D-координаты каждой клавиши. Затем я вычисляю расстояния между последовательными клавишами и проверяю, является ли расстояние в квадрате <2.источник
CJam,
837574 байтаПопробуйте онлайн.
объяснение
Общий подход состоит в том, чтобы создать большую строку смежности, содержащую каждую пару смежных символов клавиатуры, а затем проверить, что каждая пара смежных символов ввода содержится в этой строке.
Я вполне доволен тем, как мне удалось построить строку смежности, которая использует очень простую и компактную логику.
источник
J 77 байт
Использование:
Метод:
Для каждой входной буквы я генерирую ее 2D координату (аналогичную изображению в вопросе) на основе ее индекса в строке
'qazwsxedcrfvtgbyhnujmikXolX'
. Для каждой пары букв на входе я проверяю, меньше ли их Манхэттенское расстояние их координат, чем 2. Если все они есть, я вывожуYes
,No
в противном случае (при злоупотреблении `оператора).Попробуйте это онлайн здесь.
источник
p
.i.
оператор возвращает значение,index of the last element + 1
поэтому я могу сохранить 1 байт, не выписываяp
и сохраняя правильный индекс.CJam, 75
Попробуйте это здесь ( Firefox здесь ).
Проигнорировал часть Да / Нет ... Исправлено.
источник