У моих родителей есть домашний кинотеатр. Пульт дистанционного управления сломан, что делает его невероятно сложным для навигации по меню. Большую часть времени это не работает, но когда это происходит, оно движется вправо невероятно быстро.
Это, конечно, расстраивает, но больше всего расстраивает, когда вы хотите ввести название фильма, которое требует навигации по клавиатуре, которая выглядит следующим образом:
a b c d e f
g h i j k l
m n o p q r
s t u v w x
y z 1 2 3 4
5 6 7 8 9 0
Ваша задача - взять в качестве входных данных заголовок фильма и рассчитать, насколько «сложно» набрать этот заголовок фильма. Число разочарования конкретной строки - это количество букв, которые требуют перемещения прямо от буквы перед ними. Нам все равно, насколько они правы, потому что, если мы начинаем двигаться вправо, мы практически мгновенно переходим к концу линии, и нам нет дела до движения вверх, вниз или влево, потому что они легкие.
Например, если мы хотим ввести
keyboard
- Мы начинаем
k
бесплатно. e
чуть выше,k
поэтому нам не нужно двигаться прямо.y
все пути влево, так что нет необходимости двигаться вправо.b
однако находится на следующем столбце вправо, поэтому нам нужно двигаться вправо, чтобы добраться до него.o
находится на следующем столбце, поэтому мы должны двигаться вправо, чтобы добраться до него.a
вернулся в первый столбец, поэтому мы двигаемся влево, чтобы добраться до него.r
все пути справа, поэтому мы идем прямо к нему.d
это два столбца слева отr
столбца.
Символы, которым нужно двигаться вправо, bor
означают, что это разочарование 3.
Дополнительные правила
Это задача кода-гольфа, поэтому ваши ответы будут оцениваться в байтах, а меньшее количество байтов будет лучше. Ввод всегда будет состоять из буквенно-цифровых символов, вы можете поддерживать как заглавные, так и строчные буквы, и вам нужна только одна. Ввод никогда не будет пустым.
Testcases
keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3
"blast2" -> 3
(не настоящий фильм, но у некоторых ответов есть проблемы с такими тестовыми примерами)90 -> 1
Ответы:
JavaScript (Node.js) ,
615554 байтаСохранено 1 байт благодаря @nwellnhof
Принимает ввод как массив символов.
Попробуйте онлайн!
Как?
Для всех символов, кроме цифр больше0 , 0-индексированный столбец Икс определяется как:
где - код ASCII символа.с
Для положительных цифр нам нужно сделать вместо этого:N
Примеры:
комментарии
источник
"blast2"
."234"
.Желе , 11 байт
Монадическая ссылка, принимающая список (заглавных) символов.
Попробуйте онлайн!
Как?
Сначала заменяет любые
'0'
s на'4'
s (поэтому остальная часть кода обрабатывает их как находящиеся в крайнем правом столбце). Затем приводит к порядковым номерам, добавляет единицу и по модулю,6
чтобы получить индексы столбцов на основе 0. Затем сравнивает соседей с «меньше» и суммирует результат.источник
Perl 6 ,
4539 байтПопробуйте онлайн!
Работает с заглавными буквами.
(2-ord(c))%46%6
вычисляет обратную координату хисточник
Чисто , 85 байт
Попробуйте онлайн!
источник
Рубин , 56 байт
Попробуйте онлайн!
Предварительная наивная версия, будет в гольфе.
источник
Japt
-x
, 14 байтПопробуйте онлайн!
Порт этого желе ответ. Принимает ввод в виде массива символов, с заглавными буквами.
Объяснение:
источник
Java (OpenJDK 8) , 73 байта
Неплохое решение для Java! То, что ноль находится справа, стоило мне нескольких байтов.
Попробуйте онлайн!
Разъяснения
источник
05AB1E ,
1211 байт-1 байт благодаря @Kevin Cruijssen
Еще один порт желе Джонатана Аллана. Принимает ввод в верхнем регистре.
Объяснение:
Попробуйте онлайн!
источник
0'4
можно¾4
сохранить байт ( соответствующий совет 05AB1E ).K (нгн / к) ,
32 3128 байтПопробуйте онлайн!
источник
Сетчатка 0.8.2 , 46 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Перечислите алфавит и цифры в порядке на OSK и сопоставьте каждый из них с (1-индексированным) номером столбца.
Конвертировать каждый номер столбца в одинарный.
Подсчитайте количество столбцов, за которыми следует столбец большего размера (т. Е. Вправо).
&`
Позволяет спички , чтобы перекрытия.источник
Python 2 , 84 байта
Попробуйте онлайн!
источник
Mathematica, 102 байта
Чистая функция. Принимает список символов в качестве ввода и возвращает число в качестве вывода. Это довольно наивное решение, приветствуем предложения по игре в гольф.
источник
PHP,
74 8177 байтЗапустите как трубу с
-nR
или попробуйте онлайн .источник
C (gcc) ,
82 7977 байтовПопробуйте онлайн!
Эта функция будет поддерживать только строчные вводы
Развернулся и прокомментировал:
Если моей функции разрешено принимать строки широких символов, ее можно уменьшить до 76 байт с помощью:
Попробуйте онлайн!
Эта версия просто принимает ввод, а
int*
неchar*
Редактирование:
c
)источник