作者: Yさ
日時: 2002/5/6(18:55)
「ばかね」(*1)
Yさと申します。
awk版を作ってみました。

--^ dice.awk
# 0を入力するまで個数を数えながら dice[] に数値を保持
{ if($1!=0) dice[++cnt]=$1+0; else exit; }
END{
  for(i=1; i<(2^cnt); ++i){  # 入力個数分の桁の2進数で考えて...
    # カウンタi を2進数化(bit[] に1,0変換してセット)
    num=i; l=0;
    do{ bit[++l]=num%2; }while((num=int(num/2))>0);
    while(l<cnt) bit[++l]=0;
    # bit[] が1である dice[] のみ加算、表示
    sum=0;
    for(l=cnt; l>=1; --l){
      if(bit[l]) sum+=dice[l];
      printf("%s", (bit[l])?("+" dice[l]):("  "));
    }
    printf(" = %d\n", sum);
} }
--$


dune writes:

> が、二つ目は文字列と数値をごちゃ混ぜにしてビットパター
> ンを使うところがおもしろいと思います。

...やはりビットを利用する方法しか思いつかなかったです(^^;)

■実行例
 >gawk -f dice.awk[ENTER]
 ^^^^^^^^^^^^^^^^^^^^^^^^^
-----
1
2
4
8
0
      +1 = 1
    +2   = 2
    +2+1 = 3
  +4     = 4
  +4  +1 = 5
  +4+2   = 6
  +4+2+1 = 7
+8       = 8
+8    +1 = 9
+8  +2   = 10
+8  +2+1 = 11
+8+4     = 12
+8+4  +1 = 13
+8+4+2   = 14
+8+4+2+1 = 15
-----


P.S. (*1)アニメネタが流行っているようなので...