
ふと、コンソール上でワンライナーで文字列の回文判定を行うにはどうすればよいのだろう?と思ったので調べてみた。
以下のようにすることで、回文判定を行うことができる。
perlの場合、アルファベットならもっと短くできるのだけど、日本語も対応させるとちょっと長くなってしまった。
bash
echo "あいうえお" | awk '{ split($1,a,""); for(i=1;i<=length($1)/2;i++) if (a[length($1)-i+1]==a[i]) f=0; else {f=1}; print f}' # 返り値が0なら回文、1なら回文ではない
echo "あいうえお" | perl -lne 'use Encode decode;$str=decode("UTF-8", $_);print 0 if $str eq reverse($str)' # 返り値が0なら回文
shell
[root@BS-PUB-CENT7-01 ~]# echo "あいうえお" | awk '{ split($1,a,""); for(i=1;i<=length($1)/2;i++) if (a[length($1)-i+1]==a[i]) f=0; else {f=1}; print f}' # 返り値が0なら回文、1なら回文ではない
1
[root@BS-PUB-CENT7-01 ~]# echo "あいうえおえういあ" | awk '{ split($1,a,""); for(i=1;i<=length($1)/2;i++) if (a
[length($1)-i+1]==a[i]) f=0; else {f=1}; print f}' # 返り値が0なら回文、1なら回文ではない
0
[root@BS-PUB-CENT7-01 ~]# echo "あいうえお" | perl -lne 'use Encode decode;$str=decode("UTF-8", $_);print 0 if $str eq reverse($str)' # 返り値が0なら回文
[root@BS-PUB-CENT7-01 ~]# echo "あいうえおえういあ" | perl -lne 'use Encode decode;$str=decode("UTF-8", $_);print 0 if $str eq reverse($str)' # 返り値が0なら回文
0