Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題142

問題142 ビットスクワッティング

perlを使う段になると途端にダメになる。なかなか新しいことが頭に入ってこない感じがする。まだ若いのに...

解答例は

printf 'blog.ueda' | xxd -b -c1 | awk '{printf $2}' | perl -ne 'print "$_\n" x length($_)' | awk -F '' -v OFS='' '{$NR=!$NR;print}' | perl -nle 'print pack("B*", $_)' | grep '^[a-z\.]*$' | xargs

となる。まずxxdで2進数に変換する。-bオプションで2進数にしている。そのあと文字列の2進数表現を改行なしで出力し、perlで2進数の長さ分だけ行を複製する。そしてawkでビットを1つずつ反転させて、perlでまた2進数から文字に戻してgrepで文字でないものを振るい落として解答となる。xxdで戻せないのかと思ったが戻すオプションである-rは16進数でないと使えなかった。