(20)
引数: コロン区切りの発生比率
戻り値: 該当インデックス番号(1始まり)
function func1
{
param1=$1
ar1=()
ret=0
# 要素数をカウント
item_cnt=$(echo "${param1}" |awk -F':' '{print NF}')
# 要素数だけ繰り返し、発生確率を配列に格納
prob_sum=0
for i in $(seq 1 ${item_cnt});do
item=$(echo "${param1}" |awk -v i=${i} -F':' '{print $i}')
ar1=("${ar1[@]}" ${item} )
prob_sum=$(( ${prob_sum}+${item} ))
done
# 0~100の乱数を生成し、該当するインデックス番号を求める
ransu=$(awk 'BEGIN{ srand('"$RANDOM"'); print int(rand() * 100) }')
bunsi_from=0
bunsi_to=0
for e in ${!ar1[@]}; do
bunsi_to=$(( ${bunsi_to}+${ar1[$e]} ))
if [ $((${bunsi_from}*100)) -le $((${ransu}*${prob_sum})) ] && [ $((${ransu}*${prob_sum})) -lt $((${bunsi_to}*100)) ]; then
ret=$(( $e+1 ))
break
fi
bunsi_from=${bunsi_to}
done
echo $ret
}
# 動作確認
ファンクションを1000回実行し、指定した発生確率となっていることを確認
i1=0
i2=0
i3=0
i4=0
i5=0
for i in $(seq 1 1000); do
ret=$(func1 "1:2:3:4:5")
case "${ret}" in
"1") i1=$((${i1}+1)) ;;
"2") i2=$((${i2}+1)) ;;
"3") i3=$((${i3}+1)) ;;
"4") i4=$((${i4}+1)) ;;
"5") i5=$((${i5}+1)) ;;
esac
done
echo ${i1}
echo ${i2}
echo ${i3}
echo ${i4}
echo ${i5}
(10)
引数: コロン区切りの発生比率
戻り値: 該当インデックス番号(1始まり)
function func1
{
param1=$1
ar1=()
ret=0
# 要素数をカウント
item_cnt=$(echo "${param1}" |awk -F':' '{print NF}')
# 要素数だけ繰り返し、発生確率を配列に格納
prob_sum=0
for i in $(seq 1 ${item_cnt});do
item=$(echo "${param1}" |awk -v i=${i} -F':' '{print $i}')
ar1=("${ar1[@]}" ${item} )
prob_sum=$(( ${prob_sum}+${item} ))
done
# 0~100の乱数を生成し、該当するインデックス番号を求める
ransu=$(awk 'BEGIN{ srand('"$RANDOM"'); print int(rand() * 100) }')
bunsi_from=0
bunsi_to=0
for e in ${!ar1[@]}; do
bunsi_to=$(( ${bunsi_to}+${ar1[$e]} ))
if [ $((${bunsi_from}*100)) -le $((${ransu}*${prob_sum})) ] && [ $((${ransu}*${prob_sum})) -lt $((${bunsi_to}*100)) ]; then
ret=$(( $e+1 ))
break
fi
bunsi_from=${bunsi_to}
done
echo $ret
}
# 動作確認
ファンクションを1000回実行し、指定した発生確率となっていることを確認
i1=0
i2=0
i3=0
i4=0
i5=0
for i in $(seq 1 1000); do
ret=$(func1 "1:2:3:4:5")
case "${ret}" in
"1") i1=$((${i1}+1)) ;;
"2") i2=$((${i2}+1)) ;;
"3") i3=$((${i3}+1)) ;;
"4") i4=$((${i4}+1)) ;;
"5") i5=$((${i5}+1)) ;;
esac
done
echo ${i1}
echo ${i2}
echo ${i3}
echo ${i4}
echo ${i5}
(8)
引数: コロン区切りの発生比率
戻り値: 該当インデックス番号(1始まり)
function func1
{
param1=$1
ar1=()
ret=0
# 要素数をカウント
item_cnt=$(echo "${param1}" |awk -F':' '{print NF}')
# 要素数だけ繰り返し、発生確率を配列に格納
prob_sum=0
for i in $(seq 1 ${item_cnt});do
item=$(echo "${param1}" |awk -v i=${i} -F':' '{print $i}')
ar1=("${ar1[@]}" ${item} )
prob_sum=$(( ${prob_sum}+${item} ))
done
# 0~100の乱数を生成し、該当するインデックス番号を求める
ransu=$(awk 'BEGIN{ srand('"$RANDOM"'); print int(rand() * 100) }')
bunsi_from=0
bunsi_to=0
for e in ${!ar1[@]}; do
bunsi_to=$(( ${bunsi_to}+${ar1[$e]} ))
if [ $((${bunsi_from}*100)) -le $((${ransu}*${prob_sum})) ] && [ $((${ransu}*${prob_sum})) -lt $((${bunsi_to}*100)) ]; then
ret=$(( $e+1 ))
break
fi
bunsi_from=${bunsi_to}
done
echo $ret
}
# 動作確認
ファンクションを1000回実行し、指定した発生確率となっていることを確認
i1=0
i2=0
i3=0
i4=0
i5=0
for i in $(seq 1 1000); do
ret=$(func1 "1:2:3:4:5")
case "${ret}" in
"1") i1=$((${i1}+1)) ;;
"2") i2=$((${i2}+1)) ;;
"3") i3=$((${i3}+1)) ;;
"4") i4=$((${i4}+1)) ;;
"5") i5=$((${i5}+1)) ;;
esac
done
echo ${i1}
echo ${i2}
echo ${i3}
echo ${i4}
echo ${i5}
- Windows Server
(2019)
引数: コロン区切りの発生比率
戻り値: 該当インデックス番号(1始まり)
function func1 ($param1){
$ar1 = @()
$ret = 0
# 要素数をカウント
$item_cnt = $param1.length - $param1.replace(":","").length +1
# 発生確率を配列に格納
$ar1 =$param1.split(":")
$prob_sum = 0
foreach($e in $ar1){
$prob_sum = $prob_sum + $e
}
# 0~100の乱数を生成し、該当するインデックス番号を求める
$ransu = Get-Random -Maximum 100
$bunsi_from = 0
$bunsi_to = 0
for ( $e = 0; $e -lt $ar1.count; $e++){
$bunsi_to = $bunsi_to + $ar1[$e]
if ( ($bunsi_from * 100 -le $ransu * $prob_sum) -and ($ransu * $prob_sum -lt $bunsi_to * 100) ) {
$ret = $e+1
break
}
$bunsi_from = $bunsi_to
}
return $ret
}
# 動作確認
ファンクションを1000回実行し、指定した発生確率となっていることを確認
$i1 = 0
$i2 = 0
$i3 = 0
$i4 = 0
$i5 = 0
for ( $i = 0; $i -le 1000; $i++){
$ret = func1 "1:2:3:4:5"
switch($ret){
"1" {$i1 = $i1 + 1}
"2" {$i2 = $i2 + 1}
"3" {$i3 = $i3 + 1}
"4" {$i4 = $i4 + 1}
"5" {$i5 = $i5 + 1}
}
}
Write-Host $i1
Write-Host $i2
Write-Host $i3
Write-Host $i4
Write-Host $i5