タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

haskellとeulerに関するnfunatoのブックマーク (5)

  • HaskellでProject Euler(Problem 58~60) | ザネリは列車を見送った

    zaneli-eulerのisPrimeを修正。 この変更をしないと今回のProblem 58, 60 には使い物にならなかった。 従来は、まず調べたい値までの素数の全リストをprimes関数を使用して作っていたが、 それでは速度的に厳しかった。 調べ方がザルのような気もしたが、奇数のリストの中に割り切れる値が無いかを調べるほうが格段に速い。 まずspiralDiagonalsで渦巻きの対角線上の数値と、その時点での辺の長さを持つ無限リストを作っている。 > take 3 spiralDiagonals [(3,[3,5,7,9]),(5,[13,17,21,25]),(7,[31,37,43,49])] その無限リストに対してsearchで条件に合うものを探す。 対角線上の値をdに加算していき、(length nsとしているが全て4なのは分かっているので固定値でも良かったかも) その中の

    HaskellでProject Euler(Problem 58~60) | ザネリは列車を見送った
  • 99 Haskell Problems より、[31] でもその前に - Qiita

    追記 Qiita の記事の中にすでにもっと早くてエレガントなコードを書いていらっしゃる記事を見つけました。 Haskell で「素数列」をつくる。 なお、さらに元ネタはこちらだそうです。 エラトステネスの小型高速遠心分離機 コメントにも有りましたが、これらの実装も実はエラトステネスのふるいではなく(Haskell の遅延評価のせい?)いわゆる試し割りということになるそうですが、コードゴルフにも採用されてる位短くてかつ早いとなると、、、 一見したところ何をしているか分からなかったのでちょっと紐解いてみます、以下質的にはHaskell で「素数列」をつくる。からのコピペです、ちょっと型とか二乗とか改変していますが(手元の環境では違いが出ませんでしたが、もしかしたら高次の影響があるかも分かりません、掛け算の方が安価なのかも) Fast primes from http://qiita.com/

    99 Haskell Problems より、[31] でもその前に - Qiita
  • Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ

    CodeforcesやProject Eulerの問題には、無限リストをうまく使うと綺麗に解くことができる問題がたくさんあります。 数列の性質から探索範囲の上界を決めて解を探索することが多いのですが、きちんとした根拠を持って上界を決めることができることは少なく、余裕を持って十分に広い範囲で計算して解を求める解法がよく取られます。 Haskellの特徴である遅延評価とその洗練された糖衣構文を用いると、無限リストを簡単に扱うことができます。 上界を適当に定める解法よりも、より宣言的で美しく、時に効率的なコードで同じ解を得ることができます。 しかし、無限リストをきちんと、それも無限個の無限リストをきちんと扱うとなると、意外と苦労します。 この記事では、無限個の無限リストをソートされた形で結合する方法について説明します。 一般的な無限リストではなく、条件はかなり絞っていてます (そうでないと原理的

    Haskellで無限個の無限リストをソートされた形で結合する - プログラムモグモグ
  • HaskellでProject Euler(Problem 52~54 補足) | ザネリは列車を見送った

    Data.Function.onという、バシッと決まれば格好良さそうなやつを教わったので バシッと決まる使いどころを探そう。 そうか、splitOnを自作せずとも、スペース区切りの場合ならwordsがあった。 fromEnum (Rank 1) = fromEnum (Rank 13) + 1とすることでエースを13より大きい値として扱えるようにした。 こういう場合、toEnumはどうするのが良いのだろう?何となく対称性を持たせてはみたが。 また、sameRanks関数などを使ってワンペア・ツーペア・スリーカード・フルハウスなどを判定していたが、 あらかじめ同じ数字ごとにグループ化して要素数でソートしておき、パターンマッチで役を判定できるようにしてみた。 Data.Ord.comparingを使って compare = comparing fromEnum、sortBy (flip $ c

    HaskellでProject Euler(Problem 52~54 補足) | ザネリは列車を見送った
  • Optimizing longest Collatz chain in Haskell

  • 1