Соревнование:
Создайте функцию, которая находит самый длинный палиндром внутри строки.
Примечание: это вопрос кодового троллинга . Пожалуйста, не воспринимайте вопрос и / или ответы всерьез. Больше информации здесь .
code-trolling
Джо З.
источник
источник
code-trolling
мой новый любимый тег.Ответы:
Идти
Следующее решение в Go использует скрытые возможности параллелизма, замыканий и рекурсивности, чтобы найти самый длинный палиндром внутри данной строки:
Кроме того, он полностью опирается на языковые примитивы и встроенные типы - без стандартной библиотеки - так вы узнаете подлинное качество программного обеспечения.
Возможно, вы захотите немного увеличить ограничения потока, памяти и размера стека для больших входных строк - это потому, что это решение настолько быстрое, что ваша ОС будет ему завидовать.
Правка - Перки:
более чем 160002049186 процедур, порожденных для ввода"345345ABCDEabcde edcbaDEABC12312123"
источник
питон
Пример использования:
Примечание: это может работать только для определенных строк.
источник
Очевидно, что проверять палиндромы сложно.
Таким образом, решение довольно простое - создайте набор каждого возможного палиндрома размером с строку, которую вы тестируете, и посмотрите, содержит ли ваша строка ее.
C #
(Возможно, мне нужно проверить мой код на правильность, но в противном случае это удивительно ужасно неэффективный способ проверить палиндромы)
источник
Perl
Все ли просили. Это на самом деле лучше, потому что он учитывает все возможные подпоследовательности . В чем подвох? Он работает за экспоненциальное время, поэтому каждый дополнительный символ в строке удваивает время выполнения. Дайте ему более 20 символов, и это займет весь день.
Вход:
iybutrvubiuynug
. Выход:ibutubi
.Вход:
abcdefghijklmnopqrstuvwxyzzyxwvutsrqponmlkjihgfedcba
. Вывод: не произойдетисточник
Ваша проблема легко решается с помощью регулярных выражений, как на картинке ниже (но я решил вместо этого использовать java). Это происходит потому, что регулярное выражение всегда лучший инструмент, который можно использовать для всего, что связано с извлечением или анализом текста.
Этот код является злом, потому что:
источник
питон
Это берет строку и реорганизует ее до максимально возможного палиндрома.
Например:
Вход: Привет
Ouput: LOL
источник
интерпретация биоинформатики
Очень крутой вопрос, чувак!
Палиндромы на обычном языке не совсем четко определены, например, разрешены ли пробелы или нет. Так что не ясно, следует ли это разрешать как палиндромы или нет:
В любом случае, я думаю, что вы имеете в виду более точный научный смысл палиндрома: чтобы нуклеотидная последовательность рассматривалась как палиндром, ее комплементарная цепь должна читаться в противоположном направлении. Обе нити, т. Е. Нить, идущая от 5 'до 3', и ее дополнительная нить от 3 'до 5' должны быть взаимодополняющими (см. Здесь ).
Есть некоторые исследования, сделанные для распознавания последовательности палиндрома, и я думаю, что вы действительно должны прочитать по крайней мере это . Для решения вашей проблемы вы можете просто скопировать их подход! Профессор даже отправляет исходный код, если вы спросите его.
Ну, а теперь к проблеме. Предположим, у вас есть нуклеотидная последовательность в виде строки символов. Лучший способ найти палиндромы в такой последовательности - использовать стандартные алгоритмы. Я думаю, что ваш лучший выбор, вероятно, с помощью этого онлайн-инструмента: http://www.alagu-molbio.net/palin.html
Поскольку вам необходимо предоставить функцию, которая выполняет задачу, вам нужно подумать о том, как вставить свою строку в это приложение? Ну вот и начинается самое интересное. Я думаю, что вы могли бы использовать селен для этого. Поскольку я не хочу делать твою домашнюю работу, я просто даю тебе основную идею. В Java ваш мир начинается так:
Если вас интересуют языковые палиндромы, вы можете использовать ту же технику с другими веб-сервисами, такими как http://www.jimsabo.com/palindrome.html или http://calculator.tutorvista.com/math/492/palindrome-checker. .html
техника кодового троллинга
опустите действительно полезные источники, такие как http://rosettacode.org/wiki/Palindrome_detection
интересный, но бесполезный бла о биоинформатике
намеренно неправильно истолковывать это как задачу биоинформатики
обман - для решения проблемы используется веб-сервис
источник
питон
Строка "самый длинный палиндром" извлекается из строки документации в
longest_palindrome
.reversed()
Функция возвращает итератор, поэтомуreversed(substring) == substring
никогда не будет правдой иlongest_palindrome
никогда не будет перезаписан.Следовательно, функция будет буквально находить «самый длинный палиндром» внутри строки.
источник
Javascript
О, это просто;) Вот и я:
:)
источник
Ruby - The (Optimized and Monkeymized!) Brute Force
I find the best way to do this is through the well known Monkey Algorithm, you can probably find it in BOOST. They always had ways of making you talk...
This is extremely inefficient, but rather cute and ruby-like if you rename everything to their original names: MaxMonkeys = len; MonkeyTalk = result, MonkeySpeed = strlen; monkeyA : a; monkeyB : b; getMonkeys: getMaxPalindrome.
This is of no value to the OP and risks him deciding to actually interface with C, and we all know how that ends...
источник
Python 2.7
I refuse to use the standard functions, as they are inefficient. Everyone knows that the best way to look up a length is to have a table to reference, so I create a table of all of the possible palindromes, and sort them using a pythonic bogosort, but in order to improve efficiency, I remove duplicates first. At that point, I compute all of the items which are palindromes, and sort them by lengths. You can then simply take the last length in the list, which has an O(n) lookup by iterating the list.
Code:
Note
Not really suitable for strings longer than 4 characters. Does "abba" fine, but I went and bought coffee and cooked lunch before it did abcba
Issues:
Insane variable naming (and inconsistent too)
Ludicrous algorithm choice ( Calculate all possible permutations of every substring of the given string, check if they're palindromes, sort them by length and lookup last value)
Actually contains the solution to the problem
Stupid sorting algorithm (bogosort) and a nutjob method of ensuring the list is sorted.
Also, there's an indentation error in the duplicate checking which actually does nothing at all, it's just a waste of time.
источник
C
Finding palindromes is an PNP* hard operation, so it must be done with highly optimized code. Here are five optimization tricks which will help find the solution faster.
if this else that
form. (As you go further in your career, you should master Branch Prediction if you want to be a true code ninja.) This code avoids theif
branching problem by usingfor
statements instead, which gives you 3 instructions for the price of one.But don't skimp on variable names, readability is important.
* Palindrome-Not Palindrome
Besides the obvious trolling in the commentary, there are several other issues. The search algorithim is a valid implementation of Boyer-Moore-Horspool, but it never stores the string lengths, instead calling strlen something like N*M times, making it much slower than a simple search. "Searching for the longest string first" is true, but after that it does not search by length order, so an early exit would give a wrong answer, if it was implemented. But is is not, so it searches all the N! possibilities anyway. And almost all the parameter names (needle/haystack; src/dest) are reversed from their standard meanings.
источник
This is what I have so far in VB6:
But I don't think it works, and I think I can make it better.
источник
Here's a Java solution for you:
источник
AutoHotkey
The function returns spaces too as they are part of a palindrome sequence in string. So the above returns
<space>abcdedcba<space>
.источник
Polyglot
This is trolling because it asks to "find the longest palindrome in a string", so it is finding the longest palindrome in "a string"
источник
I never knew strings could contain palindromes, can you show me where you learned this? And if you need the longest palindrome, please visit this site: http://www.norvig.com/pal2txt.html
источник
Iterate through each character of the string. Then check the characters before and after that character. Then the characters two before and two after that character. Keep repeating until you get to characters that are not the same. This will allow you to identify the length of each palindrome in the word. However this method will only work for palindromes of odd length. To check for palindromes of even length, check the character at position i and i-1, then i+1 and i-2, then i+2 and i-3, etc. Hope this helps!!
источник
The obvious answer is to compare the string with its own inverse and compute the longest common sequence.
The following Perl program does just that. You may need to download the Acme::DonMartin module, it is not usually installed by default.
источник
Lua/Python
Lua is a very fast language (which you need, because there are a lot of substrings to be checked!), but Python is better with string handling. So why not use both?
Because I've heard it's good to have local variables, I have one. Also, I've separated the function calls from their arguments, because too many arguments make expressions cluttered and unreadable.
Also, I think this will work with any strings you want to try, there probably will not be any problems with strange inputs whatsoever.
(BTW, you won't believe how long this took me to make it work.)
источник
Python one-liner:
источник
Python - 126 Characters
Here's my go at this:
This works in both Python 2.x and 3.x, I believe. The variable k holds the answer.
EDIT: I forgot to say, the variable p should hold the string to check for palindromes.
This is a legit implementation, so it'll work for any string.
источник
Java
Obviously if
aString
is itself a palindrome thenaString
is the longest palindrome insideaString
. You can tell it is working by the assertion statement. Do not think too much about the first line of executable code. That is just standard java boilerplate.источник
Game Maker Language
источник
Fortran
Strings are too tough to work with in Fortran, so I opted to use
iachar
to convert them all to integers:It doesn't exactly work. Given the string
aabbaac
it says the longest isaa
, but given the stringacasdabbbaabb
, it says the longest isabbba
. Close enough.источник
bbaabb
is longer in the second one.You can't compete in today's market by just doing what is asked. This code will also find the shortest palindrome and is case insensitive:
источник
Lua
источник
Most efficient Python implementation that trumps all other efforts:
Notes:
This will always find "the longest palindrome"
It is case sensitive.
With some modifications it can also be made to find other strings. However, you will need to create a class, add an appropriate method and then subclass it for each string to be found.
This function could be improved by porting to FORTRAN 77 or hard-coding into Intel 8008 machine code.
источник
This is my first code trolling answer. It isn't a particularly brutal troll, it just struck me as a silly way to answer the question
Trolls are:
источник
Python 3
Very efficient program. It searches long palindroms with center in sequential positions (on char and between) and select longest
источник