スレ立てるまでもない質問はここで 166匹目 (122レス)
スレ立てるまでもない質問はここで 166匹目 http://mevius.5ch.net/test/read.cgi/tech/1734043411/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
11: デフォルトの名無しさん [sage] 2024/12/16(月) 15:36:56.21 ID:5AL+G6v+ (重さ,価値)のリストを受け取る関数で以下のようなhaskellコードがあったのですが理解できません 何をやっているんでしょうか sieve :: [(Int, Int)] -> [(Int, Int)] sieve lis = map snd . filter (\((w1, v1), (w2, v2)) -> v1 < v2) $ adj where slis = sort lis adj = zip (scanl (\(w, v) (w', v') -> (w', max v v')) (0, 0) slis) slis 例えばテストケースに以下のリストを渡すとadjの内容はコメントしたように(3,3)という存在しないデータが出てきます 一応上のフィルタで消えるのですが、常にこれは成り立つ? [(1,1),(2,3),(3,2),(4,5)] -- [((0,0),(1,1)),((1,1),(2,3)),((2,3),(3,2)),((3,3),(4,5))] 最終的な結果は [(1,1),(2,3),(4,5)] http://mevius.5ch.net/test/read.cgi/tech/1734043411/11
18: デフォルトの名無しさん [sage] 2024/12/16(月) 23:23:08.71 ID:pEIdxfnL >>11 重さ(w)があるのに価値(v)がないものを取り除いている Rustで書くとこんな感じ 軽い順で入力が入ってくる状況で scanで今まで来た価値(v)の最大値を求めていて filterでその自分より前の最大値より価値(v)が大きいものだけを取り出している fn sieve(sorted_input: impl IntoIterator<Item = (u32, u32)>) -> impl Iterator<Item = (u32, u32)> { sorted_input .into_iter() .scan(0, |v_max, (w, v)| { let pre_v_max = *v_max; *v_max = v.max(pre_v_max); Some((w, v, pre_v_max)) }) .filter_map(|(w, v, pre_v_max)| { (v > pre_v_max) .then_some((w, v)) }) } http://mevius.5ch.net/test/read.cgi/tech/1734043411/18
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.545s*