回文作成プログラミングコンテスト 解答

「え、妻が松江?」松江Ruby会議07協賛 回文作成プログラミングコンテスト
paiza(パイザ)Online(オンライン)Hackathon(ハッカソン)略してPOH(ポー)! 6+
https://paiza.jp/poh/joshibato/matsue-ruby


こっちも解いたので解答晒す。
Python 278 byte
l,k,m=[],[],[]
for i in range(int(raw_input())):
        c=raw_input()
        r=c[::-1]
        if r in l:k+=([c] if c < r else [r]);l.remove(r)
        else:
            l+=[c]
            if r==c:m+=[c]
k.sort();f=''.join(k);print f+(min(m) if len(m)>0 else "")+f[::-1]

Pythonはstring[::-1]で文字列の逆順が取得できるの本当便利


追記

上記のコードに、paizaのテストケースにはないけど、間違ってしまうケースがあることに気付いたので再挑戦。
ついでにコードも244 byteまで減らした。

図1

l,k=[],[]
for i in range(input()):
        c=raw_input();r=c[::-1]
        if r in l:k+=([c] if c< r else [r]);l.remove(r);
        else:l+=[c]
f=''.join(sorted(k));m=[x for x in l if x==x[::-1]];print f+(min(m) if len(m)>0 else "")+f[::-1]


1回目のコードで間違った答えを出力してしまうケースは以下のとき。
3
aa
bb
aa

期待値:aabbaa
1回目のコードの出力:aaaaaa