В этом задании вы получите буквенную строку в качестве входных данных. Мы определим «анти-строку» данного ввода как строку со случаем, когда все буквы инвертированы. Например
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
?Ответы:
Perl,
6461 байтВключает
+1
в себя дляp
источник
JavaScript (ES6), 200 байт
Использует массивы символов для ввода / вывода.
Попробуйте онлайн!
источник
Сетчатка , 119 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Дублируйте ввод и переверните регистр первой копии.
Если анти-строк вообще нет, удалите перевернутый дубликат.
Перечислите все возможные свернутые антиструны.
Отсортируйте их в порядке длины, возьмите самую короткую (то есть самую длинную антиструну) и повторяйте, пока все антиструны не будут свернуты.
источник
Python 3 ,
189181 байтБлагодарим Джонатана Фреха за то, что он сделал его чистым.
Попробуйте онлайн!
Моя собственная версия, сейчас устаревшая (189 байт):
Попробуйте онлайн!
any()
для раннего раскрытия вложенных циклов иset()
для изменяемого глобального объекта, используемого в понимании. Все остальное - это простая реализация требований использованияstr.swapcase
.Python 2 , 160 байт
Попробуйте онлайн!
Оказывается, что обычный вложенный цикл с ранним прорывом
return
намного короче, чем «умный» трюк сany
.источник
set
как функция по умолчанию не будет конфликтовать с дальнейшими вызовами, так как я думаю, что ваш код полностью выдает набор, чтобы быть пустым.x
это останется не пустым. Как у вас есть, я думаю, что это соответствует.C (gcc) ,
240238227225222216 байтодиннадцатьтринадцать байтов; golfedb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
доb|=abs(S[p+m]-S[q+m])-32
кb|=32-S[p+m]+S[q+m]&63
.for(...;...;p++)S[p+1]=S[p+L];
кfor(...;...;S[++p]=S[p+L]);
.Попробуйте онлайн!
источник
Python 2 , 180 байт
Попробуйте онлайн!
источник
Stax , 30 байт
Запустите и отладьте его
Соответствующее представление ascii той же программы таково.
Он использует подход регулярных выражений. Это многократно регулярное выражение для замены строки. Он строит их из каждой смежной подстроки текущего значения. Например, для ввода
fAbbAcGfaBBagF
, одна из подстрок -AbbA
в этом случае регулярное выражениеAbbA(.*)aBBa
будет заменено наA$1a
.источник
Wolfram Language (Mathematica) , 148 байт
Попробуйте онлайн!
источник
Japt
-h
, 33 байтаПопытайся
источник