文字列内で最長の回文を見つけるにはどうすればよいですか?


33

チャレンジ:

文字列内で最長の回文を見つける関数を作成します。

注:これは質問です。質問や回答を真剣に受け取らないでください。詳細はこちら


7
あなたが言うことができなかった場合、これは別のトローリングの問題ですが、最後よりも説明が少なくなります。
ジョーZ.

19
悲しいことに、「文字列」にはパリンドロームがまったくありません。
マークリード

17
code-trolling私の新しいお気に入りのタグもそうです。

4
我々は持っている2今ホットネットワークの質問リスト上のコード・トローリングの質問を!
ジョーZ.

18
うーん。最初の[コードトローリング]の質問は面白いものでしたが、皆さんが注意を怠ると、これらの質問がこのサイトの品質を本当に低下させると感じざるを得ません。これらの質問は簡単に作成でき、貧弱に回答するのも簡単です。これらの質問は非常に速く、非常に古くなっています。ちょうど私の2セント。
リード

回答:


19

行く

Goの次のソリューションでは、並行性、クロージャ、再帰性の隠された能力を使用して、指定された文字列内で最長の回文を見つけます。

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
}

さらに、言語のプリミティブと組み込み型に完全に依存しているため、標準ライブラリはありません。これが、真の品質のソフトウェアを認識する方法です。

入力文字列が大きい場合、スレッド、メモリ、およびスタックサイズの制限を少し上げたい場合があります。これは、このソリューションが非常に高速であるため、OSがallするからです。

編集–特典:

  • マルチバイト文字列ではまったく役に立ちません。
  • 句読点や空白文字を省略しません。
  • 大文字/小文字の等価性を省略します。
  • 計算に時間がかかりますが、非常に遅いです。
  • 入力に応じて、多くのゴルーチンを生成します。
  • 私のマシンで数秒後にメモリ不足のために殺されます。入力用に16000以上のゴルーチンが生成されました。"345345ABCDEabcde edcbaDEABC12312123"

45

Python

def longest_palindrome(s):
    return 'racecar'

使用例:

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

注:これは特定の文字列でのみ機能する場合があります。


21
「abcdedcba」で試してみましたが、「racecar」が返されました...何が間違っていますか?
ジョーZ.

22
@JoeZ。間違った文字列を使用しています。「abcde racecar」で試してみてください。
GRC

10
わかりましたが、今では「abcde racecar edcba」で試していますが、はるかに大きな回文が利用できるにもかかわらず、「racecar」のみが返されます。
ジョーZ.

63
@JoeZ。うーん...おそらくユニコードの問題です。
GRC

11
@JoeZ。おそらく新しいコンピューターを購入する必要があります。
エモリー

13

明らかに、パリンドロームの確認は困難です。

そのため、ソリューションは非常に簡単です-テストする文字列と同じ大きさの可能なすべてのパリンドロームのセットを生成し、文字列に含まれているかどうかを確認します。

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();
}


{

}
    } 

}


}

(コードの正確性をチェックする必要があるかもしれませんが、そうでなければ、パリンドロームをチェックするための素晴らしく恐ろしく非効率的な方法です)


計算が非常に難しいため、長い文字列でプログラムを実行することはありません。だからこれでいい。エンタープライズ環境で実行している場合は、より優れたVPSまたはデータセンターで実行することにより、スケーリングできます。宿題の場合は、3〜4文字の文字列で十分です。
エミールヴィクストローム14年

12

Perl

すべてが求められますか。考えられるすべてのサブシーケンスを考慮に入れるため、実際には優れています。キャッチは何ですか?これは指数時間で動作するため、文字列に文字を追加するたびに実行時間が2倍になります。20文字以上を指定すると、1日かかります。

$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]})

入力:iybutrvubiuynug。出力:ibutubi

入力:abcdefghijklmnopqrstuvwxyzzyxwvutsrqponmlkjihgfedcba。出力:起こりません


これは文字通り私の答えですが、Perlにあります。また、Monekmizedではありません。編集:NVM、鉱山のより効率的な

私はあなたの答えをあなたの前に投稿したので、それはコピーではありません。
PhiNotPi

2
最初にアイデアを思いつきました!私はそれを書くのにもっと時間がかかりました(Cと猿のジョークを考えなければなりませんでした。また、最適化は追加の開発時間の価値があります)

6
大丈夫。私は自分の非能率に誇りを持っています。
PhiNotPi

10

以下の図のように、問題は正規表現で簡単に解決できます(ただし、代わりにjavaを使用することにしました)。これは、正規表現が常にテキストの抽出または分析を伴うあらゆるものに使用できる最良のツールであるためです。

I know regular expression

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 + "\".");
    }
}

このコードは次の理由で悪です:

  • 指定されたテキストのサイズまで指数関数的に実行されます。az形式のすべての文字列を列挙し、生成された各文字列に対して2つの正規表現を作成し、各正規表現に対して入力をテストすることにより実行されます。
  • さらに、回文に大文字、数字、非ASCIIテキスト、句読点などが含まれている場合は失敗します。
  • そしてもちろん、正規表現は明らかにそのための適切なツールではありません。

そしてもちろん、GUIパーツは注意をそらすためだけにあります:>
エミールヴィクストローム14年

@EmilVikströmええ、コードトローリングの副作用は、MVCパターンを喜んで破壊できることです。さらに、怠zyなOPはおそらくMVCが何であるかを知らず、すべてのGUIが結合されているプログラムにはるかに感銘を受け、古いプロンプト/コンソール/ DOSスタイルの退屈よりも美しく、高度であると思いますwindows(しかし、彼の先生はそうは思わないかもしれません)。OTOH、もし怠zyなOPが結合GUIを好まないのなら、それは素晴らしいことです。とにかく目的は彼をいらいらさせることでした。
ビクターStafusa 14年

前奏曲でさえ間違っています。技術的に言えば、回文は正規文法の一部ではないため、正規表現では認識できません。幸いなことに、状況依存文法のクラスの一部を含むPCREがあります。
recursion.ninja 14年

7

Python

これは文字列を取得し、可能な限り長い回文に再編成します。

例えば:

入力:こんにちは

出力:笑

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
それは実際にはかなり生意気なXDです
ショーン・オールレッド

7

バイオインフォマティクスの解釈

非常にクールな質問の男!

通常の言語の回文は、たとえばスペースが許可されているかどうかなど、完全に明確に指定されていません。したがって、これらをパリンドロームとして許可すべきかどうかは明確ではありません。

  • ガチョウは神を見ますか?
  • 男、計画、運河-パナマ!

とにかく、あなたはパリンドロームのより明確に指定された科学的意味について言及していると思います。両方の鎖、すなわち5 'から3'に向かう鎖と3 'から5'にあるその相補鎖は相補的でなければなりません(こちらを参照)。

回文配列認識のために行われたいくつかの研究があり、少なくともこれを本当に読むべきだと思います。あなたの問題を解決するには、彼らのアプローチをコピーするだけです!あなたが彼に尋ねると、教授はソースコードを送り出します。

さて、今手元の問題に。文字列として指定されたヌクレオチド配列があるとします。このようなシーケンスでパリンドロームを見つける最良の方法は、標準のアルゴリズムを使用することです。あなたの最善の策はおそらくこのオンラインツールを使用することだと思います:http : //www.alagu-molbio.net/palin.html

タスクを実行する関数を提供する必要があるため、このアプリに文字列を取り込む方法について考える必要がありますか?さて、そこから楽しみが始まります。そのためにセレンを使用できると思います。私はあなたの宿題をやりたくないので、私はあなたに基本的な考えを与えます。Javaでは、次のように世界が始まります。

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();
    }
}

言語回文に興味がある場合は、http://www.jimsabo.com/palindrome.htmlhttp://calculator.tutorvista.com/math/492/palindrome-checkerのような他のWebサービスで同じ手法を使用できます.html

コードトローリングテクニクス

  • http://rosettacode.org/wiki/Palindrome_detectionのような本当に役立つソースを省略します

  • バイオインフォマティクスに関する興味深いが役に立たない

  • これをバイオインフォマティクスのタスクとして意図的に誤解している

  • 不正行為-Webサービスが使用される問題を解決するために


6

Python

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)

文字列「最長の回文」は、docstringからに抽出されlongest_palindromeます。

このreversed()関数は反復子を返すため、reversed(substring) == substringtrueにlongest_palindromeなることはなく、上書きされることもありません。

したがって、関数は文字列内で文字通り「最長の回文構造」を見つけます。


しかし、「最長のパリンドローム」はパリンドロームでもありません...そして、誰かがすでにこれを投稿しています。
ジョーZ.

4
このようなソリューションの問題は、それらがあまりにも明白だということです。初心者プログラマーでさえ、あなたがそれらをリードしていることを知っているでしょう。
ジョーZ.

1
@JoeZ。あまり目立たないバージョンを追加しました。
GRC

1
あまり目立たないバージョンがマークに当たります。ただし、明らかなバージョンを削除した方がいいでしょう。
ジョーZ.

5

Javascript

ああ、それは簡単です;)。ここに行く:

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)'
}

:)


それはこれを打ち負かすのですか?
ジョーZ.

1
@JoeZ。それは実際にあります;)私は24,122の単語数を持っています!
C1D

2
驚くばかり!サー、あなたはヨーデル2インターネットと5メタルフェレットに勝ちます:)
aditsu

4

ルビー-(最適化および猿化!)ブルートフォース

これを行う最良の方法は、よく知られているMonkey Algorithmを使用することです。おそらくBOOSTで見つけることができます。彼らはいつもあなたを話させる方法を持っていました...

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

これは非常に非効率的ですが、すべてを元の名前に変更すると、かなりキュートでルビーのようになります。MaxMonkeys = len; MonkeyTalk =結果、MonkeySpeed = strlen; monkeyA:a; monkeyB:b; getMonkeys:getMaxPalindrome。
これはOPにとって価値がなく、彼が実際にCとインターフェースを取ることを決定するリスクがあり、私たちは皆それがどのように終わるか知っています...


4

Python 2.7

標準機能は非効率的であるため、使用を拒否します。長さを調べる最良の方法は参照するテーブルを持つことだと誰もが知っているので、可能なすべての回文のテーブルを作成し、pythonic bogosortを使用してソートしますが、効率を向上させるために、最初に重複を削除します。その時点で、回文であるすべてのアイテムを計算し、長さで並べ替えます。次に、リストの最後の長さを取得するだけで、リストを反復することでO(n)ルックアップを取得できます。

コード:

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

注意

4文字より長い文字列にはあまり適していません。「abba」は問題ありませんが、abcbaをする前にコーヒーを買ってランチを作りました

問題点:

(あまりにも一貫性のない)非常識変数の命名
滑稽なアルゴリズムの選択(計算与えられた文字列のすべてのサブのすべての可能な順列、彼らしている回文場合、ソートそれらの長さによって、チェックして、最後の値をルックアップ)は、
実際には、問題に対する解決策が含まれています

    TemporaryStringToUseForPalindromesReversed = TemporaryStringToUseForPalindromes[::-1] 

愚かなソートアルゴリズム(bogosort)と、リストを確実にソートするnutjobメソッド。

また、重複チェックにはインデントエラーがあり、実際には何も実行されません。これは時間の無駄です。


4

C

パリンドロームの検出はPNP *の難しい操作であるため、高度に最適化されたコードで実行する必要があります。ソリューションをより迅速に見つけるのに役立つ5つの最適化のコツを以下に示します。

  1. 適切な言語で始めてください。誰もが知っているように、「C」が最速です。
  2. 高速アルゴリズムを使用します。 BoyerMooreは文字列検索の世界記録保持者であるため、これを使用します。また、最初に最長の部分文字列を検索するので、長い一致を見つけることができます。
  3. プロセッサを知ってください。現代のコンピューターは、if this else thatフォームのブランチで恐ろしく遅いです。(キャリアをさらに進めるにつれて、真のコード忍者になりたい場合は、分岐予測をマスターする必要があります。)このコードは、代わりにステートメントifを使用することで分岐の問題を回避しforます。
  4. 「Big-O」に注意してください。このアルゴリズムは、関数本体内で中括弧を使用しないため、ネストされたループを防ぎます。したがって、ランタイムはO(N)でなければなりません。
  5. マイクロ最適化を忘れないでください。ステートメント間の空白をすべて削除するというよく知られた手法を使用することで、コンパイラのワークロードを削減し、さらに10%高速化することができました。

ただし、変数名を無視しないでください。読みやすさが重要です。

* Palindrome-Not Palindrome

#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));
}  

解説の明らかなトローリングに加えて、他にもいくつかの問題があります。検索アルゴリズムはBoyer-Moore-Horspoolの有効な実装ですが、文字列の長さを保存せず、代わりにstrlenをN * M回呼び出すなど、単純な検索よりもはるかに遅くなります。「最も長い文字列を最初に検索する」は正しいですが、その後は長さの順序で検索しないため、実装されている場合、早期終了は間違った答えを返します。しかし、そうではないので、すべてのNを検索します!とにかく可能性。また、ほとんどすべてのパラメーター名(needle / haystack; src / dest)は、標準の意味とは逆になっています。


3

これは私がこれまで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

しかし、私はそれがうまくいくとは思わないし、私はそれをより良くすることができると思う。


2
これは、VB6でコーディングしたことがない人にとっては、トロールするべきではないことを知らないかもしれませんが、最後の場所、非トローリングの答えになっています。
ジョーZ.

3

Javaソリューションは次のとおりです。

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

3
しかし、「最長の回文は」...でも回文ではありません
ジョー・Z.

2

オートホットキー

;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
}

この関数は、stringの回文シーケンスの一部であるため、スペースも返します。したがって、上記は戻ります<space>abcdedcba<space>


1

ポリグロット

これは「文字列で最長の回文を見つける」ことを要求するため、トローリングです。したがって、「文字列」で最長の回文を見つけます。

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

"abcba"を入れても何も返されません...動作しますか?
ジョーZ.

@JoeZ。それはトローリングた理由私が言うことを忘れてしまった
scrblnrd3

5
私はそれを理解していますが、他の多くの人々に話したように、それはあまりにも明白です。この種の言葉遊びは良いトロールにはなりません。
ジョーZ.

1
「文字列」にはいくつかの回文(1文字の長さ)があります。上記のコードは正しくありません。
ベン

2
@Ben「a string」には「-」、「a」、「」、「s」、「t」、「r」、「i」、「n」、「g」の9つの回文があります。この質問は、明らかに(最長の)回文を要求しています。私がそれを見るように、8つの方法のタイがあるので、答えは未定義です。したがって、nullは適切な戻り値です。
エモリー


1

文字列の各文字を反復処理します。次に、その文字の前後の文字を確認します。次に、その文字の2つ前と2つ後の文字。同じではないキャラクターに到達するまで繰り返してください。これにより、単語内の各回文の長さを識別できます。ただし、この方法は長さが奇数の回文に対してのみ機能します。偶数の長さの回文をチェックするには、位置iとi-1、次にi + 1とi-2、次にi + 2とi-3などの文字をチェックします。これが役に立てば幸いです!!


1

明白な答えは、文字列をそれ自身の逆行列と比較し、最長共通シーケンスを計算することです。

次のPerlプログラムはまさにそれを行います。Acme :: DonMartinモジュールをダウンロードする必要がある場合がありますが、通常はデフォルトではインストールされません。

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

モジュールはこちらにあります:metacpan.org/pod/Acme::DonMartin
dland

1

Lua / Python

Luaは非常に高速な言語です(チェックするサブストリングがたくさんあるため必要です!)が、Pythonはストリング処理の方が優れています。では、両方を使用しないのはなぜですか?

ローカル変数を持つのは良いことだと聞いたので、1つ持っています。また、引数が多すぎると式が乱雑になり読みにくくなるため、関数呼び出しを引数から分離しました。

また、これは試してみたい文字列でも機能すると思います。おそらく、奇妙な入力にはまったく問題はないでしょう。

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())

(ところで、あなたはこれが私がそれを機能させるのにどれくらい時間がかかったかを信じないでしょう。)


1

Pythonワンライナー:

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=[]
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]

これはPython 2.xと3.xの両方で機能すると思います。変数kは答えを保持します。

編集:私は言い忘れた、変数pは回文をチェックするための文字列を保持する必要があります。

これは合法的な実装であるため、どの文字列でも機能します。


ところで、これは私の最初のコードゴルフです!やったー!:P
cjfaure 14年

これには実際にコードトローリングタグが付いているため、コードトローリングコンテストです。
ピエールアラード14年

1
@ArlaudPierre Yup、私が投稿した後に気づいた。ため息。xD
cjfaure 14年

つまり、人気コンテストです。大丈夫xDを気にしない
ピエールArlaud 14年

0

Java

明らかにaStringそれ自体が回文である場合aStringは、内部で最も長い回文aStringです。アサーション文で機能していることがわかります。実行可能コードの最初の行について考えすぎないでください。これは単なる標準のJavaボイラープレートです。

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

ゲームメーカーの言語

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;

何が起こっているのか説明したいですか?
ジョーZ.

0

Fortran

文字iachar列は、Fortranでの作業には難しすぎるため、すべてを整数に変換するために使用することを選択しました。

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

正確に機能しません。文字列を考えるとaabbaac、それは最長であると言いますaaが、文字列を与えられacasdabbbaabb、それが最長であると言いますabbba。十分近い。


実際にbbaabbは、2番目のほうが長いです。
ジョーZ.

@JoeZ .:私が言ったように、十分に近い。:D
カイルカノス

0

求められていることを行うだけでは、今日の市場で競争することはできません。このコードは最短の回文も検出し、大文字と小文字を区別しません。

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

ルア

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

他のすべての努力に勝る最も効率的なPython実装:

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

ノート:

これにより、常に「最長パリンドローム」が見つかります

大文字と小文字が区別されます。

いくつかの変更を加えて、他の文字列を見つけることもできます。ただし、クラスを作成し、適切なメソッドを追加してから、見つかった各文字列に対してサブクラス化する必要があります。

この機能は、FORTRAN 77への移植またはIntel 8008マシンコードへのハードコーディングによって改善できます。


0

これが私の最初のコードトローリングの答えです。それは特に残忍なトロールではなく、質問に答えるためのばかげた方法として私を襲っただけです

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());
}

トロールは次のとおりです。

  • 毎回同じパターンを手動で作成する
  • 高価な後方参照を使用して回文を見つける
  • 1からinput.length()に繰り返します(逆に実行すると、最初に一致したものが最も長くなることが保証されます。上記の方法で行うのは愚かなことです)

0

Python 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)))

非常に効率的なプログラム。中央の連続した位置(char上およびその間)にある長い回文を検索し、最長を選択します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.