Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関数型プログラミングで 「脳がバグる」を乗り越える

関数型プログラミングで 「脳がバグる」を乗り越える

競技プログラミングの凡ミスを減らしてもっとロジックの部分を楽しむために、関数型アプローチを取り入れてみる試みです。

スライド中で取り上げたスライド:
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング(https://speakerdeck.com/naoya/guan-shu-xing-yan-yu-dejing-ji-puroguramingu)

Avatar for manabeai

manabeai

July 09, 2025
Tweet

More Decks by manabeai

Other Decks in Technology

Transcript

  1. 競プロは意識することがいっぱい! • 計算量に気をつける • 妥当性に気をつける • コーナーケースに気をつける • 変数の中身の変化に気をつける •

    for文を範囲外アクセスしないようにする • オーバーフローしないようにする • アルゴリズムの手順を守る(グラフ探索で探索済みチェックつけるとか) • 変数のダブりに気をつける • タイポに気をつける • etc… 結果 => なんかしら忘れる
  2. 関数型の書ける言語 • Haskell ◦ 関数型といったらこれ!(?) ◦ 永続データ構造が強い ◦ 実行速度はちょっと不安 •

    Scala ◦ Javaと同じJVMで動く言語 ◦ 手続き方も取り入れられていい感じ ◦ 実行速度はかなり不安 • Rust ◦ C++っぽくも書けるけど関数型も書ける ◦ 実行速度は申し分ない ◦ Do記法が無くてflat_map地獄になりがちなのは辛い
  3. メソッドチェーンが繋がると読みにくい? -種類数判定 ユニークなのをカウントし 1. なら問答無用でYes 2. なら 順に見て 絶対値に変えて ユニークなもの

    の個数が 1 なら … • 慣れてくると読みやすすぎて世界変わる(マジ) ABC413 D - Make Geometric Sequence https://atcoder.jp/contests/abc413/submissions/67377067