したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

汎用関数・ライブラリ総合スレ

99あなたの名前を入力してください:2019/11/16(土) 13:02:28 ID:DWT00LII
CC0ライセンスでどぞ
;デモ関数
@HOGE
#DIM HOGE
#DIM RAND_ID, 3
VARSET RAND_ID
RAND_ID = 50, 30, 20
;数値を相対的な確率として、RAND_IDの添字0〜2を返す
HOGE = ARRAY_HIT(RAND_ID, VARSIZE("RAND_ID"))
SELECTCASE HOGE
CASE 0
 PRINTFORML 50%でここ
CASE 1
 PRINTFORML 30%でここ
CASE 2
 PRINTFORML 20%でここ
CASE -1
 PRINTFORML エラー出たらここ
ENDSELECT

VARSET RAND_ID
RAND_ID = 50, 30, 20
;配列に記録した数値を等確率でランダムに返す、表示されるのは50、30、20
HOGE = RAND_CHOICE1(RAND_ID)
PRINTFORMW いべんと{HOGE}

;----------------------------------------------------------------------------------------------------
;連続した数字を抽選し、確率偏らせたい場合用
;----------------------------------------------------------------------------------------------------
@ARRAY_HIT(HIT_LIST, LIST_SIZE)
#FUNCTION
#DIM REF HIT_LIST ;確率分布リスト
#DIM LIST_SIZE;確率分布リストのサイズ
#DIM CHK_ID ;判定対象となる要素
#DIM HIT_RAND ;抽選乱数処理
LOCAL = MAX(SUMARRAY(HIT_LIST, 0, LIST_SIZE),1)
HIT_RAND = RAND(0, LOCAL)
;DEBUGPRINTFORML LIST_SIZE={LIST_SIZE} HIT_RAND{HIT_RAND}
FOR CHK_ID, 0, LIST_SIZE
 SIF HIT_RAND < SUMARRAY(HIT_LIST, 0, CHK_ID + 1)
  RETURNF CHK_ID
NEXT
;THROW 抽選失敗
;カウンター抽選失敗によるTHROW落ちが発生してるのでー1を返すことにする
RETURNF -1

;----------------------------------------------------------------------------------------------------
;均等分布で数字(自由設定)が直接欲しい場合用
;配列の終端判定はVARSIZE利用(配列長いっぱいまで使い切る必要がある)
;----------------------------------------------------------------------------------------------------
@RAND_CHOICE1(LIST)
#FUNCTION
#DIM REF LIST
#DIM DYNAMIC LIST_SIZE
LIST_SIZE = VARSIZE("LIST")
SIF LIST_SIZE <= 0
 RETURNF -1
RETURNF LIST:(RAND:LIST_SIZE)

;----------------------------------------------------------------------------------------------------
;配列の終端判定を-1検索に変更した
;長い配列の途中まででも使うことが出来る(ただしLIST内に-1を指定できない)
;----------------------------------------------------------------------------------------------------
@RAND_CHOICE2(LIST)
#FUNCTION
#DIM REF LIST
#DIM DYNAMIC LIST_SIZE
LIST_SIZE = FINDELEMENT(LIST, -1)
SIF LIST_SIZE <= 0
 RETURNF -1
RETURNF LIST:(RAND:LIST_SIZE)


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板