22/11/12 01:53:40.01 Y/i2pfZ3.net
お題
配列データと、同じ長さの確率の配列(合計値1)が与えられた時に、対応する確率で配列からデータを出力せよ
例
aa,bb,cc
0.4,0.5,0.1
→aa 40%, bb 50%, cc 10%で出力
1029:デフォルトの名無しさん
22/11/12 08:50:36.22 yCEPOpQl.net
>>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
1030:デフォルトの名無しさん
22/11/12 10:10:20.03 g2vYgSbJ.net
>>983
Haskell
URLリンク(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
ts = foldr folder [ ] ws
fs = 0 : ts
ifts = zip is $ zip fs ts
in fst $ head $ filter ( selecter r ) ifts
main = do
rds <- ( return . randomDbls ) =<< getStdGen
print $ map (chooseItem ['A'..'C' ] [0.4,0.5,0.1] ) $ take 100 rds
1031:デフォルトの名無しさん
22/11/12 10:19:35.32 uOtU06vW.net
>>983 octave
URLリンク(ideone.com)
f = @(a, r) a(rand < cumsum(r))(1);
1032:デフォルトの名無しさん
22/11/12 14:34:06.57 Q9bJaddO.net
>>983 ocaml
URLリンク(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
1033:デフォルトの名無しさん
22/11/12 16:47:04.36 We3Ba5Li.net
>>983
コレでよかった
Haskell
URLリンク(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
rds <- ( return . randomDbls ) =<< getStdGen
print $ map (chooseItem ['A'..'C' ] [0.4,0.5,0.1] ) $ take 100 rds
1034:デフォルトの名無しさん
22/11/12 17:19:40.29 MirHjvCf.net
>>983
別名法とかいうアルゴリズム
URLリンク(ideone.com)
1035:デフォルトの名無しさん
22/11/12 19:13:20.80 MirHjvCf.net
URLリンク(ideone.com)
元からあったコードをちょっといじったんだけど変換ミスがあった
1036:デフォルトの名無しさん
22/11/13 18:45:40.25 zjrUNZaB.net
>>983
Kotlin
URLリンク(paiza.io)
1037:デフォルトの名無しさん
22/11/13 19:01:26.14 ZCYlhUwL.net
次スレ
�
1038:vログラミングのお題スレ Part21 https://mevius.5ch.net/test/read.cgi/tech/1668333636/
1039:デフォルトの名無しさん
22/11/15 08:06:01.58 XL64sJsG.net
うめ
1040:デフォルトの名無しさん
22/11/15 09:22:13.74 x0rg5fHd.net
お題:1辺がn文字の正四角形を表示せよ
1 <= n <= 8 とする
1041:デフォルトの名無しさん
22/11/15 10:16:55.01 V1sKjJZc.net
haskell
URLリンク(ideone.com)
sqStr n = ""
++ "\x250f" ++ r "\x2501" ++ "\x2513" ++ "\n"
++ r ( "\x2503" ++ r "\x2001" ++ "\x2503" ++ " \n" )
++ "\x2517" ++ r "\x2501" ++ "\x251b" ++ "\n"
where r = concat . replicate ( n-2 )
main = putStr $ sqStr 10
1042:デフォルトの名無しさん
22/11/15 20:16:12.10 r20LvnA2.net
>>994 octave
URLリンク(ideone.com)
function s = f(n)
s = repmat('#', n);
s(2:end-1, 2:end-1) = ' ';
end
1043:デフォルトの名無しさん
22/11/17 21:39:57.15 BbSHYj/y.net
うめ
1044:デフォルトの名無しさん
22/11/17 21:40:03.49 BbSHYj/y.net
うめ
1045:デフォルトの名無しさん
22/11/17 21:40:08.22 BbSHYj/y.net
うめ
1046:デフォルトの名無しさん
22/11/17 23:04:00.66 W9+RkUIs.net
竹
1047:1001
Over 1000 Thread Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 516日 23時間 1分 3秒
1048:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています