(Это мой первый вопрос по коду-гольфу)
Когда я был ребенком, мы с отцом изобрели игру, в которой номерной знак, который мы видим на автомобилях, может давать определенные очки на основе довольно простых правил:
X количество одинаковых букв или цифр дает X-1 баллов, примеры:
22 = 1 point
aa = 1 point
5555 = 3 points
Числа должны быть рядом друг с другом, поэтому 3353
дает только 1 балл, так как 5 разрывает последовательность 3-х.
Последовательность чисел X в порядке возрастания или убывания, как минимум 3, дает X баллов, примеры:
123 = 3 points
9753 = 4 points
147 = 3 points
Система баллов работает только для однозначных чисел, поэтому 1919
не дает баллов и 14710
дает только 3, (147).
Последовательности могут быть объединены, чтобы получить больше очков, примеры:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
Однако вам не разрешается разбивать большую последовательность на две меньшие последовательности для дополнительных очков: 1234 = 123, 234 (6 points)
не допускается.
Ваша задача, учитывая последовательность, определить количество баллов, которые дает номерной знак.
В Дании номерные знаки имеют следующую структуру: CC II III, где C - символ, а I - целое число, и, следовательно, входные данные моего примера будут отражать эту структуру. Если вы хотите, вы можете настроить последовательность в соответствии со своей собственной структурой или, если вы чувствуете себя действительно предприимчивой, позволить программе проанализировать структуру номерного знака и, таким образом, заставить его работать с любым типом номерного знака по всему миру. Явно укажите структуру, которую вы решили использовать в своем ответе.
Вы можете принимать входные данные любым удобным для вас способом: строка или массив кажутся мне наиболее подходящими.
Тестовый ввод | выход:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
Из-за природы выбора вашей собственной структуры или даже охвата всех структур, я не обязательно вижу, как можно точно определить победителя. Я предполагаю, что победителем будут самые короткие байты в структуре, которую он определил. (И не принимайте такие данные, как CICIC, просто чтобы вам было проще)
РЕДАКТИРОВАТЬ:
Из-за комментариев, у меня есть несколько дополнительных фрагментов информации: последовательность возрастающих или убывающих чисел относится к арифметической последовательности, поэтому X +/- a * 0, X +/- a * 1, ... X +/- a * n и т. д. Так, например, 3-5-7 - это 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. Последовательность, однако, не должна начинаться с 0 и заканчиваться на 0.
БОЛЬШЕ РЕДАКТИРОВАТЬ:
Вы можете вводить данные любым удобным для вас способом, вам не нужно вводить пробелы, тире или любые другие вещи, которые делают номерной знак более читабельным. Если вы можете сохранять байты, принимая только заглавные буквы или что-то подобное, вы можете сделать это также. Единственное требование - ваша программа может взять строку / массив / что угодно, содержащее как символы, так и цифры, и вывести правильное количество точек в соответствии с указанными правилами.
XX 87 654
. Я придумал что-то, что было правильно для всех ваших тестовых случаев, но как-то не правильно для этого .. Работаю над исправлением.
CCIIIII
, без пробелов), иначе у этой проблемы нет объективного критерия выигрыша, который нам необходим здесь. Как есть, «(и не принимайте участие, такое как CICIC, просто чтобы вам было проще)» очень субъективно. Что такое и не является допустимой структурой?
IA99999
(содержит убывающую последовательность кодовых точек, но не чисел).