Skip to content

Instantly share code, notes, and snippets.

@bouzuya
Created December 7, 2012 15:44
Show Gist options
  • Save bouzuya/4234063 to your computer and use it in GitHub Desktop.
Save bouzuya/4234063 to your computer and use it in GitHub Desktop.
(apply + (filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1000)))
@kohyama
Copy link

kohyama commented Dec 7, 2012

お疲れ様です.
問題 1 は clojure でも解いたことがあったはず, と思い, フォルダをあさったところ,

(apply + (filter #(or (zero? (mod % 3)) (zero? (mod % 5))) (range 1 1000)))

と書かれたファイルが見つかりました.
「自然数に 0 は含まれるか」以外は議論の余地なしということで. :-)
コンピュータ関係だと natural numbers というと 0 を含むことが多いですかね.

@bouzuya
Copy link
Author

bouzuya commented Dec 8, 2012

宗教上(自然数に0を...)の理由がなく、動作に影響もさほどないので、短くなる (range n) を採用しました。
自分で言うのもあれですが、この形がおそらく正攻法かなあと。

@kohyama
Copy link

kohyama commented Dec 9, 2012

そうですね. 私も (range n) の方が簡潔で良いと思います.
要するに, 文句なし模範解答だと思います.

@tnoda
Copy link

tnoda commented Dec 11, 2012

@kohyama @bouzuya 個人的な好みなんですが,私は @kohyama(range 1 1000) 方式のほうが素直だと思います.どちらがいいと思っているわけではなく,どちらでも問題ないと思っているのですが,なかなか面白い議論だと思い,いろいろ考えるきっかけになりました.ありがとうございます.今週中というわけにはいきませんが,近いうちに考えをまとめようと思います.

@tnoda
Copy link

tnoda commented Dec 11, 2012

余談ですが,最近「仕様」だとか「設計」だとか,それらに対するベンダ・プログラマの態度・姿勢について考えています.(range n)(range 1 n) は,それらについてのヒントになりました.ありがとうございます.

@bouzuya
Copy link
Author

bouzuya commented Dec 13, 2012

@tnoda よく分かりませんが、お役に立てたならうれしいです。また考えた結果について教えていただけるとうれしいです。

rangeという名前の関数から想像できる動作として「開始と終了のふたつを指定して、その範囲の値を生成する」のは自然だとぼくは思います。ですので、開始・終了がはっきり見える (range from to)が良い、なんてのはどうでしょう?

でも (range 0 1000) と書いても 0 や 1000 を含むかどうかが分からないですね ([:-P

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