[過去ログ] プログラミングのお題スレ Part20 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
983(7): 2022/11/12(土)01:53 ID:Y/i2pfZ3(1) AAS
お題
配列データと、同じ長さの確率の配列(合計値1)が与えられた時に、対応する確率で配列からデータを出力せよ
例
aa,bb,cc
0.4,0.5,0.1
→aa 40%, bb 50%, cc 10%で出力
984: 2022/11/12(土)08:50 ID:yCEPOpQl(1) AAS
>>983 Ruby
a = %w[aa bb cc]
p = [0.4, 0.5, 0.1]
f = -> (a, p) { r = rand; a[(0..a.size-2).find{ r < p[0.._1].sum } || a.size - 1] }
10.times{ print f[a, p] }
# => aabbccbbaaaaaabbbbbb
985: 2022/11/12(土)10:10 ID:g2vYgSbJ(1) AAS
>>983
Haskell
外部リンク:ideone.com
import System.Random
import Data.List
randomDbls :: StdGen -> [ Double ]
randomDbls= randomRs (0,1)
chooseItem is ws r = let
folder a b = a : map ( + a ) b
selecter r ( i, ( f, t ) ) = f <= r && r < t
省7
986: 2022/11/12(土)10:19 ID:uOtU06vW(1) AAS
>>983 octave
外部リンク:ideone.com
f = @(a, r) a(rand < cumsum(r))(1);
987: 2022/11/12(土)14:34 ID:Q9bJaddO(1) AAS
>>983 ocaml
外部リンク:ideone.com
let (<<) f g x = f (g x)
let cumsum =
List.rev << fst << List.fold_left (fun (a, s) f -> s +. f :: a, s +. f) ([], 0.)
let f xs =
let r = Random.float 1. in
fst << List.find ((<) r << snd) << List.combine xs << cumsum
988: 2022/11/12(土)16:47 ID:We3Ba5Li(1) AAS
>>983
コレでよかった
Haskell
外部リンク:ideone.com
import System.Random
randomDbls :: StdGen -> [ Double ]
randomDbls= randomRs (0,1)
chooseItem (i:is) (w:ws) r | r < w = i
chooseItem (i:is) (w:ws) r = chooseItem is ws ( r - w )
main = do
省2
989: 2022/11/12(土)17:19 ID:MirHjvCf(1/2) AAS
>>983
別名法とかいうアルゴリズム
外部リンク:ideone.com
991: 2022/11/13(日)18:45 ID:zjrUNZaB(1) AAS
>>983
Kotlin
外部リンク:paiza.io
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.295s*