「ばかね」(*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)アニメネタが流行っているようなので...