Skip to content

Instantly share code, notes, and snippets.

@tnoda
Created December 11, 2012 14:50
Show Gist options
  • Save tnoda/4259078 to your computer and use it in GitHub Desktop.
Save tnoda/4259078 to your computer and use it in GitHub Desktop.
Project Euler Problem 5 #mitori_clj
(ns tnoda.projecteuler.problem-5
(:import org.apache.commons.math.util.MathUtils) ; [org.apache.commons/commons-math "2.2"]
(:use clojure.test))
(defn- solver*
[n]
(reduce (fn [^long x ^long y] (MathUtils/lcm x y)) (range 1 (inc n))))
(def solver (partial solver* 20))
(is (= 2520 (solver* 10)))
@ponkore
Copy link

ponkore commented Dec 13, 2012

clojure.math.numeric-tower というものを使ったことがあります(lcm 関数があるw)。

@ypsilon-takai
Copy link

1.2までは、いろいろな有用なライブラリがまとまった、clojure-contrib っていうのを使ってますが、1.3で分解されました。最近あまり参照しなくなりましたが、そのとき、いろいろ混乱して、みんなが「あれはどこにいったーーー」って騒いでいたので、こんなページが作られています。

http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go

どんなライブラリがあるかについての情報元としても使えますね。

mathは、上で指摘のとおりnumeric-towerに行ってます。
clojure.contrib.math
Migrated to clojure.math.numeric-tower - lead Mark Engelberg.

@ypsilon-takai
Copy link

人のをちゃんと読んでなくて、かぶってしまった。 すみません。

gcdはnumeric-towerにありますね。

primesなんてあったんですねぇ。調べてみると、ここにありました。 このlazy-seqsライブラリは、継続されなかったみたいですね。 これくらい自分で作れってことでしょうか。

@emanon001
Copy link

型ヒントは普段使わないですが、よくよく考えると、リフレクションを使用して型を判別するのって結構コストがかかりますね。
Project Euler だと型ヒントの恩恵を受ける機会が多そうなので、次の問題あたりで試してみます。


@kohyama @ypsilon-takai
おお、clojure.contrib は 1.3 からそれぞれ独立したライブラリとしてメンテナンスされるようになっていたのですね。全く知らなかったです。
リンク先の情報、とても助かります。

@bouzuya
Copy link

bouzuya commented Jan 13, 2013

Apache Commons のような既存の Java ライブラリを使ってコーディングの量を減らせるのも,Clojure の長所の一つだと考えています.Maven リポジトリと Leiningen が無ければ Clojure 使っていなかったかもしれないくらい,便利です.

Maven リポジトリ + Leininge で、既存ライブラリを手軽に使えているというのは、ぼくも強く感じています。また、Clojars を使えば、自作ライブラリを公開するのも簡単です。

*warn-on-reflection* ぼくも試してみます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment