CoffeeScript

CoffeeScriptでProject Euler #14

Problem14 正の整数に以下の式で繰り返し生成する数列を定義する。 n → n/2 (n が偶数) n → 3n + 1 (n が奇数)13からはじめるとこの数列は以下のようになる。 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 113から1まで10個の項になる。 この数列はどのような…

CoffeeScriptでProject Euler #15

Problem 15 図が付されているのでリンク参照。Problem 15 - PukiWiki Solution fact = (n) -> if n == 1 1 else n * fact(n-1) console.log (fact 40) / (fact 20) / (fact 20) プログラミング的にはどう解けばいいのでしょう。題意が読み取れません。逆路:…

CoffeeScriptでProject Euler #13

Problem 13 以下の50桁の数字100個の総和の上位10桁を求めよ。 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 ...省略... 53503534226472524250874054075591789781264330331690省略したリストは…

CoffeeScriptでProject Euler #12

Problem 12 Problem 12 - PukiWikiを参照 Solution 解いた手順は次の通り。 三角数を素因数分解する(factorize)。 同じ素因数を数え上げる(count)。 約数の個数は同じ素因数の個数がわかっていれば公式的に求まる。約数 - Wikipedia参照。 count = (xs) -> o…

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…

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 ==…

WindowsでCoffeeScript

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