ジョイス「Ulysses」の語彙を測定する

wikipedia:Ulyssesによれば、ユリシーズの語彙は30030(出典 Analyzing Ulysses)である。しかしこの出典のリンクが死んでいて測定に使われたというプログラムのコードを読むことができないため、自分で調べることにした。結論:だいたい30000くらいであって…

lastButOne(Real World Haskell 2章)

練習問題 2. lastButOneという関数を書きなさい。この関数は最後の1つ前の要素を返す関数です。 解 再帰にすこしずつ慣れていく。 lastButOne :: [a] -> a lastButOne xs = if length xs == 2 then head xs else lastButOne (tail xs) 練習問題 3. lastButOn…

Real World Haskell 2章でつまづいたところ

myDrop n xs = if n <= 0 || null xs then xs else myDrop (n - 1) (tail xs) をmyDrop.hsとして保存して、ghci上でロードする。 Prelude> :load myDrop.hs [1 of 1] Compiling Main ( myDrop.hs, interpreted ) Ok, modules loaded: Main. *Main> myDrop 7 …

log

やったこと。 Scalaプログラミング入門とReal World Haskellを購入。Haskellのほうは無料公開されてるの知ってたけど英語読めないし… Haskell本1章まで。解いた問題はGitHubに置くつもり。 読んだ本。パックス・モンゴリカ、もう一つのゲルニカの木、ストイ…

Project Euler #20

Rubyだと一瞬なんだけどCoffeeScriptで書く場合はどうしようか… def fact(n) (1..n).to_a.inject(1){|r, i| r * i} end fact(100).to_s.each_char.map{|i| i.to_i}.inject(:+)

雑記

Firefoxのタブが溜まると重くてしょうがないので整理。 読んでみようかと思ってるリポジトリなど。 JavaScript Underscore.js JSに関数型的な機能を盛り込んだライブラリ。 https://github.com/documentcloud/underscore/CoffeeScriptにもあるようだが(ライ…

Wallis(ウォリス)の公式によるπの計算

Python scientific lecture notesの演習より。書いた直後に答えが載っていることに気づく。 式はwikipedia:ウォリスの公式の下の方に。 # -*- coding: utf-8 -*- import math print "真値" , math.pi my_pi = 2.0 * reduce(lambda a,b: a*b, [4.0*(i**2)/(4.…

Rubyライブラリの書き方を調べる(what_methods.rbを読む)

what_methodsとは what_methodsはメソッドの名前を忘れたとき調べるのに便利なライブラリ。 gem i what_methods でインストールし、irbを立ち上げて次のように打ってみよう。 irb(main):001:0> require "what_methods" => true irb(main):002:0> [1,2,3].wha…

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…