プログラミングのお題スレ Part20at TECH
プログラミングのお題スレ Part20 - 暇つぶし2ch1028:デフォルトの名無しさん
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:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch