INPUT = 'FourscoreandsevenyearsagoourfaathersbroughtforthonthiscontainentanewnationconceivedinzLibertyanddedicatedtothepropositionthatallmenarecreatedequalNowweareengagedinagreahtcivilwartestingwhetherthatnaptionoranynartionsoconceivedandsodedicatedcanlongendureWeareqmetonagreatbattlefiemldoftzhatwarWehavecometodedicpateaportionofthatfieldasafinalrestingplaceforthosewhoheregavetheirlivesthatthatnationmightliveItisaltogetherfangandproperthatweshoulddothisButinalargersensewecannotdedicatewecannotconsecratewecannothallowthisgroundThebravelmenlivinganddeadwhostruggledherehaveconsecrateditfaraboveourpoorponwertoaddordetractTgheworldadswfilllittlenotlenorlongrememberwhatwesayherebutitcanneverforgetwhattheydidhereItisforusthelivingrathertobededicatedheretotheulnfinishedworkwhichtheywhofoughtherehavethusfarsonoblyadvancedItisratherforustobeherededicatedtothegreattdafskremainingbeforeusthatfromthesehonoreddeadwetakeincreaseddevotiontothatcauseforwhichtheygavethelastpfullmeasureofdevotionthatweherehighlyresolvethatthesedeadshallnothavediedinvainthatthisnationunsderGodshallhaveanewbirthoffreedomandthatgovernmentofthepeoplebythepeopleforthepeopleshallnotperishfromtheearth'
chars = INPUT.split('')
max = 0
offset = 0
to_push = []
chars.each_with_index do |c, n|
next if n == 0 or n == chars.length
count = 0
i = 0
loop do
if chars[n + i] == chars[n - i]
count += 1
i += 1
else
break
end
end
if count > max
max = count
offset = n
end
# p "#{c}: #{count} (offset: #{n})"
end
max.times do |i|
to_push << chars[offset + i]
end
to_push.reverse!
# Slightly incorrect output if double center chars, but love it, it works.
# Lunch break is now over and I'll find a fix to that bug later.
to_push = to_push + to_push[0..(to_push.length / 2)].reverse
p to_push.join
SU5QVVQgPSAnRm91cnNjb3JlYW5kc2V2ZW55ZWFyc2Fnb291cmZhYXRoZXJzYnJvdWdodGZvcnRob250aGlzY29udGFpbmVudGFuZXduYXRpb25jb25jZWl2ZWRpbnpMaWJlcnR5YW5kZGVkaWNhdGVkdG90aGVwcm9wb3NpdGlvbnRoYXRhbGxtZW5hcmVjcmVhdGVkZXF1YWxOb3d3ZWFyZWVuZ2FnZWRpbmFncmVhaHRjaXZpbHdhcnRlc3Rpbmd3aGV0aGVydGhhdG5hcHRpb25vcmFueW5hcnRpb25zb2NvbmNlaXZlZGFuZHNvZGVkaWNhdGVkY2FubG9uZ2VuZHVyZVdlYXJlcW1ldG9uYWdyZWF0YmF0dGxlZmllbWxkb2Z0emhhdHdhcldlaGF2ZWNvbWV0b2RlZGljcGF0ZWFwb3J0aW9ub2Z0aGF0ZmllbGRhc2FmaW5hbHJlc3RpbmdwbGFjZWZvcnRob3Nld2hvaGVyZWdhdmV0aGVpcmxpdmVzdGhhdHRoYXRuYXRpb25taWdodGxpdmVJdGlzYWx0b2dldGhlcmZhbmdhbmRwcm9wZXJ0aGF0d2VzaG91bGRkb3RoaXNCdXRpbmFsYXJnZXJzZW5zZXdlY2Fubm90ZGVkaWNhdGV3ZWNhbm5vdGNvbnNlY3JhdGV3ZWNhbm5vdGhhbGxvd3RoaXNncm91bmRUaGVicmF2ZWxtZW5saXZpbmdhbmRkZWFkd2hvc3RydWdnbGVkaGVyZWhhdmVjb25zZWNyYXRlZGl0ZmFyYWJvdmVvdXJwb29ycG9ud2VydG9hZGRvcmRldHJhY3RUZ2hld29ybGRhZHN3ZmlsbGxpdHRsZW5vdGxlbm9ybG9uZ3JlbWVtYmVyd2hhdHdlc2F5aGVyZWJ1dGl0Y2FubmV2ZXJmb3JnZXR3aGF0dGhleWRpZGhlcmVJdGlzZm9ydXN0aGVsaXZpbmdyYXRoZXJ0b2JlZGVkaWNhdGVkaGVyZXRvdGhldWxuZmluaXNoZWR3b3Jrd2hpY2h0aGV5d2hvZm91Z2h0aGVyZWhhdmV0aHVzZmFyc29ub2JseWFkdmFuY2VkSXRpc3JhdGhlcmZvcnVzdG9iZWhlcmVkZWRpY2F0ZWR0b3RoZWdyZWF0dGRhZnNrcmVtYWluaW5nYmVmb3JldXN0aGF0ZnJvbXRoZXNlaG9ub3JlZGRlYWR3ZXRha2VpbmNyZWFzZWRkZXZvdGlvbnRvdGhhdGNhdXNlZm9yd2hpY2h0aGV5Z2F2ZXRoZWxhc3RwZnVsbG1lYXN1cmVvZmRldm90aW9udGhhdHdlaGVyZWhpZ2hseXJlc29sdmV0aGF0dGhlc2VkZWFkc2hhbGxub3RoYXZlZGllZGludmFpbnRoYXR0aGlzbmF0aW9udW5zZGVyR29kc2hhbGxoYXZlYW5ld2JpcnRob2ZmcmVlZG9tYW5kdGhhdGdvdmVybm1lbnRvZnRoZXBlb3BsZWJ5dGhlcGVvcGxlZm9ydGhlcGVvcGxlc2hhbGxub3RwZXJpc2hmcm9tdGhlZWFydGgnCmNoYXJzID0gSU5QVVQuc3BsaXQoJycpCm1heCA9IDAKb2Zmc2V0ID0gMAp0b19wdXNoID0gW10KCmNoYXJzLmVhY2hfd2l0aF9pbmRleCBkbyB8YywgbnwKICAgICAgICBuZXh0IGlmIG4gPT0gMCBvciBuID09IGNoYXJzLmxlbmd0aAogICAgICAgIGNvdW50ID0gMAogICAgICAgIGkgPSAwCiAgICAgICAgbG9vcCBkbwogICAgICAgICAgICAgICAgaWYgY2hhcnNbbiArIGldID09IGNoYXJzW24gLSBpXQogICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgICAgaWYgY291bnQgPiBtYXgKICAgICAgICAgICAgICAgIG1heCA9IGNvdW50CiAgICAgICAgICAgICAgICBvZmZzZXQgPSBuCiAgICAgICAgZW5kCiAgICAgICAgIyBwICIje2N9OiAje2NvdW50fSAob2Zmc2V0OiAje259KSIKZW5kCgptYXgudGltZXMgZG8gfGl8CiAgICAgICAgdG9fcHVzaCA8PCBjaGFyc1tvZmZzZXQgKyBpXQplbmQKCnRvX3B1c2gucmV2ZXJzZSEKIyBTbGlnaHRseSBpbmNvcnJlY3Qgb3V0cHV0IGlmIGRvdWJsZSBjZW50ZXIgY2hhcnMsIGJ1dCBsb3ZlIGl0LCBpdCB3b3Jrcy4KIyBMdW5jaCBicmVhayBpcyBub3cgb3ZlciBhbmQgSSdsbCBmaW5kIGEgZml4IHRvIHRoYXQgYnVnIGxhdGVyLgp0b19wdXNoID0gdG9fcHVzaCArIHRvX3B1c2hbMC4uKHRvX3B1c2gubGVuZ3RoIC8gMildLnJldmVyc2UKcCB0b19wdXNoLmpvaW4=