ВХОД: Любая строка, состоящая исключительно из строчных букв через аргумент функции, аргумент командной строки, STDIN или аналогичный.
ВЫХОД: Напечатайте или верните число, которое будет представлять сумму расстояний букв в соответствии со следующей метрикой:
Вы берете первую и вторую букву и подсчитываете расстояние между ними. Расстояние определяется раскладкой клавиатуры QWERTY, где каждая соседняя буква в той же строке имеет расстояние 1, а каждая соседняя буква в том же столбце имеет расстояние 2. Чтобы измерить расстояние между несмежными буквами, вы выбираете кратчайший путь. между двумя.
Примеры:
q->w is 1 distance apart
q->e is 2 distance
q->a is 2 distance
q->s is 3 distance (q->a->s or q->w->s)
q->m is 10 distance
Затем вы берете вторую и третью букву, затем третью и четвертую и т. Д., Пока не дойдете до конца ввода. Выходными данными является сумма всех этих расстояний.
Пример ввода и вывода:
INPUT: qwer
OUTPUT: 3
INPUT: qsx
OUTPUT: 5
INPUT: qmq
OUTPUT: 20
INPUT: tttt
OUTPUT: 0
Вот изображение, показывающее, какие буквы находятся в одном столбце:
Это код гольф, поэтому выигрывает самый короткий код в байтах!
Ответы:
CJam, 50 байтов
Обратите внимание, что код содержит непечатаемые символы.
Попробуйте онлайн в интерпретаторе CJam . Если постоянная ссылка не работает, скопируйте код из этой вставки .
Фон
Мы начинаем присваивать позиции от 0 до 9 буквам в верхнем ряду, 10 до 18 буквам в домашнем ряду и от 20 до 26 буквам в нижнем ряду.
Позиции всех 26 букв в алфавитном порядке
Это массив длиной 26. Так как массивы оборачиваются в CJam, а кодовая точка буквы h равна 104 = 4 × 26 , мы поворачиваем массив на 7 единиц влево, чтобы доступ к позиции каждой буквы осуществлялся ее кодовая точка.
Теперь мы закодируем этот массив, рассматривая его элементы в цифрах от базового числа 27 и преобразуем полученное целое число в основание 257.
Заменяя каждое целое число на соответствующий символ Unicode, мы получаем строку из исходного кода.
Как это устроено
источник
Python 2,
220...124119 байтОгромное спасибо Sp3000 за сохранение большого количества байтов.
Использование:
Проверьте это здесь.
Слегка разгромленный + объяснение:
источник
Java, 266 байт
Безголовая версия:
источник
int v=0,l=q.length(),p[][]=new int[l][2];
SWI-пролог, 162 байта
Пример:
a(`qmq`)
выходы20
(Аtrue
после этого, но я ничего не могу с этим поделать).Редактировать: пришлось использовать еще 3 байта. Моя оригинальная программа прошла заданные тестовые случаи, но на самом деле была неверна (абсолютные значения были потеряны / отсутствуют)
Примечание: если вы хотите использовать его, скажем, Ideone , вы должны заменить все обратные
`
кавычки на двойные кавычки"
. Обратные кавычки в моем случае (который является текущим стандартом в SWI-Prolog) представляют собой список кодов для строк и символьных строк в двойных кавычках, но это отличается в более старых версиях SWI-Prolog.источник