Сегодня вы будете делать еще один вызов палиндром!
Итак, ваша задача сегодня состоит в том, чтобы взять строку и определить минимальное количество букв, необходимых для вставки, чтобы превратить ее в палиндром.
Например, давайте возьмем строку fishes
.
В этом случае лучший способ будет добавить h if
, поэтому результат будет 3.
fishe s
h if
---------
fishehsif
Теперь давайте попробуем с codegolf
. Так как здесь повторяется o
, мы можем просто сделать:
codeg o lf
fl ed c
-------------
flcodegedoclf
чтобы получить результат 5.
Контрольные примеры
ppcg -> 2
codegolf -> 5
palindrome -> 9
stackexchange -> 8
programmingpuzzlesandcodegolf -> 20
code-golf
string
palindrome
Оливер Ни
источник
источник
ppcg
, оценка 4 + 2 = 6)Ответы:
Pyth, 10 байт
тестирование.
Есть несколько эквивалентных характеристик значения, которое мы ищем:
Общая идея - «скелет» букв на входе, которые совпадают с буквами на входе в конечном продукте.
Этот скелет всегда палиндром, с буквами, соответствующими их обратным аналогам. Каждые не скелетные буквы не имеют себе равных и должны иметь вставленный аналог.
Альтернатива той же длины вместо этого использует четвертое условие: длина входного сигнала минус длина его самой длинной палиндромной подпоследовательности
Ссылка на набор тестов.
Часть, которая отличается
Для обоих, вместо удаления палиндромной подпоследовательности из ввода и взятия длины, мы могли бы вместо этого вычесть ее длину из длины ввода. Любой из них стоит 4 байта:
-lQl
противl.-Q
.источник
Python, 112 байт
Очень неэффективно.
Попробуйте онлайн! Вы должны подождать минуту, пока закончится последнее дело.
Позвоните
e(<string>, 0, <length of string - 1>)
, как e ("рыбы", 0, 5) `.Ungolfed (вроде) с объяснением:
источник
l=0
.05AB1E , 11 байт
Использует кодировку CP-1252 .
Попробуйте онлайн! или как тестовый набор
объяснение
источник
Брахилог , 9 байт
Попробуйте онлайн!
Эта задача действительно нуждалась в ответе Brachylog v2, так как палиндромизация при вставке настолько интуитивна в этом языке.
объяснение
⊆P↔P
на самом деле это то, что делает палиндромизацию путем вставки (см. этот пример )источник
C
89121 байтБесстыдный порт ответа Оливера , не мог придумать ни одного более короткого решения.
g
вызовыf
с указателем на первый и последний символ строки (последний символ является частью строки, а не символом'\0'
). Становится еще более неэффективным, потому чтоf
вызывается два раза дляmin
случая.Ungolfed:
Использование:
источник
Brachylog v1 , 13 байт
Попробуйте онлайн!
Вы можете проверить найденные палиндромы с помощью этого кода .
объяснение
Я почти удивлен, что это даже работает, видя, как это смехотворно просто.
Это гарантированно найдет наименьший палиндром, потому
IrI
что при возврате будет генерировать строки увеличивающейся длины, начиная с пустой строки.Это недостаточно эффективно для вычисления последнего контрольного примера на TIO из-за использования
s - Ordered subset
.источник
Пакет,
234232 байтаРаботает рекурсивно, пытаясь вставить несовпадающие символы на обоих концах, поэтому очень медленно (я не пробовал последний тестовый пример). Пределы рекурсии означают, что в любом случае это работает только для ограниченной длины строки, так что
99
это несколько произвольно. Я должен использоватьcall
параметры в качестве локальных переменных, так как я не смог заставитьsetlocal
меня работать, что означает, что%1
параметр:l
подпрограммы является выражением, которое оценивает количество выполненных вставок.источник