Ansatzの備忘録

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

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

問題85 文字のバイナリの平均をとる

自分の環境だと絵文字が文字化けして表示されないのでこの問題の扱いにはずいぶん困った。

解答例は

$ echo 🍑 🍓 | xargs -n1 | perl -nlE 'say unpack("H*",$_)' | xargs | awk '{print "obase=16;ibase=16;"toupper("("$1"+"$2")/2")}' | bc | perl -nlE 'say pack("H*",$_)'

となる。まず絵文字を1行ずつにわけて出力して、それから perl で16進数のUTF-8に変換している。そのあとまたまとめて1行に出力しなおして awk で処理しやすいようにしている。 awk では bc で処理する前準備としてダブルクォートによるエスケープを用いながら入出力に16進数を指定して16進数の足し算の式を作成している。bcで計算した後はまた perl で16進数を絵文字に戻している。