Làm thế nào để tôi tìm thấy palindrom dài nhất trong một chuỗi?


33

Các thách thức:

Tạo một hàm tìm thấy palindrom dài nhất bên trong một chuỗi.

Lưu ý: Đây là một câu hỏi . Xin đừng coi trọng câu hỏi và / hoặc câu trả lời. Thêm thông tin ở đây .


7
Nếu bạn không thể nói, đây là một vấn đề troll khác, mặc dù với ít lời giải thích hơn lần trước.
Joe Z.

19
Đáng buồn thay, "một chuỗi" không có bất kỳ palindromes nào trong đó.
Mark Reed

17
Vậy code-trollinglà thẻ yêu thích mới của tôi.

4
Chúng tôi đã có hai câu hỏi troll mã trong danh sách Câu hỏi mạng nóng ngay bây giờ!
Joe Z.

18
Hừm. Trong khi câu hỏi [trolling mã] đầu tiên gây cười, tôi không thể không cảm thấy rằng những câu hỏi này sẽ thực sự làm giảm chất lượng của trang web này nếu các bạn không cẩn thận. Những câu hỏi này rất dễ thực hiện và dễ trả lời kém, và tôi có thể thấy những câu hỏi này rất cũ rất nhanh. Chỉ 2 xu của tôi.
Reid

Câu trả lời:


19

Đi

Giải pháp sau đây trong Go sử dụng các sức mạnh tiềm ẩn của sự tương tranh, đóng và đệ quy để tìm ra bảng màu dài nhất trong một chuỗi đã cho:

func lp(s string) string {
    for i, l := 0, len(s); i < l; i++ {
        if s[i] != s[l-i-1] {
            a, b := make(chan string), make(chan string)
            go func() {
                a <- lp(s[:l-1])
            }()
            go func() {
                b <- lp(s[1:])
            }()
            c, d := <-a, <-b
            if len(c) > len(d) {
                return c
            }
            return d
        }

    }
    return s
}

Ngoài ra, nó hoàn toàn dựa vào các nguyên thủy ngôn ngữ và các loại tích hợp - không có thư viện chuẩn - đó là cách bạn nhận ra phần mềm chất lượng thực sự.

Bạn có thể muốn biến giới hạn kích thước luồng, bộ nhớ và ngăn xếp của mình lên một chút cho các chuỗi đầu vào lớn hơn - điều này là do giải pháp này quá nhanh đến nỗi hệ điều hành của bạn sẽ ghen tị với nó.

Chỉnh sửa - Đặc quyền:

  • hoàn toàn vô dụng trên chuỗi ký tự đa nhân.
  • sẽ không bỏ sót dấu chấm câu hoặc ký tự khoảng trắng.
  • bỏ qua bình đẳng chữ hoa / chữ thường
  • chạy trong một thời gian khó tính toán - mặc dù rất chậm.
  • sinh ra rất nhiều và rất nhiều goroutines, tùy thuộc vào đầu vào.
  • bị giết vì cạn kiệt bộ nhớ sau vài giây trên máy của tôi với hơn 16000 2049186 con khỉ đột sinh ra để nhập liệu"345345ABCDEabcde edcbaDEABC12312123"

45

Con trăn

def longest_palindrome(s):
    return 'racecar'

Ví dụ sử dụng:

>>> print longest_palindrome('I like racecars!')
racecar

Lưu ý: điều này có thể chỉ hoạt động đối với các chuỗi nhất định.


21
Tôi đã thử nó với "abcdedcba" nhưng nó vừa trả lại "racecar" ... tôi đang làm gì sai?
Joe Z.

22
@JoeZ. Bạn đang sử dụng chuỗi sai. Hãy thử nó với 'abcde racecar'.
grc

10
Được rồi, nhưng bây giờ tôi đang thử nó với "abcde racecar edcba" và nó vẫn chỉ trả về "racecar" mặc dù có sẵn một bảng màu lớn hơn nhiều.
Joe Z.

63
@JoeZ. Hmm ... Có lẽ là một vấn đề unicode.
grc

11
@JoeZ. Bạn có lẽ nên mua một máy tính mới.
emory

13

Rõ ràng, kiểm tra Palindromes là khó khăn.

Vì vậy, giải pháp khá đơn giản - tạo một tập hợp mọi Palindrom có ​​thể lớn bằng chuỗi bạn đang kiểm tra và xem chuỗi của bạn có chứa chuỗi đó không.

C #

string largest = String.Empty;

    for(int i=0; i < myString.lenght; i++)
    {

//Don't use the newfangled stringbuilder. Strings are awesome
char[] testString = new char[i];

    for (int charPosition=0; charPosition < i/2; charPosition++)
    {
    for (char c = 'A'; c <= 'Z'; c++)
    {
       if ((charPosition/i) == i/2)
{
//middle one
testString[i] = c;
} 
else 
{
//do one for that position, and the lenght-position
testString[i] = c;
testString[testString.length - i] = c;
}

if (myString.Contains(testString.ToString())
{
//yaay
largest = testString.ToString();
}


{

}
    } 

}


}

(Tôi có thể cần kiểm tra chính xác mã của mình, nhưng nếu không thì đó là cách cực kỳ kém hiệu quả để kiểm tra Palindromes)


Họ rõ ràng sẽ không bao giờ chạy các chương trình trên chuỗi dài bởi vì chúng rất khó tính toán. Vì vậy, điều này là tốt. Bạn có thể mở rộng quy mô bằng cách chạy trên VPS tốt hơn hoặc trong trung tâm dữ liệu, nếu bạn đang chạy nó trong cài đặt doanh nghiệp. Đối với bài tập về nhà, nó sẽ ổn với chỉ 3-4 chuỗi ký tự.
Emil Vikström

12

Perl

Có phải tất cả mọi thứ yêu cầu. Đó là thực sự tốt, bởi vì nó sẽ đưa vào tài khoản mỗi thể dãy . Bắt cái gì? Nó hoạt động theo thời gian theo cấp số nhân, vì vậy mỗi ký tự bổ sung trong chuỗi nhân đôi thời gian chạy. Cung cấp cho nó hơn 20 ký tự, và nó sẽ mất cả ngày.

$inputstring = <>;
@arrayofcharacters = split("",$inputstring);
for(0..2**length($inputstring)-1){
 $currentsubsequence = "";
 @choice=split("",sprintf("%b",$_));
 for(0..$#arrayofcharacters){
  $currentsubsequence .= "$arrayofcharacters[$_]" x $choice[$_];
  if($currentsubsequence eq reverse($currentsubsequence)){
   $palindromes{length($currentsubsequence)} = $currentsubsequence;
   $palindromes[~~@palindromes] = length($currentsubsequence);
  }
 }
}
print($palindromes{@{[sort(@palindromes)]}[$#palindromes]})

Đầu vào : iybutrvubiuynug. Đầu ra : ibutubi.

Đầu vào : abcdefghijklmnopqrstuvwxyzzyxwvutsrqponmlkjihgfedcba. Đầu ra: sẽ không xảy ra


Đây đúng là câu trả lời của tôi, nhưng trong Perl. Ngoài ra, không Monekmized. chỉnh sửa: nvm, của tôi hiệu quả hơn

Tôi đã đăng câu trả lời của mình trước bạn, vì vậy nó không được sao chép.
PhiNotPi

2
Tôi đã có ý tưởng đầu tiên! Tôi chỉ mất nhiều thời gian hơn để viết nó (phải nghĩ ra những trò đùa của C và khỉ. Ngoài ra, việc tối ưu hóa đáng giá cho thời gian phát triển thêm)

6
Không sao đâu. Tôi tự hào về sự kém hiệu quả của mình.
PhiNotPi

10

Vấn đề của bạn được giải quyết dễ dàng bằng các biểu thức thông thường, giống như trong hình bên dưới (nhưng tôi đã quyết định sử dụng java thay thế). Điều này xảy ra bởi vì regex luôn là công cụ tốt nhất có thể được sử dụng cho mọi thứ liên quan đến trích xuất hoặc phân tích văn bản.

Tôi biết biểu hiện thường xuyên

package palindrome;

import java.util.regex.Pattern;
import javax.swing.JOptionPane;

public class RegexPalindrome {

    private static String next(String now) {
        if (now.isEmpty()) return "a";
        String prefix =  now.length() == 1 ? "" : now.substring(0, now.length() - 1);
        if (now.endsWith("z")) return next(prefix) + "a";
        return prefix + String.valueOf((char) (now.charAt(now.length() - 1) + 1));
    }

    public static void main(String[] args) {
        String text = JOptionPane.showInputDialog(null, "Type some text:");

        String bestPalindromeFound = "";

        for (String searchText = "a"; searchText.length() <= (text.length() + 1) / 2; searchText = next(searchText)) {
            String reverse = new StringBuilder(searchText).reverse().toString();
            if (searchText.length() * 2 - 1 > bestPalindromeFound.length()) {
                Pattern p = Pattern.compile(".*" + searchText + reverse.substring(1) + ".*");
                if (p.matcher(text).matches()) bestPalindromeFound = searchText + reverse.substring(1);
            }
            if (searchText.length() * 2 > bestPalindromeFound.length()) {
                Pattern p = Pattern.compile(".*" + searchText + reverse + ".*");
                if (p.matcher(text).matches()) bestPalindromeFound = searchText + reverse;
            }
        }
        JOptionPane.showMessageDialog(null, "The longest palindrome is \"" + bestPalindromeFound + "\".");
    }
}

Mã này là xấu bởi vì:

  • Nó chạy trong thời gian theo cấp số nhân với kích thước của văn bản đã cho. Nó chạy bằng cách liệt kê tất cả các chuỗi ở dạng az, tạo hai regex cho mỗi chuỗi được tạo và kiểm tra đầu vào theo từng regex.
  • Hơn nữa, nó không thành công nếu bảng màu chứa chữ in hoa, số, văn bản không phải mã ascii, dấu chấm câu, v.v.
  • Và tất nhiên, regex rõ ràng không phải là công cụ phù hợp cho điều đó.

Và tất nhiên, các phần GUI chỉ ở đó để đánh lạc hướng:>
Emil Vikström

@ EmilVikström Vâng, một tác dụng phụ của việc mã hóa là chúng ta có thể vui vẻ lật đổ mô hình MVC. Hơn nữa, một OP lười biếng có lẽ không biết MVC là gì và sẽ ấn tượng hơn nhiều bởi một chương trình có tất cả GUI được ghép nối với nó và nghĩ rằng nó đẹp và tiên tiến hơn so với nhàm chán kiểu nhắc / console / DOS cũ. cửa sổ (nhưng giáo viên của ông có thể không nghĩ như vậy). OTOH, nếu OP lười biếng không thích GUI được ghép nối, tốt, điều đó thật tuyệt, mục tiêu là làm anh ta thất vọng.
Victor Stafusa

Ngay cả khúc dạo đầu cũng không chính xác. Về mặt kỹ thuật, palindromes không phải là một phần của lớp Ngữ pháp thông thường và do đó không thể nhận ra bằng các biểu thức thông thường. May mắn thay, chúng tôi có PCRE bao gồm lớp Ngữ pháp nhạy cảm theo ngữ cảnh.
đệ quy.ninja

7

Con trăn

Điều này lấy chuỗi và sắp xếp lại nó thành palindrom dài nhất có thể.

Ví dụ:

Đầu vào: Xin chào

Ouput: lol

def get_palindrome(string):
    if len(string) == 0:
        return "I didn't catch that"
    list_of_characters = []
    occurances = []
    for character in string:
        if not character in list_of_characters:
            list_of_characters.append(character)
            occurances.append(1)
        else :
            occurances[list_of_characters.index(character)] +=1
    #check if a palindrome is possible
    if sum(occurances) == len(occurances): #no double letters, so only a one character palindrome
        return list_of_characters[0]
    first_half = ''
    second_half = ''
    middle_character = ''
    for index, character in enumerate(list_of_characters):
        number_of_occurances = occurances[index]/2
        first_half += character * number_of_occurances
        second_half = (character * number_of_occurances)+ second_half
        if (occurances[index]%2 != 0):#if there are an odd number, there will be one spare,
            #so put it in the middle
            middle_character = character
    return first_half + middle_character + second_half


print(get_palindrome(raw_input("String containing palindrome:")))

3
Điều đó thực sự khá táo tợn XD
Sean Allred

7

giải thích tin sinh học

Câu hỏi rất ngầu!

Palindromes trong ngôn ngữ bình thường không được chỉ định hoàn toàn rõ ràng, ví dụ nếu không gian được phép hay không. Vì vậy, không rõ liệu những điều này có nên được cho phép như palindromes hay không:

  • Ngỗng có thấy Chúa không?
  • Một người đàn ông, một kế hoạch, một con kênh - Panama!

Dù sao, tôi nghĩ rằng bạn đang đề cập đến ý nghĩa khoa học được chỉ định tốt hơn của palindrom: Để một chuỗi nucleotide được coi là một palindrom, chuỗi bổ sung của nó phải đọc theo hướng ngược lại. Cả hai sợi tức là sợi đi từ 5 'đến 3' và chuỗi bổ sung của nó từ 3 'đến 5' phải là bổ sung (xem tại đây ).

Có một số nghiên cứu được thực hiện để nhận dạng chuỗi palindrom và tôi nghĩ bạn thực sự nên đọc ít nhất điều này . Để giải quyết vấn đề của bạn, bạn có thể sao chép cách tiếp cận của họ! Giáo sư thậm chí còn gửi mã nguồn nếu bạn hỏi anh ta.

Vâng, bây giờ đến vấn đề trong tầm tay. Giả sử bạn có một chuỗi nucleotide được đưa ra dưới dạng một chuỗi ký tự. Cách tốt nhất để tìm palindromes theo trình tự như vậy là sử dụng các thuật toán tiêu chuẩn. Tôi nghĩ rằng đặt cược tốt nhất của bạn có lẽ là sử dụng công cụ trực tuyến này: http://www.alagu-molbio.net/palin.html

Vì bạn được yêu cầu cung cấp một chức năng thực hiện nhiệm vụ, bạn cần suy nghĩ về cách đưa chuỗi của bạn vào ứng dụng này? Vâng, có những niềm vui bắt đầu. Tôi nghĩ rằng bạn có thể sử dụng selen cho điều đó. Vì tôi không muốn làm bài tập về nhà của bạn, tôi chỉ cung cấp cho bạn ý tưởng cơ bản. Trong Java, thế giới của bạn bắt đầu như thế này:

package testing;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

public class PalindromeService {


    public static void main(String[] args) {
        WebDriver d1 = new PhantomJSDriver();

        d1.get("http://www.alagu-molbio.net/palin.html");

        String sequence = "AAGTCTCGCGAGATCTCGCGAGATCTCGCGAGATCTCGCGAGAAA";

        WebElement txtArea = d1.findElement(By.tagName("textarea"));

        txtArea.sendKeys(sequence);

        WebElement send = d1.findElement(By.cssSelector("input[type=submit]"));
        send.click();

        String result = d1.findElement(By.tagName("body")).getText();

        Pattern p = Pattern.compile(".*capitalized\\.[^agctACGT]*([agctACGT]+).*");
        Matcher m = p.matcher(result);
        if (m.find()){
            result = m.group(1);
        }

        //now you have all palindromes in upper case! 
        //I think you can take it from here, right?

        System.out.println(result);

        d1.quit();
    }
}

Trong trường hợp bạn quan tâm đến palindromes ngôn ngữ, bạn có thể sử dụng cùng một kỹ thuật với các dịch vụ web khác như http://www.jimsabo.com/palindrome.html hoặc http://calculator.tutorvista.com/math/492/palindrome-checker .html

kỹ thuật trolling mã

  • bỏ qua các nguồn thực sự hữu ích như http://rosettacode.org/wiki/Palindrome_detection

  • blah thú vị nhưng không có ích về tin sinh học

  • cố tình hiểu nhầm đây là nhiệm vụ tin sinh học

  • gian lận - để giải quyết vấn đề một dịch vụ web được sử dụng


6

Con trăn

def get_substrings(a_string):
    """Get all possible substrings, including single character substrings"""
    for start_index in range(len(a_string)):
        for end_index in range(start_index + 1, len(a_string) + 1):
            yield a_string[start_index:end_index]

def get_longest_palindrome(a_string):
    """Find the longest palindrome in a string and return its index or -1"""

    # Initialise variables
    longest_palindrome = get_longest_palindrome.__doc__[5:27]
    palindromes_list = []

    # Search string for all palindromes
    for substring in get_substrings(a_string):
        if reversed(substring) == substring:
            palindromes_list.append(substring)

    # There should always be palindromes in non-empty strings (single characters),
    # but it's good practice to check anyway
    if len(palindromes_list) > 0:
        longest_palindrome = max(palindromes_list, key=len)

    return a_string.find(longest_palindrome)

Chuỗi "palindrom dài nhất" được trích xuất từ ​​chuỗi doc vào longest_palindrome.

Các reversed()chức năng trả về một iterator, vì vậy reversed(substring) == substringsẽ không bao giờ là sự thật và longest_palindromesẽ không bao giờ được ghi đè.

Do đó, hàm theo nghĩa đen sẽ tìm thấy "palindrom dài nhất" bên trong một chuỗi.


Nhưng "palindrom dài nhất" thậm chí không phải là một palindrom ... và ai đó đã đăng cái này.
Joe Z.

4
Vấn đề với các giải pháp như thế này là chúng quá rõ ràng. Ngay cả một lập trình viên mới bắt đầu cũng sẽ biết bạn đang dẫn dắt họ.
Joe Z.

1
@JoeZ. Tôi đã thêm một phiên bản ít rõ ràng hơn.
grc

1
Phiên bản ít rõ ràng hơn của bạn đạt được nhãn hiệu. Nó sẽ là tốt đẹp nếu bạn loại bỏ phiên bản rõ ràng, mặc dù.
Joe Z.

5

Javascript

Ồ, thật dễ dàng;). Ở đây ya đi:

function () {
    var palidrome = "Star? Not I! Movie – it too has a star in or a cameo who wore mask – cast are livewires.

Soda-pop straws are sold, as part-encased a hot tin, I saw it in mad dog I met. Is dog rosy? Tie-dye booths in rocks.

All ewes lessen ill. I see sheep in Syria? He, not I, deep in Syria, has done. No one radio drew old one.

Many moths – I fondle his; no lemons are sold. Loot delis, yob, moths in a deli bundle his tin. Pins to net a ball I won – pins burst input. I loot to get a looter a spot paler. Arm a damsel – doom a dam. Not a base camera was in a frost, first on knees on top spot. Now a camera was a widened dam.

Ask: Cold, do we dye? No, hot – push tap, set on to hosepipe. Nuts in a pod liven.

A chasm regrets a motto of a fine veto of wars. Too bad – I all won. A sadist sent cadets – a war reign a hero derides. A bad loser, a seer, tossed a cradle – he begat to cosset – a minaret for Carole, Beryl, Nora. We’re not as poor to self.

I risk cold as main is tidal. As not one to delay burden, I don’t set it on “hot”. A foot made free pie race losses runnier. As draw won pull, eye won nose. Vile hero saw order it was in – even a moron saw it – no, witnessed it: Llama drops – ark riots. Evil P.M. in a sorer opus enacts all laws but worst arose. Grab a nosey llama – nil lesser good, same nicer omen.

In pins? No, it is open. If a top spins, dip in soot.

Madam, as I desire, dictates: Pull aside, damsels, I set a rag not for a state bastion. A test I won e.g. a contest I won.

Kidnap, in part, an idle hero. Megastars, red, rosy, tied no tie. Blast! A hero! We do risk a yeti’s opposition!

He too has a wee bagel still up to here held.

Demigods pack no mask, cap nor a bonnet, for at last a case is open – I left a tip – it wets. A dog wets too. Radios to help pay my tip, pull a tip.

Ale, zoo beer, frets yon animal. Can it? New sex arose but, we sots, not to panic – it’s ale – did I barrel? Did I lose diadem, rare carrot in a jar of mine? Droop as tops sag – unseen knots.

A cat ate straw as buck risk cud; evil foe, nil a red nag ate? Bah! Plan it – silage. Model foot in arboreta.

I, dark Satanist, set fire – voodoo – to slat. I design a metal as parrot, I deem it now. One vast sum is no ten in set – amen! Indeed, nine drag a yam, nine drag a tie. Dame nabs flower; can we help man? Woman is worse nob.

Mud level rose, so refill a rut. A nag of iron I made to trot I defied – I risk leg and its ulnae. Can a pen I felt to bid dollar or recite open a crate, open a cradle, his garret?

Sample hot Edam in a pan. I’m a rotten digger – often garden I plan, I agreed; All agreed? Aye, bore ensign; I’d a veto – I did lose us site. Wool to hem us? No, cotton. Site pen in acacias or petals a last angel bee frets in.

I met a gorilla (simian); a mate got top snug Noel fire-lit role. Manet, Pagnol, both girdle his reed bogs.

Flan I reviled, a vet nods to order it, Bob, and assign it. Totem users go help mates pull as eye meets eye. Son – mine – pots a free pie, yes? No. Left a tip? Order a dish to get. A ring is worn – it is gold. Log no Latin in a monsignor, wet or wise. Many a menu to note carrot.

Cat in a boot loots; As I live, do not tell! A bare pussy, as flat on fire, I know loots guns, fires a baton, nets a hero my ale drop made too lax.

If it is to rain, a man is a sign; I wore macs, no melons rot. I use moths if rats relive, sir, or retire.

Vendor pays: I admire vendee, his pots net roe. Nine dames order an opal fan; I’ll ask cold log fire vendor to log igloo frost. Under Flat Six exist no devils.

Marxist nods to Lenin. To Lenin I say: “Mama is a deb, besides a bad dosser.”

Gen it up to get “ova” for “egg”. I recall a tarot code: yell at a dessert side-dish sale. Yes/nos a task cartel put correlate: E.S.P. rocks a man. I am a man, am no cad, I’m aware where it’s at!

Fire! Its an ogre-god to help, man, as I go. Do not swap; draw, pull a troll!

It’s not a cat I milk – calf, for a fee, sews a button – knit or tie damsel over us. Mined gold lode I fill until red nudes I met in a moor-top bar can. I sit, I fill a diary – trap nine men in ten-part net – oh, sir, I ask, cod nose? No, damp eel.

So, to get a name! I say, Al! I am Al! Last, I felt, to breed, deer begat.

To can I tie tissue – damp – or deliver Omani artist – a man of Islam.

In a den mad dogs lived on minis a signor who lived afore targets in at. As eremites pull, I, we, surf, fantasise, mend a bad eye. No hero met satyr; Tony, as I stressed, won’t, so cosset satyr.

A vet on isles made us sign it, a name. Foe man one sub.

Aside no dell I fret a wallaby; metal ferrets yodel, like so. On a wall I ate rye. Bored? No, was I rapt! One more calf? O.K., calf, one more, bossy! No! Lock cabin, rob yam, sip martini. Megastar was in a risk.

Cat? No, I’m a dog; I’m a sad loyal pet. A design I wore – kilts (a clan); if net drawn, I put it up. Royal spots snag – royal prevents rift.

Composer, good diet, are both super, God – label it a love of art, lustre. Video bored, no wise tale e.g. a mini tale – no sagas seen. Knack: cede no foes a canal.

Pay – as I sign I lie; clear sin it is; e.g. “Amadeus” sign I – lira for ecu, decimal – sin as liar.

Trad artistes pull a doom, a drawer won’t.

Is it sold loot? No, I suffered loss. A man is god; Amen! I came nice Tahiti (sic).

It’s ale for a ban if for a fast – is role to help mash turnip? Use zoo? No – grasp order – use no zoos. Warts on time did sag.

No grade “X” “A” Level? Oh, “A”! I’d a “B” or a “C”. So – pot? No, we lop. Date? Take no date! Bah! Play L.P.

Miss (a lass, all right?) flew to space in NASA era. Rose no (zero) cadets ate raw. As a wise tart I fined rags red Lenin, we help pay bet – a risk – cash to Brian. I put a clam in a pool – a pool wets.

Mahdi puts a stop to harem – miss it in one vote, lost in one, veto of none. Post-op, no tonsil; I ate; no tastier, eh? We sleep at noon time so I dare not at one; no time stops as I time tides. A bed: under it, roll; in a mania, panic!

In a pond I did as Eros as Lee felt tenrec. “Ink” – list it under “I”. Termites put pen in a way. Democrats wonder, I too. To slay moths a dog did.

I saw elf; elf, far now, is a devilish taboo, rag-naked. I hid a bootleg disc. I, saboteur, toss it in. Oops! No legs! Laminated, a cask, conker in it, negates all if it is simple.

Hot pages are in a mag, nor will I peer, familiar tat, so lewd, native rot. Toner, ewe wore no trace; vagabond ewes do. Oh, Ada! Have pity! A pitiable eel – “Oh wet am I!” – to save, note: bite gill as I do.

Call a matador minor, eh? As I live, don’t! Is torero no rigid animal debaser if tipsy? Ale drew esteem in a matador. A bolero, monks I rate play or go dig rocks; a can I step on.

Go! Gas – it evades a bedsit – set a roost on fire. Boss sent a faded eclair to green imp or dog, I’d don a belt to boot it; if Ada hid a boot, panic.

I mock comic in a mask, comedian is a wit if for eventide. Vole no emu loved is not a ferret, so pet or witness a weasel if not. I hired less, am not so bossy, as yet amateur.

To stir evil, Edna can impugn a hotel: bad loos, hot on Elba: I may melt. Tart solicits it rawer, gets it rare. Push crate open; I ram buses, use no trams.

Did I say, not to idiot nor a bare ferret, to trap rat, strap loops rat? Stewpot was on. Hot? I was red! Lessen it! Fine man on pot? No, pen inside by a bad law. So I made rips – nine delays.

Some Roman items in a.m. ordered “Is room for a ban?” “It is,” I voted: I sat pews in aisle. Beryl, no tiro to my burden, made off for a contest, I won kiss. I may raid fine dales. I raid lochs if I to help am.

Forecast for Clare v. Essex: If no rain, a man is ref. Fusspots net foxes.

Senor is a gnome, latinos’ bad eyesore. Help misses run to border, Casanova, now, or drab hotel.

Ma has a heron; I sleep, pet’s on nose, sir! Rev. I rag loved art live – fine poser. Ultra-plan: I feign, I lie: cedar to disperse – last one? No, last six. Enamel bonnet for a dark car to toss a snail at. In it all, Eve lost; Seth’s a hero slain on a trap – Rise, Sir Ogre Tamer.

Upon Siamese box I draw design. I, knight able to help, missed an alp seen in Tangier of fine metal pots. Tin I mined rages – order nine, melt ten. Tone radios; tones are not to concur. Ten-tone radar I bomb – best fire-lit so hostel side meets eerie mini red domicile. A gulf to get is not a rare tale; no time to nod.

Row on, evil yobs, tug, pull. If dogs drowse, fill a rut. An era’s drawers draw. Put in mid-field in a band I dig a tub deep. Staff on a remit did refill a minaret.

Sam’s a name held in a flat, or, sir, bedsit. I wonder, is it illicit ore? No ties? A bit under? Retarded? Is ‘owt amiss? I’m on pot; not so Cecil, a posh guy a hero met. A red date was not to last so Cecil sat.

Tip? An iota to pay, a dot; sad, I drop item. I’d ask, call, Odin, a Norseman’s god: “Pay payee we owe radio dosh o.n.o.” I to me? No, I to media.

Peril in golf – is ball a “fore”? K.O.!

Vexed I am re my raw desires. Alto has eye on nose but tone-muser pianist is level-eyed. I lost a tie. Blast! In uni no grades are musts. Avast! Never port! Sea may be rut.

Part on rose? – It’s a petal. Define metal:

Tin is . (I gulp!) can!

I am a fine posse man, I pull a ton. Ron, a man I put on, I made suffer of evil emu’s sadism. Leo’s never a baron – a bad loss but evil – topple him, Leo’s lad. Assign a pen, can I? A pal is note decoding.

Is damp mule tail-less? No, ill; I breed for its tone. Radio speed, to grower, grew. Open a lot? No, stamp it; if for a free peso – not ecu -deign it. Times ago stone rates, e.g. at Scilly, display a wont.

No wish to get a design I, Sir Des, I’ve let? No bus sees Xmas fir. O.K. – cab – tart it up; tie lots – diamond, log or tinsel; first end errata edit. So “le vin (A.C.)”, Martini, Pils lager, one tonic.

I pegged a ball up to here when I got a top star role, Beryl. Gun is too big – won’t I menace? Yes? No?

Ill? A cold? Abet icecap’s nip. U.S.A. meets E.E.C. inside tacit sale – see! Beg a cotton tie, ma! No trial, so dodo traps exist. Arabs under-admire card label good hood stole.

In rage erupted Etna. Will a rotunda, bare villa, to tyro. Lack car? Non-U! Get a mini! My, my, Ella, more drums per gong; get a frog – nil less. Rod, never ever sneer. Got to?

I disperse last pair of devils (ah!) here today or else order cash to breed emus. Said I: “Are both superlative?” C.I.D. assign it lemon peel still. I wore halo of one bottle from a ref (football) – a tip; so hit last ego slap a mate got.

Late p.m. I saw gnu here (non-a.m.) or an idea got a dog to nod – I made felt to boot.

Fill in a lad? Nay, not all, Edna – lash to buoy. Did you biff one Venus? Not I! “Broth, girl!” ladies ordered – “No, with gin!” – a fine plate, maybe suet; no carton I made rots in it.

Med: a hill, Etna, clears in it. Ali, Emir, to slap in/slam in. All in all I made bad losers sign it – alibi. Set a lap for a level bat.

A bed, sir, eh? To put cat now? Drat! Such an idyll of a dog’s lair! That`s it, open it – a cage! Big nit sent rat! Some day (A.D.) send ewe. No, draw a pot now, do! Of wary rat in a six ton tub.

Edna, ask satyr: “Tel. a.m.?” No, tel. p.m.; Israeli tuner is damp. Use item: “Anna Regina”. No! Dye main room (“salle”) red!

Nice caps for a sea cadet in U.S.A. – Now I, space cadet, am it, sea vessel rep. Pin it on Maria, help Maria fondle her fine hotpot. No! Meet; set up to net, avoid a lesion. Set acid arena: Bruno one, Reg nil. Like it to sign in? Even I am nine-toed! I vote votes.

Oh, can a nose-rut annoy? No, best is Dorset. I know, as liar, to snoop, malign. “I’ll order it to get a bedroom door,” began a miser I fed.

Am I to peer, fan? Is a door by metal? Ere sun-up, drowse, nod, lose magnet. Food? Buns? I’ll ask. Corn? I’ll ask. Corn – I snack. Cats snack (cold rat). Sum for a bag: nil. First, is remit “traps in net”? Yes, on a par. Coots yell over a dam I made. Bared nudist went a foot, I made roots. I tip a canon: “Row, sir, at same tide; man one: row tug.”

Sewer of denim axes a wide tail – a terror recipe to hero made manic. I, to resign? I ? Never!

“OFT I FELT ITS SENSUOUSNESS” – title fit for evening is erotic; I named a more hot epic – error retaliated – I was examined for ewe’s gut, wore no named item.

A star is worn on a cap, it is too red. Am I too fat? Newts I’d under a bed. Am I mad? Are volleys too crap? A nosey tennis part-timer sits rifling a bar of mustard.

Lock cans, stack cans in rocks, all in rocks, all I snub. Do often games, old ones, word-pun use; relate, my brood, as in a free pot I made fires, I manage brood. Moor debate got tired rolling, I lampoon, so trail saw on kites.

Rod sits, ebony on nature, so Nana chose to veto video. Ten in main evening is O.T.T. i.e. killing; Ere noon, urban eradicates noise, lad, I ovate not. Put esteem on top (to hen, if reheld).

No fair ample hair – am not I nipper-less? Eva estimated ace caps I won as united. A Caesar of space, Cinderella’s moor, Niamey Don (a Niger-an name), ties up mad sire, nut! I, Lear, simpleton male, try tasks “A” and “E”

but not “XI”. Sanitary raw food won top award one Wednesday – a demo.

Start nesting, I beg a cat. I? Nepotist? Ah, trials, God! A folly, Dinah, custard won’t act up; other is debatable. Velar: of palate; sibilating is “s”.

Resold: a bed, a mill, an ill animal – snip, also trim. Eilat in Israel can tell I had ‘em. Tin I stored (am I not raconteuse?) by a metal pen. If a night, I wondered, rose, I’d all right orbit on sun, even off.

I buoy, did you? Both Sal and Ella, Tony and Alan (“Ill if too bottle-fed, am I?”) do not. God! A toga! Ed in a Roman one, rehung! Was I, M.P. et al., to get a map? Also get salt? I, hospital lab to offer, am, or felt to be, no fool – a hero.

Will it sleep? No, melting is sad ice. Vital re-push to be raid, I assume. Deer, both sacred roes, Leroy (a doter, eh?) has lived for. I, apt sales rep’s idiot to greens, revere vendors selling or fat egg-nog reps.

Murder O’Malley, my mini mate – gun on rack. Calory total: liver, a bad nut or all I wanted (“et puree garnie”): lots. “Do, oh do, ogle bald racer,” I’m dared – N.U.S. bar at six.

Esparto, dodo’s lair to name it, not to cage bees, elasticated, is nice. Esteem, as up in space, cite bad local lions, eye can emit now. G.I. boots in ugly rebel or rat’s potato gin (eh?) were hot. Pull a bad egg – epic, I note, no regal slip in it. Ram can . (I’ve lost idea!)

Tarred nets, rifles, nitro, gold – no maid stole it. Put it, rat, back or if Sam (“X”) sees sub on televised rising, I sedate Goths. I won’t – no way.

Alps, idyllic stage set, are not so gas-emitting, I educe. To nose, peer, far off, I tip mats onto lane. Power grew or got deep so I dare not stir. Of deer, billions sell. I ate lump – mad sign, I do cede – tonsil a pain, acne pang is sad also. Elm I help pot, live – tub’s sold; a ban or a bar, even so, elms, I’d assume, live for. Effused am I not, up in a manor, not all up in a mess.

Open if a main A.C. plug is in it.

Late men I fed late – pasties or not. “Rapture” by a maestro prevents a vast sum erased.

Argon in units, albeit at solid eye level, sits in a . (I presume not) . tube, son. No eyes: a hot laser – is Ed wary?

Mermaid, ex- evoker of all A.B.s, I flog. Nil I repaid. Emotion! Emotion, oh so do I dare, woe!

Wee yap-yap dog’s name’s Ron. An idol lacks a dime tip, or did, as today a potato in a pitta slice costs a lot – tons. A wet adder ate more hay. Ugh! So, pal, ice cost on top? No, miss, I’m a two-sided rat, erred nut, I base it on erotic ill; It is I, red now; it is debris, rot.

Alf, an idle he-man as “master animal lifer” did time, ran off at speed, but a G.I. did nab an idle if dim nit. Upwards rewards are natural life’s words, God. Fill up guts, boy, live now or do not emit one later. A rat on site got flu.

Gaelic, I’m odd Erin, I’m Eire, esteemed islet. So hostile rifts ebb. Mob, I.R.A., dare not net R.U.C. – no cotton. Erase not, so I dare not nettle men in red rose garden – I’m in it.

Stop late men if foreign at nine. Esplanades, simple hotel, bath, gin – king is Edward IX; obese; Ma is no pure mater. Go! Rise, sir; part anon.

I also rehash tests – ‘O’ Level Latin, Italian. S.A.S., so, to track radar. Often nobleman exists alone – not sales reps – I do. Trade ceiling, i.e. final part, lures open if evil trade.

Volga River rises on no steppe. Elsinore has a hamlet – Oh, Bard, row on Avon!

A sacred robot nurses simple hero’s eye; dabs on it a lemon. Gas, iron, Essex often stops, suffers in a mania. Ron fixes several crofts, acer of maple. Hot, I fish; cold, I arise laden; if diary amiss, I know it set no car off. Foe-damned ruby motor, it only rebels.

Ian I swept aside to visit, in a bar of moorside red, Romanis met in a more mossy ale den. Inspired am I, Oswald. A bay bed is nine p on top. No name, niftiness- elder saw it. Oh no! Saw top wet star’s pool – part star, part otter. Refer a baron to idiot, Tony, as I did.

Smart ones use submarine.

Poet, arch-super-artiste, grew artistic. I lost rattle; my amiable, not oh so old, able to hang up, mina, can deliver it, so true. “Ta, matey!” – says so Boston (Mass.) elder I hit.

On file S.A.E. was sent – I wrote poster re fat on side, volume one – loved it, never off it, I was in. Aide mocks a manic; I mock comic, I nap: too bad I had a fit, I too. Bottle ban odd, I go drop mine, ergo trial ceded a fatness, sober if not so, or a test is debased.

A vet is agog – no pet’s in a cask – corgi dog, royal pet, a risk no more.

Lob a rod at a man I meet. Sewer delays pit fires – a bedlam in a dig – iron ore rots it. No devil is a hero – Nimrod.

At a mall a cod is all I get. I bet on Eva, so Tim ate whole eel bait, I pay tip, Eva had a hood sewed. No B.A. gave car to Nero, we were not to rev it and we lost a trail; I’m a free pill, I wrong a man. I erase gap; to help miss it, I fill a set. A gent in ire knocks a cadet.

Animals’ gel on spoon – it is so true to basics – I’d gel; too bad I hide kangaroo baths – I lived as I won raffle, flew as I did go, dash, to my, also too tired now, star comedy: A wan, inept, upset I’m retired, nut; its ilk, nicer. Nettle feels a sore; sad, I did no panic in a pain, am an ill or tired, nude, based item; it is a spot.

Semitone, not a tone, radios emit; no, on tape; elsewhere it’s a tone.

Tail is not on; pots open on foot, even on it, so let oven (on, it is) simmer – a hotpot’s a stupid ham stew.

Loop a loop, animal – cat up in air.

Both sacks I rate by apple hewn in elder’s garden if it rates, I was aware – tasted a core.

Zones or areas, Annie, cap, so twelfth girl, lass, alas, simply (alpha beta) done, Kate. Tadpole won top Oscar, Obadiah, “O” Level axed.

Argon gas did emit no straw, so ozone sure drops argon, oozes up in Ruth’s ample hotel or sits afar off in a bar – of elastic, is it?

I hate cinema; cinema dogs in a mass. Older effusion to old – lost, is it now? Reward: a mood.

All upsets it.

Radar trails an Islamic educer of a riling issue, damages it in Israel. Ceiling is, I say, a plan, a case of one deck. Can knees sag as one Latin image elates, I wonder?

Oboe diverts ultra foe, volatile bald ogre – push to berate; I’d do, ogre. So, p.m., Oct. first, never play organ’s stops – lay or put it up in ward ten.

Final cast like rowing – I sedate play, old as am I, God! Am I! On tacks I ran; I saw rats. A Gemini tramp is May born.

I back colony’s sober omen of lack of lace. Rome, not Paris, a wonder.

Obey retail law – a noose killed oyster. Reflate my ball, a water-filled one. Disabuse no name of emanating issue.

Damsels, I note, vary tastes so cost now desserts. I say no! Try taste more honeyed. A bad nemesis at naff ruse will upset. I, mere Satanist, e.g. rater of a devil – (Oh wrong is a sin!) – I’m no devil’s god, damned.

Animals, if on a mat, sit. Rain, a more vile drop, made us site it in a cottage. Breed deer – bottle fits a llama.

I lay, as I emanate, go to sleep, mad ones on docks – air is hot. Entrap, net, nine men in party raid – all if it is in a crab-pot room, an itemised, under-lit, nullified old log den – I’m sure voles made it rot in knot.

Tubas we see far off lack limit. A cat on still or tall upward paws to no dog is an ample hot-dog, ergo nastier if tastier, eh? We, raw amid a conman, a mama in a mask, corpse et al., err.

Octuple tracks at a son’s eyelash side distressed a tall eye doctor, a tall ace, rigger of a vote: got put in egress; odd, abased, is ebbed, as I am, Amy, asinine lot! Nine lots! Don’t six rams live? Don’t six exist?

Alfred, nuts or fool gigolo, trod never if gold locks all in a flap on a red rose; made nine or ten stops.

I heed never, I’m Daisy, a prod never, I terrorise viler starfish. To me suitors, no lemons, came rowing. Is a sin a mania? Rot!

Sit! I fix a looted amp or delay more, hasten not. A baser if snug stool, wonkier, if not – Alf says – super, a ballet to no devil, is a stool too. Ban it, actor, race to no tune.

May names I wrote wrong (Is no man in it, a long old log?) sit in row, sign irate Goths; I dare drop it. At felon’s eye I peer, fast open – I’m nosey, esteem eyes. All upset, ample hogs resume totting. Is sad nabob tired? Roots don’t evade liver in Alf’s gob.

Deers I held right; oblong, apt enamel or tile rifle on gun spot to get a man – aim is all. I rogate, minister. Feeble gnats, alas late, prosaic, a canine pet is not to consume hot.

Loo, wet, issues old idiot; evading, I sneer, obey a deer, gall a deer, gain alpine dragnet for egg I’d net to ram in a pan I made to help master. Rags I held, arcane poet, arcane poetic error, all odd; I bottle fine panacean lust. I’d nag elks I ride if editor toted a minor. I fog a natural life.

Roses, or level dumb ones – rows in a mown, ample, hewn acre. Wolfsbane made it a garden in May, a garden indeed.

Nine mates, nine tons I must save now on time – editor raps a late man. G.I.s edit also, too. Do over if tests in a task radiate. Rob ran; I, too, fled.

“Omega” – list in alphabet.

A gander, a line of live ducks, irk cubs. A wart, set at a cast on knee, snug as spots.

A poor denim for a janitor, racer, armed aide, solid idler – rabid; I’d elastic in a pot, tons to sew.

Tubes or axes went in a clam, in an oyster. Free booze – lap it all up. Pity, my apple hot, so I’d a root stew. God, a stew! Tip it at feline! Posies, a cat’s altar often, no baron packs. A monk caps dog – I meddle here – hot? Pull its leg! A bee was a hoot, eh?

No, it is opposite. Yaks I rode wore hats, albeit on deity’s orders. Rats age more held in a trap, nip and I know it – set no cage now.

It’s eta; no, it’s a beta – Tsar of Tonga rates isles. Mad Ed is all upset at cider, is Ed? Is a madam too? Snip? I’d snip, spot a fine position, snip nine more cinemas.

Do ogres sell in a mall? Yes, on a barge so rats row tubs.

Wall last canes up or Eros, an imp, lives to irk, rasp or dam all tides sent. I won’t – I was no Roman – even I saw tired row – a sore. He lives on. “No!” we yell.

Up, now! Wards are in nurses’ sole care. I, peer, fed, am too fat? Oh, not I, test no dined ruby ale; dote not on salad it’s in – I am sad.

Locks I rifle so troops atone re war. Only rebel or a crofter animates so cottage beheld arcades, so trees are sold, abased. I redo, rehang, I err – a wasted act; nests I’d – as an owl – laid. A boot’s raw foot, even if a foot to master, germs (ah!) can evil do.

Pan is tune-pipe – so hot notes, paths up to honeydew.

Odd locks, a maddened (I was aware) macaw on top, spot no seen knots, rifts or fan, I saw. Are maces a baton, madam? Oodles, madam? Rare laptops are too late – got too lit up.

Nits rub – snip now, I’ll abate, not snip, nits I held.

Nubile Danish tomboys I led to old loser as no melons I held; no fish to my name. Nod lower, do I dare? No, one nods a hairy snipe. (Edit: one hairy snipe, eh?) See silliness, else we’ll ask cornish to obey deity’s or god’s item. I, God, damn it! I was in it! To Hades, acne trap, sad loser! As warts pop, a dosser I – we – vile rat, sack! Same row, oh woe! Macaroni, rats, as a hoot, tie. I vomit on rats.";
return '$system> KERNEL ERROR (DOES. NOT. EXCIST)'
}

:)


Cái đó có đánh bại cái này không?
Joe Z.

1
@JoeZ. Nó thực sự có;) Của tôi có số lượng từ 24.122!
C1D

2
Tuyệt vời! Thưa ông, bạn giành được 2 internets và 5 chồn kim loại yodel :)
aditsu 30/12/13

4

Ruby - Lực lượng vũ phu (Tối ưu hóa và Monkeymized!)

Tôi tìm thấy cách tốt nhất để làm điều này là thông qua Thuật toán Khỉ nổi tiếng, có lẽ bạn có thể tìm thấy nó trong BOOST. Họ luôn có cách khiến bạn nói chuyện ...

def palindrome?(in)#IMPORTANT
  if in.reverse == in
    return true
  else
    return false
end

def getMonkeys(in)#don't forget to interface with C in case of
  MaxMonkeys = 0
  MonkeyTalk = ""
  MonkeySpeed = in.length
  (0..MonkeySpeed).each do |monkeyA|
    (monkeyA..MonkeySpeed).each do |monkeyB|#optimized!
      if palindrome?(in[monkeyA..monkeyB]) do
        if in[monkeyA..monkeyB].length > MaxMonkeys do
          MonkeyTalk = in[monkeyA..monkeyB]
        end
      end
    end
  end
  MonkeyTalk
end

Điều này cực kỳ không hiệu quả, nhưng khá dễ thương và giống như ruby ​​nếu bạn đổi tên mọi thứ thành tên gốc của chúng: MaxMonkeys = len; MonkeyTalk = result, MonkeySpeed ​​= strlen; khỉA: a; khỉB: b; getMonkeys: getMaxPalindrom.
Điều này không có giá trị với OP và có nguy cơ anh ta quyết định thực sự giao tiếp với C, và tất cả chúng ta đều biết điều đó kết thúc như thế nào ...


4

Python 2.7

Tôi từ chối sử dụng các chức năng tiêu chuẩn, vì chúng không hiệu quả. Mọi người đều biết rằng cách tốt nhất để tìm kiếm độ dài là có một bảng để tham khảo, vì vậy tôi tạo một bảng gồm tất cả các palindromes có thể, và sắp xếp chúng bằng cách sử dụng bogosort pythonic, nhưng để cải thiện hiệu quả, trước tiên tôi loại bỏ trùng lặp . Tại thời điểm đó, tôi tính toán tất cả các mục là palindromes và sắp xếp chúng theo độ dài. Sau đó, bạn có thể chỉ cần lấy độ dài cuối cùng trong danh sách, có tra cứu O (n) bằng cách lặp lại danh sách.

Mã số:

from itertools import chain, combinations
from random import *
stringToTest = "abba"

#Don't forget to reference code taken from stackoverflow. (http://stackoverflow.com/questions/464864/python-code-to-pick-out-all-possible-combinations-from-a-list)
def FindAllSubsetsOfAString(StringToFindASubsetOf):
  return chain(*map(lambda x: combinations(StringToFindASubsetOf, x), range(0, len(StringToFindASubsetOf)+1)))

listOfPermutations = []

#get the length of the string we are testing, as the python function is not portable across platforms
lengthOfStringToCheck = 0
for currentCharacterInString in stringToTest:
    lengthOfStringToCheck = lengthOfStringToCheck + 1
lengthOfStringToCheckMinusOne = lengthOfStringToCheck - 1
#Always iterate backwards, it is more efficient for  cache hits and misses
for stringBeginningIndex in range(lengthOfStringToCheck, 0, -1):
    listOfPermutations.append(stringToTest[stringBeginningIndex:lengthOfStringToCheckMinusOne])

#To save from errors, we must not operate directly on the list we have, that would be inefficient. We must copy the original list manually.
# The built in functions again aren't portable, so we must do this manually, with a deep copy.
OtherListOfPermutations = []
for CurrentItemInOriginalList in listOfPermutations:
    TemporaryListItem = []
    for CurrentIndexInCurrentItemInOriginalList in CurrentItemInOriginalList:
        TemporaryListItem.append(CurrentIndexInCurrentItemInOriginalList)
    OtherListOfPermutations.append(''.join(TemporaryListItem))

#Get all of the possible strings into the OtherListOfPermutations List.
# Use Generators, and itertools. It's more efficient and more pythonic
for OriginalString in listOfPermutations:
    for CurrentPermutationInCurrentString in FindAllSubsetsOfAString(OriginalString):
      OtherListOfPermutations.append(''.join(list(CurrentPermutationInCurrentString)))

#Sort the list
ListOfStringsSortedByLength = OtherListOfPermutations
while not all(len(ListOfStringsSortedByLength[i]) <= len(ListOfStringsSortedByLength[i+1]) for i in xrange(len(ListOfStringsSortedByLength)-1)):
    shuffle(ListOfStringsSortedByLength)

#Remove all of the duplicates in the sorted list
ListOfStringsSortedByLengthWithoutDuplicates = []
for CurrentStringWorkingWith in OtherListOfPermutations:
    HaveFoundStringInList = False
    for CurrentTemporaryString in OtherListOfPermutations:
        if CurrentStringWorkingWith == CurrentTemporaryString:
            HaveFoundStringInList = True
            if(HaveFoundStringInList == True):
                ListOfStringsSortedByLengthWithoutDuplicates.append(CurrentStringWorkingWith)

#Use the ListOfStringsSortedByLengthWithoutDuplicates and check if any of the strings are palindromes
ListOfPotentialPalindromes = []
for TemporaryStringToUseForPalindromes in ListOfStringsSortedByLengthWithoutDuplicates:
    lengthOfStringToCheck = 0
    for currentCharacterInString in TemporaryStringToUseForPalindromes:
        lengthOfStringToCheck = lengthOfStringToCheck + 1
    if lengthOfStringToCheck != 0:
        TemporaryStringToUseForPalindromesReversed = TemporaryStringToUseForPalindromes[::-1]
        if TemporaryStringToUseForPalindromesReversed == TemporaryStringToUseForPalindromes:
            ListOfPotentialPalindromes.append(TemporaryStringToUseForPalindromes)

#Remove any duplicates that might have snuck in there
ListOfPotentialPalindromesWithoutDuplicates = []
for CurrentPotentialPalindrome in ListOfPotentialPalindromes:
    HaveFoundStringInList = False
    for CurrentTemporaryPalindrome in ListOfPotentialPalindromes:
        if CurrentPotentialPalindrome == CurrentTemporaryPalindrome:
            HaveFoundStringInList = True
            if(HaveFoundStringInList == True):
                ListOfPotentialPalindromesWithoutDuplicates.append(CurrentStringWorkingWith)

lengthOfPalindromes = []

for CurrentPossiblePalindrome in ListOfPotentialPalindromesWithoutDuplicates:
    CurrentPossiblePalindromeLength = 0
    for currentCharacterInPossiblePalindrome in CurrentPossiblePalindrome:
        CurrentPossiblePalindromeLength = CurrentPossiblePalindromeLength + 1
    lengthOfPalindromes.append(CurrentPossiblePalindromeLength)


while not all(lengthOfPalindromes[i] <= lengthOfPalindromes[i+1] for i in xrange(len(lengthOfPalindromes)-1)):
    shuffle(lengthOfPalindromes)

#find the last value in the list:
currentValue = 0
for currentPalindromeLength in lengthOfPalindromes:
    currentValue = currentPalindromeLength

print currentValue

chú thích

Không thực sự phù hợp với chuỗi dài hơn 4 ký tự. "Abba" có ổn không, nhưng tôi đã đi mua cà phê và nấu bữa trưa trước khi abcba làm

Các vấn đề:

Biến đặt tên điên (và mâu thuẫn quá)
Ludicrous thuật toán lựa chọn (Tính tất cả các hoán vị có thể của mỗi chuỗi con của chuỗi nhất định, kiểm tra nếu họ palindromes đang, sắp xếp chúng theo chiều dài và tra cứu giá trị cuối cùng)
Trên thực tế có chứa các giải pháp cho vấn đề

    TemporaryStringToUseForPalindromesReversed = TemporaryStringToUseForPalindromes[::-1] 

Thuật toán sắp xếp ngu ngốc (bogosort) và phương pháp nutjob để đảm bảo danh sách được sắp xếp.

Ngoài ra, có một lỗi thụt trong kiểm tra trùng lặp mà thực sự không có gì cả, nó chỉ là một sự lãng phí thời gian.


4

C

Tìm palindromes là một hoạt động cứng PNP *, vì vậy nó phải được thực hiện với mã được tối ưu hóa cao. Dưới đây là năm thủ thuật tối ưu hóa sẽ giúp tìm ra giải pháp nhanh hơn.

  1. Bắt đầu với ngôn ngữ phù hợp. Như mọi người đều biết, 'C' là nhanh nhất.
  2. Sử dụng một thuật toán nhanh. BoyerMore là người giữ kỷ lục thế giới về tìm kiếm chuỗi, vì vậy chúng tôi sẽ sử dụng điều đó. Chúng tôi cũng sẽ tìm kiếm các chuỗi con dài nhất trước tiên để chúng tôi có cơ hội tốt nhất để tìm một trận đấu dài.
  3. Biết bộ xử lý của bạn. Máy tính hiện đại chậm kinh khủng tại các chi nhánh của if this else thatmẫu. (Khi bạn tiến xa hơn trong sự nghiệp, bạn nên nắm vững Dự đoán chi nhánh nếu bạn muốn trở thành một ninja mã thực thụ.) Mã này tránh được ifvấn đề phân nhánh bằng cách sử dụngfor báo cáo thay vào đó, mang đến cho bạn 3 hướng dẫn với mức giá của một.
  4. Hãy chú ý đến "Big-O". Thuật toán này sử dụng không có dấu ngoặc nhọn bên trong các thân hàm, do đó ngăn chặn mọi vòng lặp lồng nhau. Vì vậy thời gian chạy phải là O (N).
  5. Đừng quên tối ưu hóa vi mô. Bằng cách sử dụng kỹ thuật nổi tiếng để loại bỏ tất cả các khoảng trắng giữa các câu lệnh, tôi có thể giảm khối lượng công việc của trình biên dịch và tăng thêm 10% tốc độ.

Nhưng đừng bỏ qua tên biến, khả năng đọc là quan trọng.

* Palindrom-Không phải Palindrom

#define OFFSET 0XFF
#define ln(s) strlen(s) //macro to avoid runtime overhead

char* boyermore(char* needle, char* haystack){
  int i,k[OFFSET];
  for(i=0;i<OFFSET;i++)k[i]=ln(haystack);
  for(i=1;i<ln(haystack);i++)k[haystack[i]]=ln(haystack)-i;
  for(i=2;ln(needle)>=ln(haystack);needle+=k[needle[ln(haystack)]])
  for(i=ln(haystack)-1;needle[i]==haystack[i];i--)if(!i)return needle;
  return 0xFF-OFFSET;
}

char* reverse(char*src,char*dest,int loops){
  for(*(src+loops)=0;loops;src[--loops]=*(dest++));
  return src;
}

#define imax(a,b) ((a>b)?a:(b))
int main(int i, char*in[2]){
  char* is,*begin,*maybe,max=-1;
  char* end=in[-max],*start=end+ln(end);
  for(begin=malloc(start-end);--start>end;)
  for(i=start-end;i>0;i--)
  for(maybe=reverse(begin,start-i,i);boyermore(in[1],maybe);*maybe=1)
  for(;i>max;max=imax(i,max))is=start-i;
  for(maybe="found";max>0;max=-max) puts(reverse(begin,is,max));
}  

Bên cạnh việc troll rõ ràng trong bình luận, có một số vấn đề khác. Thuật toán tìm kiếm là một triển khai hợp lệ của Boyer-Moore-Horspool, nhưng nó không bao giờ lưu trữ độ dài chuỗi, thay vào đó gọi strlen một cái gì đó giống như N * M lần, làm cho nó chậm hơn nhiều so với tìm kiếm đơn giản. "Tìm kiếm chuỗi dài nhất trước tiên" là đúng, nhưng sau đó nó không tìm kiếm theo thứ tự độ dài, do đó, một lối ra sớm sẽ đưa ra một câu trả lời sai, nếu nó được thực hiện. Nhưng không phải, vì vậy nó tìm kiếm tất cả N! khả năng nào. Và hầu như tất cả các tên tham số (kim / haystack; src / mệnh) được đảo ngược với ý nghĩa tiêu chuẩn của chúng.


3

Đây là những gì tôi có cho đến nay trong VB6:

Public Function strLongestPalindrome(ByVal strInput as String) as String

    strLongestPalindrome = ""
    Dim a as Integer
    Dim b as Integer

    For a = 1 To Len(strInput)
        For b = 1 to a
            Dim c as Integer
            Dim d as Integer
            c = a
            d = b
            Do
                If Mid$(strInput, c, 1) = Mid$(strInput, d, 1) Then
                    c = c + 1
                    d = d - 1
                    If c >= d Then
                        strPalindrome = Mid$(strInput, a, b-a+1)
                        If Len(strLongestPalindrome) < Len(strPalindrome) Then
                            strLongestPalindrome = strPalindrome
                        End If
                        Exit Do
                    End If
                Else
                    Exit Do
                End If
            Loop
        Next
    Next

End Function

Nhưng tôi không nghĩ rằng nó hoạt động, và tôi nghĩ rằng tôi có thể làm cho nó tốt hơn.


2
Đây được cho là câu trả lời cuối cùng, không troll, mặc dù với những người chưa bao giờ được mã hóa trong VB6 trước đây, bạn có thể không biết rằng nó không có nghĩa vụ phải troll.
Joe Z.

3

Đây là một giải pháp Java dành cho bạn:

public String findLongestPalindrome(String s){
   if(s.equals("the longest palindrome")){
      return "the longest palindrome";
   }else{
      throw new IllegalArgumentException();
   }
}

3
Nhưng "palindrom dài nhất" thậm chí không phải là một palindrom ...
Joe Z.

2

Tự động

;msgbox % longest_palindrome_in_string("racecar abcdedcba alkdf")

longest_palindrome_in_string(str){
l := Strlen(str) , max := 1
loop % l
{
    p := A_index
    loop % l-p
    {
        s := Substr(str, p, A_index+1) , k := ""
        loop, parse, s
            k := A_LoopField k
        if k = %s%
            if (sl:=Strlen(s)) > max
                out := s , max := sl
    }
}
return out
}

Hàm trả về các khoảng trắng vì chúng là một phần của chuỗi palindrom trong chuỗi. Vì vậy, các lợi nhuận trên <space>abcdedcba<space>.


1

Polyglot

Điều này là trolling bởi vì nó yêu cầu "tìm palindrom dài nhất trong một chuỗi", vì vậy nó đang tìm palindrom dài nhất trong "một chuỗi"

String palindrome(){
    return null; //There are no palindromes in "a string"
}

Điều này sẽ không trả lại bất cứ điều gì khi tôi đặt "abcba" vào nó ... bạn có chắc là nó hoạt động không?
Joe Z.

@JoeZ. Tôi đã quên nói lý do tại sao nó bị
troll

5
Tôi hiểu điều đó, nhưng như tôi đã nói với một nhóm người khác, điều đó quá rõ ràng. Kiểu chơi chữ này sẽ không tạo ra một trò troll hay.
Joe Z.

1
Có một số palindromes (dài một ký tự) trong một chuỗi. Tập mã ở trên không chính xác.
Bến

2
@Ben Có 9 palindromes trong "một chuỗi" - "", "a", "", "s", "t", "r", "i", "n", "g". Câu hỏi rõ ràng yêu cầu lâu nhất (như trong số ít). Vì như tôi thấy, có một cách buộc 8, câu trả lời là không xác định. Do đó null là một giá trị trả về thích hợp.
emory

1

Tôi không bao giờ biết chuỗi có thể chứa palindromes, bạn có thể chỉ cho tôi nơi bạn đã học được điều này? Và nếu bạn cần bảng màu dài nhất, vui lòng truy cập trang web này: http://www.norvig.com/pal2txt.html


1

Lặp lại qua từng ký tự của chuỗi. Sau đó kiểm tra các ký tự trước và sau ký tự đó. Sau đó, các nhân vật hai trước và hai sau nhân vật đó. Tiếp tục lặp lại cho đến khi bạn nhận được các ký tự không giống nhau. Điều này sẽ cho phép bạn xác định độ dài của mỗi palindrom trong từ. Tuy nhiên phương pháp này sẽ chỉ hoạt động đối với các palindromes có chiều dài lẻ. Để kiểm tra các palindromes có độ dài chẵn, kiểm tra ký tự ở vị trí i và i-1, sau đó i + 1 và i-2, sau đó i + 2 và i-3, v.v ... Hy vọng điều này sẽ giúp !!


1

Câu trả lời rõ ràng là so sánh chuỗi với nghịch đảo của chính nó và tính toán chuỗi chung dài nhất.

Chương trình Perl sau đây làm điều đó. Bạn có thể cần tải xuống mô-đun Acme :: DonMartin, nó thường không được cài đặt theo mặc định.

use Acme::DonMartin;

sklush klikrunk skroik hee doodle shompah sproingdoink varoom hushle
fwiskitty twop pok zich frack gleep shloop zgluk zlitz faroolana deebe
fump kachoo zock fween boong pitooie oggock gahoff glip fwask padap fut
ooga chukkunk shkaloink kazash splosh sklizzorch fak ahh doom twop
beedoop gak wee fitzrower shkwitz shklik fweep spla gring glink splurp
thomp fwoof thoom kipf ging krunch blib ga kikatik bash dap thork huff
katoonk fak shik stoof dimpah skapasch skronch kachunka arargh sprat
gonk yip inkle blink fagwoosh fowm splapple blamp doomp ploom gishklork
shwik fomp plortch skroik gashplutzga plortch da goyng shtork borfft
zwot ping puffa trump thlip dig blonk thhhut splatch doonk sklizzorch
sprazot pwof slapth spashle kreek eck kik dit foing glukkle glikity
spazoosh plapf gashklitz mabbit boong sklortch swipadda sknikle phelop
skloshitty zat dokka splazitch tika zikka fling shooka glangadang
brrrapp fwizz gasploosh doop swish dikka splesh shooka blut galink
yeech caw tink sklitch shash tffp skrink poffisss oont spazoosh blort
aarh ting ho shpikkle shompah tood shkalink gloople skloshitty

Bạn có thể tìm thấy mô-đun tại đây: metacpan.org/pod/Acme::DonMartin
dland 30/12/13

1

Lua / Python

Lua là một ngôn ngữ rất nhanh (mà bạn cần, bởi vì có rất nhiều chuỗi con cần kiểm tra!), Nhưng Python tốt hơn với việc xử lý chuỗi. Vậy tại sao không sử dụng cả hai?

Bởi vì tôi đã nghe thấy rất tốt khi có các biến cục bộ, tôi có một biến. Ngoài ra, tôi đã tách các lệnh gọi hàm khỏi các đối số của chúng, vì quá nhiều đối số làm cho các biểu thức lộn xộn và không thể đọc được.

Ngoài ra, tôi nghĩ rằng điều này sẽ hoạt động với bất kỳ chuỗi nào bạn muốn thử, có lẽ sẽ không có bất kỳ vấn đề nào với đầu vào lạ.

function is_palindrome()
    if os.execute("python -c 'exit(\"" .. is_palindrome_argument .. "\"==\"" .. is_palindrome_argument .. "\"[::-1])'") == true then
        return false
    else
        return true
    end
end

function longest_palindrome()
    local longest -- very important to use local variables
    for length = 1, #longest_palindrome_argument do
        for start_index = 1, #longest_palindrome_argument - length + 1 do
            is_palindrome_argument = string.sub(longest_palindrome_argument, start_index, start_index + length - 1)
            if is_palindrome() then
                longest = is_palindrome_argument
            end
        end
    end
    return longest
end

longest_palindrome_argument = "foo racecar"
print(longest_palindrome())

(BTW, bạn sẽ không tin việc này mất bao lâu để tôi làm cho nó hoạt động.)


1

Python one-liner:

s = "here goes your string"
print max(p for p in [s.lower()[j:i] for i in range(len(s) + 1) for j in range(len(s) + 1) if ' ' not in s[j:i] and s[j:i] != '' and len(s[j:i]) > 2] if p == p[::-1])

1

Python - 126 ký tự

Đây là của tôi lúc này:

k=[]
for i in range(len(p)):
 for j in range(i,len(p)):
  if p[i:j]==p[j:i:-1]:
   k.append(p[i:j+1])
k.sort(key=len)
k=k[-1]

Điều này hoạt động trong cả Python 2.x và 3.x, tôi tin. Biến k giữ câu trả lời.

EDIT: Tôi quên nói, biến p nên giữ chuỗi để kiểm tra palindromes.

Đây là một triển khai hợp pháp, vì vậy nó sẽ hoạt động cho bất kỳ chuỗi nào.


Btw, đây là golf mã đầu tiên của tôi! Woohoo! : P
cjfaure

Điều này thực sự có một thẻ trolling mã và do đó là một cuộc thi trolling mã.
Pierre Arlaud

1
@ArlaudPierre Yup, nhận ra rằng sau khi tôi đăng. Thở dài. xD
cjfaure

Tôi có nghĩa là như vậy là một cuộc thi phổ biến *. Được rồi đừng bận tâm xD
Pierre Arlaud

0

Java

Rõ ràng nếu aStringbản thân nó là một palindrom thì aStringlà palindrom dài nhất bên trong aString. Bạn có thể nói nó đang hoạt động bằng câu lệnh khẳng định. Đừng suy nghĩ quá nhiều về dòng mã thực thi đầu tiên. Đó chỉ là bản tóm tắt java tiêu chuẩn.

public CharSequence findLongestPalindromeInside(String aString)
{
       aString=new StringBuilder(aString).append(new StringBuilder(aString).reverse());
       assert isPalindrome(aString);
       return aString;
}

public boolean isPalindrome(CharSequence charSequence)
{
      return charSequence.toString().equals(new StringBuilder(charSequence).reverse().toString());
}

0

Ngôn ngữ nhà sản xuất trò chơi

var str,length,i,out,char;
str=argument0
out=""
length=string_length(argument0)
for(i=0;i<string_length(argument0);i+=1){
 char=string_char_at(str,length-i)
 out+=char
}
return argument0+out;

Có thể muốn mô tả những gì đang xảy ra?
Joe Z.

0

Pháo đài

Các chuỗi quá khó để làm việc với Fortran, vì vậy tôi đã chọn sử dụng iacharđể chuyển đổi tất cả chúng thành số nguyên:

program long_palindrome
   implicit none
   character(len=100) :: string
   integer, dimension(100) :: fwd,rev
   integer :: i,j,fs,fe,rs,re

   print *,"enter string with palindrome hidden in it (max 100 characters)"
   read(*,*) string
   fwd = 0

! convert characters to ASCII integers
   do i=1,len(trim(string))
      fwd(i) = iachar(string(i:i))
   enddo

! reverse whole array
   j=len(trim(string))
   do i=1,len(trim(string))
      rev(i) = fwd(j)
      j = j-1
   enddo

! match strings of fwd and rev
   rs = 1; re = len(trim(string))
   fs = 1; fe = len(trim(string))

! test to see if whole thing is a palindrome
   if(all(fwd(fs:fe)==rev(rs:re))) then
      print *,"longest palindrome is "//string(fs:fe)//" with length",fe-fs+1
      stop
   endif

! nope? oh well, guess we have to loop through and find it
   fs = 0
   do
      fs = fs+ 1
      do fe = len(trim(string)),fs+1,-1
         do rs=1,fs
            re = fe-rs+1
            if(all(fwd(fs:fe)==rev(rs:re))) then
               print *,"longest palindrome is "//string(fs:fe)//" with length",fe-fs+1
               stop
            endif
         enddo
      enddo
      if(fs==len(trim(string))-1) exit
   enddo

   print *,"hmm, doesn't look like there was a palindrome of length > 1..."
end program long_palindrome

Nó không chính xác làm việc. Cho chuỗi aabbaacnó nói dài nhất là aa, nhưng được cho chuỗi acasdabbbaabb, nó nói dài nhất là abbba. Đủ gần.


Trên thực tế, bbaabblà dài hơn trong cái thứ hai.
Joe Z.

@JoeZ.: Như tôi đã nói, đủ gần. : D
Kyle Kanos

0

Bạn không thể cạnh tranh trong thị trường ngày nay chỉ bằng cách làm những gì được yêu cầu. Mã này cũng sẽ tìm thấy palindrom ngắn nhất và không phân biệt chữ hoa chữ thường:

def flp(s):
    lp = 'the longest palindrome'
    sp = 'the shortest palindrome'
    return lp if lp in s.lower() else sp if sp in s.lower() else ''

>>> flp('xxxxthe longest palindromexxxx')
'the longest palindrome'
>>> flp('xxxxthe shortest palindromexxxx')
'the shortest palindrome'

0

Lua

function findPalendromes(str)
    str=str.." "
    ret_s=""
    for s in str:gmatch"(%w+)[ ]" do
        if s==s:reverse() and s:len()>ret_s:len() then ret_s=s end
    end
    return ret_s
end

0

Triển khai Python hiệu quả nhất mà bỏ qua tất cả các nỗ lực khác:

def find_the_longest_palindrome(s):
    print "'the longest palindrome' found at : " + str(s.find("the longest palindrome"))

Ghi chú:

Điều này sẽ luôn luôn tìm thấy "palindrom dài nhất"

Đó là trường hợp nhạy cảm.

Với một số sửa đổi, nó cũng có thể được thực hiện để tìm các chuỗi khác. Tuy nhiên, bạn sẽ cần tạo một lớp, thêm một phương thức thích hợp và sau đó phân lớp nó cho mỗi chuỗi được tìm thấy.

Chức năng này có thể được cải thiện bằng cách chuyển sang FORTRAN 77 hoặc mã hóa cứng vào mã máy Intel 8008.


0

Đây là câu trả lời trolling mã đầu tiên của tôi. Đó không phải là một trò troll đặc biệt tàn bạo, nó chỉ đánh vào tôi như một cách ngớ ngẩn để trả lời câu hỏi

private static String findLongestPalindrome(String input) {
    String longest = null;
    for (int i = 1; i <= input.length(); i++) {
        Matcher m = pattern(i).matcher(input);
        if (m.find()) {
            longest = m.group();
        }
    }
    return longest;
}

private static Pattern pattern(int len) {
    int size = len / 2;
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < size; i++) {
        sb.append("(.)");
    }

    if (len != size * 2) {
        sb.append(".");
    }

    for (int i = size; i > 0; i--) {
        sb.append("\\").append(i);
    }
    return Pattern.compile(sb.toString());
}

Quỷ là:

  • Tạo thủ công cùng một mẫu mỗi lần
  • Sử dụng backreferences đắt tiền để tìm palindromes
  • Lặp lại từ 1 đến input.length () (thực hiện ngược lại bạn sẽ được đảm bảo rằng trận đấu đầu tiên bạn tìm thấy là dài nhất. Thực hiện theo cách trên là ngu ngốc)

0

Con trăn 3

from itertools import takewhile

def common_part(s1, s2):
    return sum(takewhile(bool, (a==b for a, b in zip(s1, s2)))) 

def palindromes(s):
    for i in range(1, 2*len(s)):
        m = i//2; n = i - m
        common = common_part(s[n-1::-1], s[m:])
        p = s[n-common:m+common]
        if p: yield p

string = input('> ')

print('Longest palindrome is', repr(max(palindromes(string), key=len)))

Chương trình rất hiệu quả. Nó tìm kiếm các palindrom dài với trung tâm ở các vị trí liên tiếp (trên char và giữa) và chọn dài nhất

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.