проблема
Допустим, слово является почти палиндромом, если можно удалить одну из его букв, чтобы слово стало палиндромом. Ваша задача - написать программу, которая по заданному слову определяет, какую букву убрать, чтобы получить палиндром.
Самый короткий код для этого на любом языке программирования выигрывает.
вход
Ввод состоит из заглавных букв длиной от 2 до 1000 символов.
Выход
Выведите 1 индексированную позицию (крайняя левая буква имеет позицию 1, следующая - 2 и т. Д.) Буквы, которую следует удалить. Если есть возможные варианты, которые ведут к палиндрому, выведите любое из этих положений. Обратите внимание, что вам необходимо удалить букву, даже если данное слово уже является палиндромом. Если данное слово не является почти палиндромом, выведите -1.
пример
Вход:
racercar
может произвести вывод:
5
потому что удаление этой 5
буквы производит racecar
, что палиндром.
Кроме того, вход
racecar
все еще может произвести вывод
4
потому что удаление этой 4
буквы до raccar
сих пор является палиндромом.
Ответы:
J -
3125 символовВ основном стандартный тариф для J, так что я просто укажу на интересные моменты.
Наречие
\.
называется Outfix .x u\. y
удаляет каждый инфикс длиныx
изy
и применяетсяu
к результату каждого удаления. Здесьx
1y
равно входной строке иu
является(-:|.)
проверкой соответствия строки обратному. Следовательно, результатом этого применения\.
является список логических значений, 1 на месте каждого символа, удаление которого делает ввод палиндромом.I.
создает список всех индексов (0-origin) сверху, где было 1. При добавлении 1 с получаются1+
эти индексы 1-origin. Если индексы не были равны 1, список пуст. Теперь мы попытаемся взять последний элемент с_1{
. (Нам разрешено выводить любые сменные буквы!) Если это работает, мы возвращаемся. Однако, если список был пустым, элементов вообще не было, поэтому{
выдается ошибка домена, с которой мы перехватываем::
и возвращаем -1 с помощью[
.Использование (напомним, что
NB.
для комментариев):источник
Не-PHPPython (73):Где это строка, которую вы хотите проверить.
Это, однако, выдает ошибку, если вы не можете превратить его в палиндром. Вместо этого вы можете использоватьРЕДАКТИРОВАТЬ: Нет, подождите, это работает!Спасибо, это действительно повышает php-содержание этого скрипта примерно на 25% (это то, что вы хотите, верно?)
источник
1>0
вместоTrue
и удалив пробел между]
иfor
внутри...[::-1] for g...
1
вместо того, чтобыTrue
.1 == True
, в конце концов.Mathematica,
106988791 символовЯ предполагаю, что я немного затруднен из-за длинных имен функций, но такие проблемы довольно забавны в Mathematica:
Он выдает некоторые предупреждения, потому что
l_
шаблон также соответствует всем символам внутри, которыеReverse
не могут работать. Но эй, это работает!Немного не одураченный
источник
GolfScript,
2826 символовСпасибо Петру за сокращение на 2 символа. Попробуйте тестовые случаи онлайн :
источник
RACECAR
все еще является палиндромом с E. Нужно ли указывать символ для удаления, когда введенное слово уже является палиндромом?-2]$-1=)
? В начале этого блока у вас есть не более одного элемента в стеке, так что вы можете легко сократить до-2]0=)
. (Или для той же длины]-2or)
. Я научился любитьor
для особых случаев).Реболь (81)
Пример использования в консоли Rebol:
Выше возвращается индекс последнего найденного палиндрома. Альтернативное решение (85 символов), которое возвращает каждый найденный палиндром:
Так что для
"racercar"
этого вернется список[4 5]
.источник
C #, 134 символа
Я знаю, что я проиграю :( но все равно было весело : D
Читаемая версия:
источник
R
определяется и используется?Stax ,
810 байтЗапустите и отладьте его
Эта программа показывает все индексы на основе 1, которые можно удалить из строки, чтобы сформировать палиндром. И если их нет, он показывает -1.
источник
aaabb
выводит5
вместо-1
).Рубин (61):
Здесь есть рубиновое решение. Он вернет позицию удаляемого символа или -1, если это невозможно сделать.
Я не могу помочь, но чувствую, что с разделами dup и slice есть улучшения, но в Ruby, похоже, нет метода String, который удаляет символ по определенному индексу и возвращает новую строку -__-.
Отредактировано согласно комментарию, ты!
источник
-1
если не найдено палиндрома.-1
, спасибо. Не уверен, что ты имеешь в виду, принимая метод, хотя, я подумаю.05AB1E , 10 байтов
Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
источник
Не питонPHP ,858381 байтПопробуйте онлайн!
Излишне рекурсивный:
PHP , 96 байт
Попробуйте онлайн!
источник
Haskell, 107 символов:
Как функция ( 85 символов ):
оригинальная негольфированная версия:
источник
C # (184 символа)
Я признаю, что это не лучший язык для игры в гольф кода ...
Отформатировано и прокомментировано:
источник
C # (84 символа)
Оператор LINQpad ожидает, что переменная
i
будет содержать входную строку. Вывод сохраняется вo
переменной.источник
Хаскелл, 80
Вызывается так:
источник
Japt , 8 байт
Попытайся
источник
Хаскелл, 118C
Ungolfed:
источник
Желе ,
1714 байтПопробуйте онлайн!
Поскольку я изменил свой подход достаточно быстро, чтобы старая версия не отображалась в истории редактирования, это было так:
ŒPṚḊŒḂ€TṂ©’<La®o-
источник
Брахилог , 24 байта
Попробуйте онлайн!
Чувствует себя слишком долго.
Может быть на два байта короче, если выходные данные могут быть 2-индексированы :
Две более ранние и еще худшие итерации:
Использование последней глобальной переменной требует другого заголовка тестирования .
источник
Python 3 , 71 байт
Попробуйте онлайн!
Возвращает 1-индексированный символ, если операция может быть выполнена и в
-1
противном случае.источник
Wolfram Language (Mathematica) , 56 байт
Попробуйте онлайн!
Вводит в виде списка символов. Для ввода строки добавьте
@*Characters
.PalindromeQ
был представлен в 2015 году. Альтернатива стоит +4 байта .источник
Perl 5
-p
,5652 байтаПопробуйте онлайн!
источник
C (gcc) ,
180168159157140139 байтПопробуйте онлайн!
21617 байт сбриты благодаря функциюcatcat! И еще 3 байта, поскольку в правилах указывается, что минимальная длина ввода составляет 2 символа, поэтому не нужно проверять наличие пустых строк.Ungolfed:
источник
&&!++p
просто обман, чтобы объяснить :)Python, 84
Это не проверяет, является ли ввод (строка s) почти палиндромом, но он эффективен по времени и удобочитаем.
источник
s[-(i+1)]
можно сократить доs[-i-1]
. Кроме того , я не уверен , но вы можете быть в состоянии заменитьif...else...
сreturn i+1 if ... else len(s)-1
s = "abcde"
, он должен вернуть -1.Мой первый код-гольф.
Джава. ~ 1200 символов в основных (и вспомогательных) функциях. Да, детка.
Класс топ и использование:
Основная функция:
Подфункции:
Полный класс:
источник