Haskell

Solovay-Strassen: 確率的素数判定アルゴリズム

実装したので,メモ. 実装といっても,単純なアルゴリズムなので,コードは至極シンプル. import System.Random (randomRIO) solovayStrassen :: Integer -> IO Bool solovayStrassen n = return.isProbablyPrime n =<< randomRIO (1,n-1) isProbablyPrime…

Google Code Jam 2010: Qualification Round のメモ.

解いた.とりあえず,問題文に骨が折れる. メモ,メモ. A そのまま. import Control.Monad import Text.Printf light :: (Integral a, Integral b) => b -> a -> String light n k | mod (k+1) (2^n) == 0 = "ON" | otherwise = "OFF" main :: IO () main…

Problem 289

Problem 289 - Project Eulerある特殊なグラフの交差のないオイラー閉路の数を求める問題。 一般の無効グラフにおけるオイラー閉路の数を求めるのは難しいらしいです。この問題、正解者が少ないけど、理論的にはそんなに難しくないと思う。 ただ、実装が面倒…

makeplex salon: 麻雀の問題

あなたのスキルで飯は食えるか? 史上最大のコーディングスキル判定 (1/2) - ITmedia エンタープライズ をやってみた。言語はHaskell。 たぶん、あってる。根拠はない。 とりあえず、各牌が無限にあると思うと、以下のシンプルなコードで良いと思う。 デカル…

HaskellでGUI #2 FliptItの改良:FFIの利用

(今回は GUI というより FFI な気がする.でも目的は GUI だからいいか.)前回作成した GUI の FlipIt を改良した.改良は以下の2点 周期を増加. 解を表示. 周期の増加 前回は マスの変化が 白→黒→白→黒→… だったが,今回はこの周期を変更できるようにし…

Problem 279

Problem 279 - Project Euler似た問題を昔やったような.なぜか愚直な方法と賢い方法の答えがあわずに苦戦した. どうやってもあわない. 実は愚直な方法が間違っていたという,情けないオチ.Haskellで約2秒. C++で約0.3秒. こんなもん?

Haskell で GUI ~ FlipIt ~

もとネタ http://www.terrypaton.com/flipit/ マスをクリックすると,そのマスと周囲のマスの色が反転する. 全部同じ色にすることが目的.HaskellでGUIプログラミングしてみた. 結果 見た目は以下. 実行時の引数でサイズを変更できる. cairoというベクタ…

メビウス関数

Möbius Function -- from Wolfram MathWorldメビウス関数のリストが欲しい.つまり,[μ(1), μ(2),… ,μ(n)]が欲しいと.このとき,Haskellでどう書くか.ぱっと思いつく選択肢:(a) 定義にしたがって,素因数分解して,素因数を数える.これを,1からnまで…

Problem 275

Problem 275 - Project Euler問題の概要. ある条件を満たす,polyominoを探す. その条件の1つは,横方向にバランスがとれていること(重心のx座標が0). 詳細な条件は上のリンクで. 絵でみると分かりやすい. 下図はproject eulerからの引用. 求めるの…

Problem 273

http://projecteuler.net/index.php?section=problems&id=273 実は本筋とはあまり,関係がないのだが,4n+1型の素数の平方和分解は前に実装したことがある. http://d.hatena.ne.jp/jeneshicc/20081221/1229835537 それもあって今回の問題はパッとやってピッ…

Problem 271 & 272

Problem 271 - Project Euler Problem 272 - Project Euler 誤解を恐れずに,問題の雰囲気を紹介すると.「n が与えられて,x^3 = 1 (mod n) となる x は?」です. ある性質が鍵だと思う. 271のほうは多分簡単. Haskellでも実行は一瞬. 272はそんなに難…

Problem 270

Problem 270 - Project Euler何通りの分割の仕方があるか?系の問題. 冷静に場合分けなどを考えていけば,解ける. そんなに難しくないはずだった. ただ,ずっとN=29だと思って,答えが合わずに悩んでいた.なんというアホ. やはり,MemoTrieは便利だ.

Problem 269

Problem 269 - Project Euler そこまで難しくないが,なかなか面白い. アルゴリズムが結構気に入った.

Problem 268

Problem 268 - Project Euler最近は比較的簡単なものが多い?

Solving the Santa Claus Problem with Conjunction

Solving the Santa Claus Problem with Conjunction | Communicating Haskell Processes なんか面白そうだ.あとで読む.

Problem 267

http://projecteuler.net/index.php?section=problems&id=267 単純な計算ミスを多数して,どうしようもなかった. 問題自体は簡単. メモ import Text.Printf して printf "%.12f\n" pi とすると有効数字12桁で表示してくれる.

Haskell 2010 ?

[Haskell] Announcing Haskell 2010

SKIコンビネーター@Haskell

ラムダ式をSKIコンビネーター表現するコードが発掘された(昔のコードがたまたま見つかった). ちなみに,SKIBCで表現することも可能.ラムダ式のベータ簡約は前につくった. ラムダ計算 - 落書き、時々落学こんな感じ. *SKI> b \x->\y->\z->x (y z) *SKI>…

Haskellでできたゲーム

bloxorz: an OpenGL Logic Game written in Haskell | Arch Linux and Haskell なんか昔やったことあるような…

Problem 265

Problem 265 - Project Euler これは簡単. だって,N=5だし. 計算量とか全然考慮せずに実装したが,実行は一瞬. ただ,Nが大きい場合,どうやって効率的に解くのかな?# eulerに現を抜かしている暇はないはずだが…

Problem 264

Problem 264 - Project Euler いつもの整数問題. とりあえず,愚直な方法をHaskellで実装して, 遅くて,遅くて,しかたなったので, C++ならいけるはず(この計算量なら)と思い, C++で実装したら,約60倍速くなった.びっくり.しかし,愚直な方法なので…

Problem 263

Problem 263 - Project Euler いつもどうりの整数の問題. 探索範囲の上限がよく分からないことが,けっこう怖い. しかも,普通に考えると,素因数分解と素数判定が必要だから,計算量が大きくなりそうな予感.とりあえず,brute forceしたら,時間かかった…

Problem 262

Problem 262 - Project Euler 最短距離を求める問題. しかし,離散的な問題ではなく,連続的な問題. 山の高さを表す関数が与えられて,最小高度で移動したときの最短距離を求める. 詳細は,project eulerのサイトで.高さを表す関数が簡単な形ではないの…

Problem 261 メモ

Problem 261 - Project Eulerん?運良く解けた? 計算スピードのために,多分正しいショートカットを使っているから,良く分からない. はじめは N=10^11だと思ってました.しかし,また,フォーラムにマジカルな(理解できない)解法が載っていた.うーん.…

Problem 259

Problem 259 - Project Euler 問題読んで,理解して,テケトーに(計算量を全然見積らず)実装したら,答えでた. たぶん,簡単な部類.最近,ちょっと難しい問題が多めだったから,息抜きなんですかね.まぁ,計算式を二分木で表現するのは良くあることで(…

Problem258 メモ

けっこう,(といっても,4,5日前だが)に解いた.問題文は簡単.g(k) = 1 if 0 g(k) = g(k-2000) + g(k-1999) if 2000 find g(10^18) (mod 20092010)普通のFibonacciだったら,簡単ですが. そう簡単にはいかない.まぁ,それが今回の問題ですか. Haskell…

Google Code Jam 2009 Round2 D (メモ)

書いてみた. 上位の方のソースを見ると2分探索で解いていた. まね. import Control.Monad import Text.Printf import Debug.Trace -- main part data Circle = C { x::Double, y::Double, r::Double} main = do (c:_) <- getList :: IO [Int] forM_ [1..c…

Google Code Jam 2009 Round2 C (メモ)

マッチングで解けるのね. そんなの思いつきません.解けないまま,終るのはシャクなので,Haskellで書いてみた. import Control.Monad import Text.Printf import Data.Array import Data.Graph.Inductive -- main part main = do (t:_) <- getList :: IO …

2008 の Round2 の D (Google Code Jam 2008)

やってみた,というか書いてみた. 遅いなー import Data.List import Data.Array import Control.Monad import Text.Printf import Data.Bits main = do (n:_) <- getList :: IO [Int] forM_ [1..n] $ \i -> do (k:_) <- getList cs <- getLine printf "Cas…

Round 1A (Google Code Jam 2009)

練習のためやってみた. Bは問題文が長いので,まだ読んでいない.(前回と同じテンプレート使用) A 各baseに対するhappy数達を,無限リストとして,計算しておいて,最後にintersectionをとる. という,作戦だが,どうも遅い.メモリを沢山使う. やはり,…