iBug недавно получил длинный бар из композитных, но ценных материалов. Бар настолько длинный, что iBug не может легко продать его за кредиты, поэтому он хочет сократить его. Пруток изготовлен из таких хрупких и волшебных материалов, что, если какая-либо деталь сломается, все части прутка, сделанные из одного и того же материала, тоже сломаются, что затрудняет произвольную резку.
iBug хочет разрезать планку на как можно больше частей. Он также любит очень короткие программы и игру в гольф, поэтому он сделал абстрактный анализ своей проблемы.
Волшебная панель iBug представлена в виде строки (или массива или последовательности символов, если вы предпочитаете), например:
aaabbccccccbbbaaacccccaabbbaaaaa
Каждая буква в строке представляет собой один магический материал. Бар всегда соответствует RegEx ^\w*$
, поэтому в баре может быть до 63 материалов. «Часть» - это последовательная последовательность любых символов, которые не разделены пробелами.
iBug хочет, чтобы вы написали программу, которая вычисляет максимальное количество частей, которые он может получить, если ноль или более наборов символов полностью удалены (заменены пробелами), и сообщает iBug это число.
Пример 1:
In: aaabbccccccbbbaaacccccaabbbaaaaa
Out: 4
Описание: Если b
полностью удалить с панели, iBug может получить 4 части. Он также может получить 4 части, удалив b
и c
, как показано ниже
aaabbccccccbbbaaacccccaabbbaaaaa # Original string
aaa cccccc aaacccccaa aaaaa # Remove 'b'
aaa aaa aa aaaaa # Remove 'b' and 'c'
И это максимальное количество деталей, которое iBug может получить из этого бара.
Пример 2:
In: 111aa___9999____aaa99111__11_a_aa999
Result: 111aa 9999 aaa99111 11 a aa999
Out: 6
Описание: удалив только подчеркивание, iBug может получить 6 частей из панели, и это максимум.
Пример 3:
In: __________
Out: 1
Описание: Что? Вы хотите сократить это? Получить 1 часть можно только в том случае, если вы вообще не режете ее.
Пример 4:
In:
Out: 0
Описание: Нечего резать, поэтому ноль.
Есть также некоторые правила, которым iBug хочет, чтобы программы подчинялись:
iBug не любит стандартные лазейки, и они запрещены.
Пока это работает, это не должно быть полной программой. Функция, которая принимает входные данные от параметра и выдает выходные данные через возвращаемое значение, также принимается.
Гибкий ввод и вывод разрешены. Ваша программа или функция может принимать строку, или массив символов, или что-либо, с чем вам проще всего иметь дело. Вы можете дать вывод, напечатав номер или вернув его.
Примеры тестовых случаев (но не ограничиваясь ими)
aaabbbaaa = 2
123456789 = 5
AaAaAaAa = 4
aaabcccdedaaabefda = 6
________ = 1
(empty) = 0
Поскольку это код-гольф , выигрывает самая короткая программа (в байтах) на каждом языке!
дополнительный
iBug высоко ценит, если вы можете дать объяснение для вашей программы, даже если это не влияет на ваш выигрыш (он по-прежнему имеет длину в байтах).
2468
, для второго, удалить bd
.
2,4,6,8
из первого и b,d,f
второго.
123456789
5? И как получаетсяaaabcccdedaaabefda
6? Я получаю 2 и 4 соответственно для этих двух тестовых случаев.