Ansatzの備忘録

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

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

問題101 連続するアルファベットの検出と略記

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

いくつかアルファベットが書いてあるファイルの中身を整理して連続するアルファベットを両端を残してハイフンでつないで出力する問題だった。アルファベットをソートするところまではできたがハイフンでつなぐのがどうやればいいのかさっぱりわからなかった。

解答例は

$ cat alphabet_connection | tr ' ' '\n' | sort | comm - <(echo {a..z} | tr ' ' '\n') | sed 's/^..//' | sed -Ez 's/([a-z])(\n[a-z])*\n([a-z])/\1-\3/g' | xargs

となる。肝は、元のファイルとアルファベットすべての並びをcommで比較するところにあった。これによりアルファベットの途切れているところに空行が入る。あとはsedで行またぎの置換を行い答えを出す。