Вступление
В последнее время я привык печатать на Swype .
Я заметил, что некоторые слова могут быть получены путем рисования прямой линии от вашего начального до конечного или пропуская повторяющиеся буквы.
Например, я могу набрать слово с balloon
помощью Swyping через следующие буквы:
b> a> l> o> n.
Вызов
Давайте определим кратчайший путь Swype , или SSP
, как минимальное количество различимых отрезков линии, необходимых для ввода строки. Сегмент прямой представляет собой непрерывную прямую линию между любыми двумя или более буквами. При любом изменении направления начинается новый отрезок линии - хотя некоторые слова можно поменять местами, нарисовав только одну прямую линию.
Используйте эту простую раскладку клавиатуры QWERTY :
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
В приведенном выше примере, слово balloon
будет иметь SSP
из , 4
как подробно описано в последовательности ниже:
1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)
Строка qwerty
имеет SSP
= 1, так как при переключении этого слова изменение направления не требуется.
вход
Строка из одного слова, содержащая любое с a-z
помощью STDIN, аргумента функции или командной строки.
Выход
Напечатайте с помощью STDOUT, return или ваших ближайших альтернативных языков число, n
представляющее строку SSP
.
Один завершающий перевод новой строки необязателен в outut. Стандартные лазейки запрещены. Кратчайшая подача в байтах выигрывает.
Примечания
- Изменение направления запускает новый отрезок.
- Повторяющиеся буквы учитываются только один раз (например,
bookkeeper
должны рассматриваться какbokeper
). - Как правило, Swpye исправляет пропущенные буквы, просматривая соседние буквы и вводя свои лучшие предположения. Для этого предположим, что нет никаких дополнений на естественном языке, предиктивного текста или исправления ошибок.
- Прописные
A-Z
вводы обрабатываются как их строчные аналоги. - Игнорировать любые цифры
0-9
на входе. - Диагональные дорожки разрешены - то есть, прямая линия , которая охватывает буквы
o
,k
,n
, например, считается1
сегмент. Это правило относится к любым диагональная наклона (например , буквыc
,h
,i
в строке).
Примеры
Input Output
---------------------
a 0
aa 0
aaaaaa 0
aaaaaabc 2
in 1
int 2
java 3
qwerty 1
chicago 5
balloon 4
BALLOON 4
typewriter 5
bookkeeper 6
stackexchange 11
2hello7 3
2HELLO7 3
Ответы:
CJam,
7876736862 байтаОбратите внимание, что код содержит непечатаемые символы.
Занимая умную идею @ isaacg об использовании RLE для подсчета путей, сохраненных 6 байтов.
Попробуйте онлайн в интерпретаторе CJam . Если ссылка не работает, скопируйте код из этой вставки .
Как это устроено
источник
Pyth,
535049 байтовФормат сжатия клавиатуры благодаря @Dennis.
Этот ответ содержит некоторые непечатные символы. Смотрите ссылки ниже для правильного кода.
Демонстрация . Тест Жгут.
Объяснение:
источник