O desafio:
Faça uma função que encontre o palíndromo mais longo dentro de uma sequência.
Nota: Esta é uma pergunta de controle de código . Por favor, não leve a sério a pergunta e / ou respostas. Mais informações aqui .
code-trolling
Joe Z.
fonte
fonte
code-trolling
é a minha nova marca favorita.Respostas:
Vai
A solução a seguir no Go emprega os poderes ocultos de simultaneidade, fechamento e recursividade para encontrar o palíndromo mais longo dentro de uma determinada sequência:
Além disso, ele se baseia inteiramente nos idiomas primitivos e nos tipos internos - sem biblioteca padrão - é assim que você reconhece um software de verdadeira qualidade.
Você pode aumentar um pouco os limites de thread, memória e tamanho da pilha para seqüências de caracteres de entrada maiores - isso ocorre porque esta solução é tão rápida que seu sistema operacional fica com inveja.
Editar - Regalias:
mais de 160002049186 goroutines geradas para a entrada"345345ABCDEabcde edcbaDEABC12312123"
fonte
Python
Exemplo de uso:
Nota: isso pode funcionar apenas para certas strings.
fonte
Claramente, é difícil verificar os Palindromes.
Portanto, a solução é bem simples - gere um conjunto de todos os Palindrome possíveis do tamanho da string que você está testando e verifique se ela contém.
C #
(Talvez seja necessário verificar meu código para correção, mas, caso contrário, é uma maneira maravilhosamente ineficiente de verificar palíndromos)
fonte
Perl
Faz tudo o que é pedido. Na verdade, é melhor, porque leva em consideração todas as subsequências possíveis . Qual é o problema? Ele opera em tempo exponencial, portanto, cada caractere adicional na cadeia de caracteres dobra o tempo de execução. Dê mais de 20 caracteres e levará o dia todo.
Entrada:
iybutrvubiuynug
. Saída:ibutubi
.Entrada:
abcdefghijklmnopqrstuvwxyzzyxwvutsrqponmlkjihgfedcba
. Saída: não vai acontecerfonte
Seu problema é facilmente resolvido por expressões regulares, como na figura abaixo (mas eu decidi usar o java). Isso acontece porque o regex é sempre a melhor ferramenta que pode ser usada para qualquer coisa que envolva extrair ou analisar texto.
Este código é ruim porque:
fonte
Python
Isso pega a string e a reorganiza para o palíndromo mais longo possível disponível.
Por exemplo:
Entrada: Olá
Ouput: lol
fonte
interpretação bioinformática
Cara pergunta muito legal!
Palíndromos na linguagem normal não são totalmente claramente especificados, por exemplo, se espaços são permitidos ou não. Portanto, não está claro se estes devem ser permitidos como palíndromos ou não:
De qualquer forma, acho que você está se referindo ao significado científico mais bem especificado de palíndromo: para que uma sequência de nucleotídeos seja considerada um palíndromo, sua cadeia complementar deve ler o mesmo na direção oposta. Ambos os fios, ou seja, o fio que passa de 5 'para 3' e seu fio complementar de 3 'para 5' devem ser complementares (veja aqui ).
Há alguma pesquisa feita para reconhecimento de sequência palíndromo e acho que você realmente deveria ler pelo menos isso . Para resolver seu problema, você pode simplesmente copiar a abordagem deles! O professor até envia o código fonte, se você perguntar.
Bem, agora para o problema em questão. Suponha que você tenha uma sequência de nucleotídeos fornecida como uma sequência de caracteres. A melhor maneira de encontrar palíndromos nessa sequência é usando algoritmos padrão. Acho que sua melhor aposta provavelmente está usando esta ferramenta on-line: http://www.alagu-molbio.net/palin.html
Como você precisa fornecer uma função que execute a tarefa, é necessário pensar em como inserir sua string neste aplicativo? Bem, aí começa a diversão. Eu acho que você poderia usar selênio para isso. Como eu não quero fazer sua lição de casa, eu apenas lhe dou a idéia básica. Em Java, seu mundo começa assim:
Caso você esteja interessado nos palíndromos de idiomas, poderá usar a mesma técnica com outros serviços da Web, como http://www.jimsabo.com/palindrome.html ou http://calculator.tutorvista.com/math/492/palindrome-checker .html
técnicas de controle de código
omita as fontes verdadeiramente úteis, como http://rosettacode.org/wiki/Palindrome_detection
blá interessante, mas inútil, sobre bioinformática
deliberadamente mal entendido isso como tarefa de bioinformática
trapaça - para resolver o problema, um serviço da web é usado
fonte
Python
A sequência "o palíndromo mais longo" é extraída da sequência de caracteres para
longest_palindrome
.A
reversed()
função retorna um iterador, portantoreversed(substring) == substring
, nunca será verdadeiro elongest_palindrome
nunca será substituído.Portanto, a função encontrará literalmente "o palíndromo mais longo" dentro de uma string.
fonte
Javascript
Oh, isso é fácil;). Aqui você vai:
:)
fonte
Ruby - A Força Bruta (Otimizada e Monkeymized!)
Acho que a melhor maneira de fazer isso é através do conhecido algoritmo de macaco, você provavelmente pode encontrá-lo no BOOST. Eles sempre tiveram maneiras de fazer você falar ...
Isso é extremamente ineficiente, mas bastante bonito e parecido com rubi, se você renomear tudo com o nome original: MaxMonkeys = len; MonkeyTalk = resultado, MonkeySpeed = strlen; monkeyA: a; monkeyB: b; getMonkeys: getMaxPalindrome.
Isso não tem valor para o OP e corre o risco de ele decidir realmente interagir com C, e todos sabemos como isso termina ...
fonte
Python 2.7
Recuso-me a usar as funções padrão, pois são ineficientes. Todo mundo sabe que a melhor maneira de procurar um comprimento é ter uma tabela para referência, então eu crio uma tabela de todos os possíveis palíndromos e os classifico usando um bogosort pitônico, mas para melhorar a eficiência, removo duplicatas primeiro . Nesse ponto, calculo todos os itens que são palíndromos e os classifico por comprimentos. Você pode simplesmente usar o último comprimento da lista, que possui uma pesquisa O (n), iterando a lista.
Código:
Nota
Não é realmente adequado para strings com mais de 4 caracteres. "Abba" funciona bem, mas eu fui e comprei café e cozinhei o almoço antes que abcba
Problemas:
Nomenclatura de variáveis insana (e também inconsistente)
Escolha do algoritmo lúdico (calcule todas as permutações possíveis de cada substring da sequência especificada, verifique se são palíndromos, classifique-as por comprimento e último valor de pesquisa)
Realmente contém a solução para o problema
Algoritmo de classificação estúpido (bogosort) e um método maluco para garantir que a lista seja classificada.
Além disso, há um erro de indentação na verificação duplicada que, na verdade, não faz nada, é apenas uma perda de tempo.
fonte
C
Encontrar palíndromos é uma operação difícil do PNP *, portanto, isso deve ser feito com código altamente otimizado. Aqui estão cinco truques de otimização que ajudarão a encontrar a solução mais rapidamente.
if this else that
formulário. (À medida que você avança na sua carreira, você deve dominar a Predição de Filial se quiser ser um verdadeiro ninja de código.) Esse código evita oif
problema de ramificação usandofor
instruções em vez disso, o que fornece três instruções pelo preço de uma.Mas não economize em nomes de variáveis, a legibilidade é importante.
* Palíndromo-Não Palíndromo
Além dos trolling óbvios no comentário, existem várias outras questões. O algoritmo de busca é uma implementação válida de Boyer-Moore-Horspool, mas nunca armazena os comprimentos de string, chamando strlen de algo como tempos N * M, tornando-o muito mais lento que uma simples pesquisa. "Pesquisando primeiro a cadeia mais longa" é verdadeira, mas depois disso ela não pesquisa por ordem de comprimento, portanto, uma saída antecipada daria uma resposta errada, se fosse implementada. Mas como não é, ele pesquisa todos os N! possibilidades de qualquer maneira. E quase todos os nomes de parâmetros (agulha / palheiro; src / dest) são revertidos de seus significados padrão.
fonte
Isto é o que eu tenho até agora no VB6:
Mas não acho que funcione e acho que posso melhorar.
fonte
Aqui está uma solução Java para você:
fonte
AutoHotkey
A função retorna espaços também, pois eles fazem parte de uma sequência de palíndromo na string. Então, o retorno acima
<space>abcdedcba<space>
.fonte
Poliglota
Isso é trolling porque pede para "encontrar o palíndromo mais longo de uma string", portanto, ele encontra o palíndromo mais longo de "uma string"
fonte
Eu nunca soube que strings poderiam conter palíndromos, você pode me mostrar onde aprendeu isso? E se você precisar do palíndromo mais longo, visite este site: http://www.norvig.com/pal2txt.html
fonte
Iterar através de cada caractere da sequência. Em seguida, verifique os caracteres antes e depois desse personagem. Em seguida, os caracteres dois antes e dois depois desse personagem. Continue repetindo até chegar a caracteres que não são iguais. Isso permitirá que você identifique o comprimento de cada palíndromo na palavra. No entanto, esse método funcionará apenas para palíndromos de comprimento ímpar. Para verificar palíndromos de comprimento uniforme, verifique o caractere nas posições i e i-1, depois i + 1 e i-2, depois i + 2 e i-3, etc. Espero que isso ajude!
fonte
A resposta óbvia é comparar a string com sua própria inversa e calcular a sequência comum mais longa.
O seguinte programa Perl faz exatamente isso. Pode ser necessário fazer o download do módulo Acme :: DonMartin, que geralmente não é instalado por padrão.
fonte
Lua / Python
Lua é uma linguagem muito rápida (da qual você precisa, porque há muitas substrings a serem verificadas!), Mas o Python é melhor com o manuseio de strings. Então, por que não usar os dois?
Como ouvi dizer que é bom ter variáveis locais, tenho uma. Além disso, eu separei as chamadas de função de seus argumentos, porque muitos argumentos tornam as expressões desordenadas e ilegíveis.
Além disso, acho que isso funcionará com qualquer sequência que você queira tentar, provavelmente não haverá problemas com entradas estranhas.
(BTW, você não vai acreditar quanto tempo isso levou para fazê-lo funcionar.)
fonte
One-liner do Python:
fonte
Python - 126 caracteres
Aqui está a minha chance:
Isso funciona no Python 2.xe 3.x, acredito. A variável k contém a resposta.
EDIT: Eu esqueci de dizer, a variável p deve conter a string para verificar se há palíndromos.
Esta é uma implementação legítima, portanto funcionará para qualquer string.
fonte
Java
Obviamente, se
aString
é um palíndromo, entãoaString
é o palíndromo mais longo do interioraString
. Você pode dizer que está funcionando pela declaração de asserção. Não pense muito na primeira linha do código executável. Isso é apenas clichê java padrão.fonte
Idioma do Game Maker
fonte
Fortran
As strings são muito difíceis de trabalhar no Fortran, então optei por usá
iachar
-las para convertê-las em números inteiros:Não funciona exatamente. Dada a string
aabbaac
que diz que é a mais longaaa
, mas dada a stringacasdabbbaabb
, diz que a mais longa éabbba
. Perto o suficiente.fonte
bbaabb
é mais longo no segundo.Você não pode competir no mercado atual apenas fazendo o que é pedido. Esse código também encontrará o palíndromo mais curto e não diferencia maiúsculas de minúsculas:
fonte
Lua
fonte
Implementação Python mais eficiente que supera todos os outros esforços:
Notas:
Isso sempre encontrará "o palíndromo mais longo"
É sensível a maiúsculas e minúsculas.
Com algumas modificações, também pode ser feito para encontrar outras strings. No entanto, você precisará criar uma classe, adicionar um método apropriado e subclassificá-lo para cada sequência a ser encontrada.
Essa função pode ser aprimorada ao migrar para o FORTRAN 77 ou codificar no código de máquina Intel 8008.
fonte
Esta é minha primeira resposta de trollagem de código. Não é um troll particularmente brutal, apenas me pareceu uma maneira boba de responder à pergunta
Os trolls são:
fonte
Python 3
Programa muito eficiente. Ele procura palíndromos longos com centro em posições seqüenciais (no caractere e no meio) e seleciona os mais longos
fonte