ユーザー入力nからn個のネストされたループを作成するには?

ユーザー入力nからn個のネストされたループを作成するには?

私が直面している問題は、n個のサイコロから特定の合計を得るためにどれだけの可能性があるかを確認したいということです。次のようにする必要があります。

n=numberOfDice
x=sum out of the rolled dice
counter=number of possibilities to get x out of n dice

わかりました。これは答えを得る最も効率的な方法ではありませんが、ユーザー入力でn個のネストされたループを作成したいと思います。

よろしくお願いします!

ベストアンサー1

read -p 'dices=' ndices
read -p 'sum=' sum_cut
read -p 'repeat n=' rep

dices_sum ()
{
  dlist=''; sum=0
  local i
  for ((i=1; i<=$1; i++))
  do
    d=$(($RANDOM % 6 + 1))
    ((sum+=$d)); dlist+=$d
  done
}

count=0
for ((i=1; i<=$rep; i++))
do
  dices_sum $ndices
  echo "$sum ($dlist)"
  (($sum >= $sum_cut)) && ((count++))
done
echo "c/rep $count/$rep"

外側ループは反復用であり、内側ループは各ダイ用です。関数を入れる必要があります。local iそれ以外の場合、変数名が競合します。

呼ぶ:

]# . dices.sh 
dices=3
sum=12
repeat n=10
7 (322)
8 (152)
8 (341)
11 (614)
14 (644)
17 (656)
5 (212)
15 (564)
8 (215)
10 (613)
c/rep 3/10

この関数は、dices_sum()位置パラメータを使用して独自に呼び出すことができます。

]# dices_sum 6
]# echo $dlist 
356123

おすすめ記事