2012-03-01から1ヶ月間の記事一覧

CoffeeScriptでProject Euler #9

問題文 Problem 9 ピタゴラスの三つ組(ピタゴラスの定理を満たす自然数)とはa Solution 3重ループをひとつ減らす工夫をするのがコツ? pythagorean ?= (a, b, c) -> a*a + b*b == c*c for a in [1..1000] for b in [a..1000-a] c = 1000 - a - b if pythagor…

CoffeeScriptでProject Euler #10

問題文 Problem 10 10以下の素数の和は2 + 3 + 5 + 7 = 17である. 200万以下の全ての素数の和を計算しなさい. Solution ダーティなコード。「上手い記述を検討します」とはなんだったのか。 時間もかかるしよくない… is_prime ?= (n) -> [2..Math.floor(Math…

CoffeeScriptでProject Euler #11

Problem 11 長いのでリンク参照。 Solution もうなんというか絶望的に抽象度が低いんだけどどうしたらいいのこれ… grid = """08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81…

CoffeeScriptでLOGO風に絵を描けるサイトを作った

FAQ なに? LOGOタートルグラフィックスは、子どもや学生でも簡単にプログラムで作図できるように作られたプログラミング言語です。 今回このLOGOのいくつかの命令セットをCoffeeScriptによって実装し、ブラウザ上で動かせるサイトを作りました。 どこ? こ…

CoffeeScriptでProject Euler #8

問題文 Problem 以下の1000桁の数字から5つの連続する数字を取り出してその積を計算する。そのような積の中で最大のものの値はいくらか(1000桁の数字はコード中に記載したため省略)EX 6桁の数123789なら、1*2*3*7*8と2*3*7*8*9の二通りとなり、後者の2*3*7*8…

CoffeeScriptでProject Euler #6

問題文 Problem 6コードはCoffeeScript の最初の一杯: 第 2 回 実践的な例から CoffeeScript 言語について学ぶよりそのまま。そもそもこの連載に感銘を受けてCoffeeScriptを使い始めたのだった。 square = (x) -> x*x sum = (nums) -> nums.reduce (a, b) ->…

CoffeeScriptでProject Euler #7

Problem 10001番目の素数を見つけよ。 Solution 素朴なエラトステネスで解く。 効率は悪いがeveryを使って可読性を上げた。 あとunless文を生まれて初めて使った。もう二度と使わない気がする。 is_prime ?= (n) -> [2..Math.floor(Math.sqrt(n+1))].every (…

CoffeeScriptでProject Euler #5

Problem 5 2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。 Strategy 20以下の素数を列挙→それぞれの素数について20…

matplotlibによるガンマ関数の描画

参考:Wikipedia:Gamma Function ガンマ関数って? これ。ただの階乗なんだけど実数や複素数を考慮すると面白いものが見えてくる。 何が見えるの? 一般式 まず実数範囲のグラフ。 普通にラインを引くと発散している箇所がつながってしまうので点描のグラフ…

CoffeeScriptでProject Euler #4

問題文 Problem 4 左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。 Strategy Brute Force 文字列反…

CoffeeScriptでProject Euler #1(きわめて初歩的なカリー化の利用と解説試案)

問題文 Problem 1 10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、これらの合計は 23 になる。 同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。 Solution divisable = (n) -> (x) -> x…

CoffeeScriptでProject Euler #2

問題文 Problem 2 フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...数列の項の値が400万を超えない範囲で、偶数値の項の総和を求めよ。 Solution sum = (l…

CoffeeScriptでProject Euler #3

問題文 Problem 3 13195 の素因数は 5、7、13、29 である。600851475143 の素因数のうち最大のものを求めよ。 Solution あまりうまい書き方が思い浮かばなかったので手続き型で。 といってもコードはここから借りてきただけだけ。 mod ?= (x, n) -> x % n ==…

try:...except ImportError:...イディオム

Processing XML in Python with ElementTreeを読んでいた時に気になりググった。 次のように書く。 try: import module.NewModule as aliasName except ImportError: try: import module.OldModule as aliasName except ImportError: """Error Handling""" I…

Spdeでフィボナッチ螺旋

感想 こんなきれいなものを見つけたので衝動的に書き写した。 フィボナッチ数の計算ロジックの中で描画するのはよくないのは分かるけど、綺麗な処理の組立ってどうしたらいいのかしら。 末尾再帰のコードはここから。 メモ化はScalaらしくないし単純再帰は良…

SpdeでNewton Fractals

参考 Newton Fractals (Python recipe) Scalaで複素数計算 size(512, 512) noLoop val (xa, xb, ya, yb) = (-1.0, 1.0, -1.0, 1.0) val maxIt = 20 val h = 1e-6 val eps = 1e-3 def f(z: Complex) = z * z * z - Complex(1.0, 0.0) case class Complex(re: …

Spdeでお絵かきプログラミング再入門

SpdeはScala(的文法)でビジュアルプログラミングをするためのツール。 Processingという言語からインスピレーションを得ている。 Scalaの勉強がてら導入したので、yoppa.orgの授業資料を参照しながら簡単なコードを書いていく。参照: 第3回:変数と繰り…

3章メモ

アルゴリズム・イントロダクション軽い気持ちで図書館から借りてきたけど読み終わらないんじゃないのこれ。 関数の増加 入力が大きな時は、アルゴリズムの漸近的(asymptotic)な効率を調べるのが良い。 入力サイズの増加にともなって実行時間がどのように変化…

numpy+matplotlibでトロコイド曲線

wikipedia:トロコイドを参考にして。数式打ち込むだけで芸はない。 Trochoid import numpy as np from matplotlib import pyplot as plt RANGE = 0.001 rm = 1. rds = [1./5., 1./2., 1., 2., 3.] sita = np.arange(-8., 8., RANGE) for rd in rds: x = rm *…

numpy+matplotlibでフレネル積分

wikipedia:フレネル積分を参考に。なんでやろうと思ったのかド忘れしたのでいろいろ雑。 from matplotlib import pyplot as plt import numpy as np from scipy.integrate import quad MIN_X = 0. MAX_X = 5. RANGE = 0.001 T = int(MIN_X/RANGE) t = np.ara…

numpy+matplotlibで正規分布

wikipedia:正規分布の図を参考に。正規分布(の理論値)はGnuplotやRのプロッタなど新しいツールを使うさい初めに描くことにしている。変数の名前があまり可愛くない。 import numpy as np from matplotlib import pyplot as plt sigmas = [0.2, 1.0, 5.0, 0…

マージソート覚書(アルゴリズム・イントロダクション)

分割統治法 ソートすべきn要素の配列をn/2の部分列に分割する。 2つの部分列を再帰的にソートする。 ソートされた部分文字列をマージする。 実装(Ruby) 擬似コードと同じように実装しようとしたら配列の境界エラーでコケまくり。 Infinity = 2**30 def merg…

挿入ソートの解析(アルゴリズム・イントロダクション)

「アルゴリズム・イントロダクション 改訂2版」を読んでいる。 2章の挿入ソートを実装しつつ、ループ不変式や実行時間といったアルゴリズムの正当性に関する考え方がどのようなものかを検討する。参考:アルゴリズムイントロダクション 第2章の勉強会資料 挿…

Wordleで文学作品の特徴語をビジュアライズする

Wordleとは Wordleとは単語の出現頻度でテキストサイズに重み付けをし、それをうまく配置することによって視覚効果を狙う手法である。 ここのサービスが有名らしいのだが、日本語がうまく表示されないという問題があった。 さて、OpenProcessingを眺めていた…

jQueryで日本語テキストをシャッフルさせる

jquery.text-effect(grab bag)のscrambledWriterを日本語が使えるように書きかえた。 JSFiddleでのDemoをここに。あとjsdo.itにも投げてみた。 String.prototype.shuffleの処理はここから拝借した。文字列のprototypeを拡張しているのに何も考えずそのままコ…

WindowsでCoffeeScript

CoffeeScriptのうわさ 記述力が高い(PythonやRubyのように)。 JavaScriptのソースコードにコンパイルしてを吐き出せる。逆に言えば変換しないと使えない。 ブラウザ用の開発にもサーバサイドの開発にも使える。 すごいやつらしい(JavaScript++)。 参考:今…