Created
January 9, 2012 08:42
-
-
Save andreapavoni/1581987 to your computer and use it in GitHub Desktop.
therubygame palindrome solution
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def find_longest_palindrome(string) | |
| (string.size/2).downto(1) do |n| | |
| if m = string.match(Regexp.new("#{'(.)' * (n+1)}?\\#{n.downto(1).to_a.join('\\')}")) | |
| return m | |
| end | |
| end | |
| end |
Author
Argh! thank you for the explanation. For ruby 1.9.x looks like it's a sort of bug (even if I know it's almost weird to use very long regex). I know it's not as fast as other ways, but it was fun to test alternatives ;)
cheers!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Wow, I didn't realise Ruby supported backrefs > 9. Anyway, it looks like your code might be failing on longer strings. I was able to get it to fail with runtime errors for two different reasons depending on the version of Ruby used:
Code to exercise the failure:
Ruby 1.9.{2,3}
... 398: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 399: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ./test.rb:5:in `initialize': invalid multibyte escape: /(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)?\200\199\198\197\196\195\194\193\192\191\190\189\188\187\186\185\184\183\182\181\180\179\178\177\176\175\174\173\172\171\170\169\168\167\166\165\164\163\162\161\160\159\158\157\156\155\154\153\152\151\150\149\148\147\146\145\144\143\142\141\140\139\138\137\136\135\134\133\132\131\130\129\128\127\126\125\124\123\122\121\120\119\118\117\116\115\114\113\112\111\110\109\108\107\106\105\104\103\102\101\100\99\98\97\96\95\94\93\92\91\90\89\88\87\86\85\84\83\82\81\80\79\78\77\76\75\74\73\72\71\70\69\68\67\66\65\64\63\62\61\60\59\58\57\56\55\54\53\52\51\50\49\48\47\46\45\44\43\42\41\40\39\38\37\36\35\34\33\32\31\30\29\28\27\26\25\24\23\22\21\20\19\18\17\16\15\14\13\12\11\10\9\8\7\6\5\4\3\2\1/ (RegexpError) from ./test.rb:5:in `new' from ./test.rb:5:in `block in find_longest_palindrome' from ./test.rb:4:in `downto' from ./test.rb:4:in `find_longest_palindrome' from ./test.rb:13:in `block in <main>' from ./test.rb:11:in `each' from ./test.rb:11:in `<main>'Ruby 1.8.7
... 504: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 505: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ./test.rb:5:in `initialize': regular expression too big: /(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)?\253\252\251\250\249\248\247\246\245\244\243\242\241\240\239\238\237\236\235\234\233\232\231\230\229\228\227\226\225\224\223\222\221\220\219\218\217\216\215\214\213\212\211\210\209\208\207\206\205\204\203\202\201\200\199\198\197\196\195\194\193\192\191\190\189\188\187\186\185\184\183\182\181\180\179\178\177\176\175\174\173\172\171\170\169\168\167\166\165\164\163\162\161\160\159\158\157\156\155\154\153\152\151\150\149\148\147\146\145\144\143\142\141\140\139\138\137\136\135\134\133\132\131\130\129\128\127\126\125\124\123\122\121\120\119\118\117\116\115\114\113\112\111\110\109\108\107\106\105\104\103\102\101\100\99\98\97\96\95\94\93\92\91\90\89\88\87\86\85\84\83\82\81\80\79\78\77\76\75\74\73\72\71\70\69\68\67\66\65\64\63\62\61\60\59\58\57\56\55\54\53\52\51\50\49\48\47\46\45\44\43\42\41\40\39\38\37\36\35\34\33\32\31\30\29\28\27\26\25\24\23\22\21\20\19\18\17\16\15\14\13\12\11\10\9\8\7\6\5\4\3\2\1/ (RegexpError) from ./test.rb:5:in `new' from ./test.rb:5:in `find_longest_palindrome' from ./test.rb:4:in `downto' from ./test.rb:4:in `find_longest_palindrome' from ./test.rb:13 from ./test.rb:11:in `each' from ./test.rb:11