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 высоко ценит, если вы можете дать объяснение для вашей программы, даже если это не влияет на ваш выигрыш (он по-прежнему имеет длину в байтах).
123456789
5? И как получаетсяaaabcccdedaaabefda
6? Я получаю 2 и 4 соответственно для этих двух тестовых случаев.2468
, для второго, удалитьbd
.2,4,6,8
из первого иb,d,f
второго.Ответы:
Haskell ,
73 7170 байтСпасибо Laikoni за сохранение 1 байта!
Попробуйте онлайн!
источник
maximum$(length$words x):
можно сократить доmaximum$length(words x):
.JavaScript (ES6),
10990 байтНесколько медленно на
123456789
тестовом примере. Предыдущий 109-байтовый ответ не ограничивался!/\s/
:источник
Python 2 ,
1119372 байта-21 байт спасибо Кириллу Л.
Попробуйте онлайн!
источник
Желе ,
1311 байтСлишком много 2-байтовых инструкций-2 благодаря Zgarb (используйте внешний продукт быстро
þ
>. <)Монадическая ссылка, принимающая список символов и возвращающая неотрицательное целое число.
Попробуйте онлайн!
Как?
Для каждой подпоследовательности входных данных (наборы, которые мы можем удалить, плюс избыточные эквиваленты) получает список существования, чтобы определить, какие из них удалены, а затем эффективно определяет, сколько осталось серий нулей, и выдает максимум. Последняя часть работает немного странно, так как я считаю, что она более гольфовая, чем более наивные альтернативы - она находит пробеги как
[element, count]
пары, отрицает, чтобы идентифицировать нули как единицы, суммы находят максимум, а затем занимает голову (сумма элементов, а не количества). ).источник
€Đ€
может бытьþ
.Рубин ,
98 89 75 6461 байтПопробуйте онлайн!
меньше и медленнее, чем раньше!
В основном порт ответа @ Neil's Javascript
Безголовый и аннотированный
Попробуйте онлайн!
источник
Шелуха ,
1211 байтПопробуйте онлайн! Это работает грубой силой и довольно медленно. Добавьте
u
к нужному концу, чтобы он работал быстрее, не меняя семантику.объяснение
источник
Perl 5 , (более старые версии)
-p -I.
,524943 байтаСчет в старом стиле:
+3
for-p
:46
bytes (поскольку он должен быть в программе, его нельзя запустить с помощью-e
)barsplit.pl
:Запустите со строкой на STDIN:
Попробуйте онлайн!
-I.
Есть вариант , чтобы сделать эту работу также о последних Перлз , где по умолчанию.
является не более@INC
. В старых версиях Perl эта опция не нужна. Я проверил это на более старой машине, которая все еще былаperl 5.20
, поэтому оценка основана на этом (в противном случае я также должен посчитать.
аргумент-I
)Быстрая версия (
49
байты):источник
Wolfram Language (Mathematica) , 77 байт
Попробуйте онлайн!
источник