Нещодавно 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другого.
1234567895? А як виходитьaaabcccdedaaabefda6? Я отримую 2 та 4 відповідно для цих двох тестових випадків.