labunix's blog

labunixのラボUnix

{a,b,c,d}の部分集合を全て求めてみるワンライナー。

■「もっと簡単な方法」は見なかったことにして、別解を。

 シェル芸で部分集合を全通り求める方法(別解求む)
 http://blog.ueda.asia/?p=56114桁のすべてを4桁のフラグに読み替えて、2進数にするだけ。

$ for n in `seq 0 15`;do \
    echo "ibase=10;obase=2 ;$n" | bc | \
      awk '{printf "%04d\n",$1}' | sed s/./"& "/g | \
      awk '{if($1>0) printf "a"}; \
           {if($2>0) printf "b"}; \
           {if($3>0) printf "c"}; \
           {if($4>0) printf "d"}'; \
      echo; \
    done | sed s/"^"/"{"/g | sed s/"\$"/"&}"/g | sed s/"[a-z]"/",&"/g
    {}
    {,d}
    {,c}
    {,c,d}
    {,b}
    {,b,d}
    {,b,c}
    {,b,c,d}
    {,a}
    {,a,d}
    {,a,c}
    {,a,c,d}
    {,a,b}
    {,a,b,d}
    {,a,b,c}
    {,a,b,c,d}