У цьому виклику вам буде надано алфавітний рядок як вхідний текст. Ми визначимо "анти-рядок" даного входу як рядок із регістром усіх перетворених літер. Наприклад
AaBbbUy -> aAbBBuY
Вам слід написати програму, яка приймає рядок як вхідний і шукає найдовшу суміжну підрядку, антиструповий рядок якої також є суміжною підрядкою. Дві підрядки не повинні перетинатися.
Як приклад, якщо вам дали рядок
fAbbAcGfaBBagF
Жирними ділянками була б найдовша анти струнна пара.
Після виявлення пари ваша програма повинна згорнути їх в один символ. Це слід зробити, видаливши всі, крім першого символу кожної підрядки. Наприклад рядок вище
fAbbAcGfaBBagF
став би
fAcGfagF
Потім ваша програма повинна повторювати процес, поки найдовша антиструтна пара не буде однозначною чи коротшою.
Наприклад, для роботи з тією ж строкою нова довга пара після краху
fAcGfagF
Тож ми знову згортаємо рядок
fAcGag
Тепер рядок не можна згортати далі, тому нам слід вивести його.
У разі розриву між парами-кандидатами (приклад AvaVA
) ви можете зробити зменшення ( AaA
або AvV
, але ні Aa
).
Це кодовий гольф, тому відповіді будуть набрані в байтах, а менша кількість байтів буде кращою.
Випробування
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Мотивації
Хоча ця проблема може здатися довільною, це насправді проблема, з якою я стикався під час створення коду для обробки основних багатокутників. Цей процес може бути використаний для зведення основного многокутника до меншого n -гона. Після того як я спробував це, я подумав, що це зробить хороший маленький гольф.
aaaAAAaaa -> aAaaa
?