summer_tree_home

Check iOでPython3をマスターするぜっ

Palindromic Palindrome (Mine) - 世の中ね顔かお金かなのよ

どんな問題?

Palindromic Palindrome
http://www.checkio.org/mission/palindromic-palindrome/

文字列が回文(前から読んでも、後ろから読んでも同じ)かどうかを判定するプログラムを回文で書け。ただし、コード中に # は使ってはならない。

何を言ってるのか、わからねーと思うが、、、

プログラムコードを回文で書けという、むちゃくちゃな問題。

checkio=lambda x: x#x :x adbmal=oikcehc

のように、反転させても同じ内容になるコードを書かなくてはならない。
ただし、今回の問題では # の使用は禁止されている。



(今さらだけど、以下ネタバレありのため、まだ解いていない人は閲覧注意!)


どうやって解く?

checkio=lambda と書くと、コードの末尾は adbmal=oikcehc となってしまう。これを意味のあるコードとして成立させるのは不可能だろう。
となると、やはり後半部分をコメントアウトさせて無効化させるしかないだろう。
# は禁止されているが、Pythonのコメントは # だけではなく、 """~""" があるので、こっちをうまく使えばいいはずだ。

前半部分(コード)
"""
後半部分(コメント)
"""

となるように作っていけばいい。もちろん、最後の """ に対応する """ を最初に付けなくてはならないが、これは \" でエスケープさせれば、なんとかできそうだ。

あれこれ試行錯誤して、思いついたのがこれ。

""" """\

前半部分

"""

後半部分

\""" """

"""\は行の継続、\"""はエスケープによりコメントの終了ではなくなる。これで、前半はコード、後半はコメント、が実現できた。

あとは、前半に回文判定コードを、後半には前半を反転したものを書けばいい。あえて、lambda式を使わずにdefで書いてみた。

まとめ

""" """\
 
def checkio(s):
 return s == s[::-1]
 
"""
 
]1-::[s == s nruter 
:)s(oikcehc fed
 
\""" """

http://www.checkio.org/mission/palindromic-palindrome/publications/natsuki/python-3/first/

他の人の答え

''' '
s == ]1-::[s :s adbmal = oikcehc
'''
checkio = lambda s: s[::-1] == s
' '''

http://www.checkio.org/mission/palindromic-palindrome/publications/Juge_Ti/python-3/first/

前半をコメント、後半をコードにすることで、よりシンプルにしている。

" \""; checkio = lambda s: s == s[::-1]; " ;]1-::[s == s :s adbmal = oikcehc ;""\ "

http://www.checkio.org/mission/palindromic-palindrome/publications/madmanbob/python-3/first/

コメントではなく文字列を使うパターン。Pythonで ; を見るとなんか違和感。