[過去ログ]
Rust part15 (1002レス)
Rust part15 http://mevius.5ch.net/test/read.cgi/tech/1652347700/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
202: デフォルトの名無しさん [sage] 2022/05/20(金) 19:05:29.84 ID:eTvpznuT 複オジは断念したみたいだから 俺の考える汚くないコードを参考までに貼っとく https://play.rust-lang.org/?edition=2021&gist=cb739f9fa655a73ced7e87e681237d9f http://mevius.5ch.net/test/read.cgi/tech/1652347700/202
206: デフォルトの名無しさん [sage] 2022/05/20(金) 21:13:38.21 ID:zMcvGPNW >>202 successorsバージョンはシンプルでいいね http://mevius.5ch.net/test/read.cgi/tech/1652347700/206
295: デフォルトの名無しさん [sage] 2022/05/23(月) 19:27:40.26 ID:qJLEBqNZ >>189 おまえら全員そうだがフィボナッチ数列でusize固定はおかしいだろ コード自体は問題ないが <T: Zero + One + CheckedAdd> を付けろ あとは0と1をT::zero()とT::one()へ置き換えればi8型からBigUintまで何でも動作するようになる https://play.rust-lang.org/?edition=2021&gist=929f3df48db39182558dfad6fe8d1cda さらに今回はfrom_fn()利用をそのままsuccessors()利用へ変換できるので見やすくなる fn fibonacci_iter<T: Zero + One + CheckedAdd>() -> impl Iterator<Item = T> { let mut oq = Some(T::one()); iter::successors(Some(T::zero()), move |p| { let q = oq.take()?; oq = q.checked_add(p); Some(q) }) } ちなみにCloneを要求しないためBigIntなどでも無駄なコスト増とならない >>202 そのコードは暗黙のコピーが発生している from_fn()使用版のコードはcurrがキャプチャ変数なので「let n = curr?;」でコピー発生 successors()使用版のコードはクロージャ引数「|&curr: &usize|」の「&」でコピー発生 usizeならば問題はないがBigIntなどでそのコードは動かないので劣る http://mevius.5ch.net/test/read.cgi/tech/1652347700/295
303: デフォルトの名無しさん [sage] 2022/05/23(月) 20:49:26.67 ID:iRCkPDCQ >>296 それはmoveの意味を間違えているぞ >>202のcurr?はコピーが発生する FnOnceじゃないんだからcurrの値がmoveされたら次に使えなくなる move禁止となりCopy型ならコピーが発生し!Copy型ならエラーとなるコード http://mevius.5ch.net/test/read.cgi/tech/1652347700/303
323: デフォルトの名無しさん [sage] 2022/05/24(火) 19:12:35.28 ID:VR6742Ui >>202のlet n = curr?;の部分を >>189はlet n = curr.take()?;としてコピーになるのを回避しているだけかと思ったら 両者が全く異なるアルゴリズムを採用していることに気付いた >>202のアルゴリズムだとどうやってもコピーを避けられないから詰んでるね http://mevius.5ch.net/test/read.cgi/tech/1652347700/323
325: デフォルトの名無しさん [sage] 2022/05/24(火) 22:24:27.19 ID:LZzc/1GO アルゴリズムというほど大げさな話ではないだろ f(n)を求めるnext()が呼ばれた時に >>189は内部にf(n)とf(n+1)を持っていて、足し算してf(n+2)を作る そして内部にf(n+1)とf(n+2)を残して、f(n)を返す >>202は内部にf(n-1)とf(n)を持っていて、足し算してf(n+1)を作る そして内部にf(n)とf(n+1)を残して、f(n-1)は捨てて、f(n)をコピーして返す つまりムダ >>324 同意 http://mevius.5ch.net/test/read.cgi/tech/1652347700/325
453: デフォルトの名無しさん [sage] 2022/06/04(土) 16:30:17.39 ID:43LVHAPc 汚コードを連呼してる人が初めて出したコードがこれ。>>202 しかしアルゴリズムに問題があってフルボッコにされて撃沈。 汚コードを連呼の人が普段コードを示せない理由が判明してしまった事件。 http://mevius.5ch.net/test/read.cgi/tech/1652347700/453
457: デフォルトの名無しさん [] 2022/06/04(土) 23:38:03.39 ID:UrkwxQuP >>456 一般的にはその通り しかし今回はusizeだとすぐ溢れるからBigUintなどを見越してのコードの話 >>202への批評内容はいずれもusizeでしか通用しないアルゴリズムをわざわざ採用したという点 一方で>>202が汚コードとみなした元のコードはusizeでもBigUintでもちゃんと動作するアルゴリズムになっていた http://mevius.5ch.net/test/read.cgi/tech/1652347700/457
469: デフォルトの名無しさん [sage] 2022/06/05(日) 17:36:49.26 ID:kdHlti+w 可読性や汎用性を犠牲にしてもfindがpositionより優位に速いとか ユースケース次第ではデメリットを補うだけのメリットがあるなら多少汚くても受け入れられる フィボナッチの>>202と比較対象の>>181や>>189も同様 http://mevius.5ch.net/test/read.cgi/tech/1652347700/469
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.038s