Skip to content

Instantly share code, notes, and snippets.

@ponkore
Created January 9, 2013 14:18
Show Gist options
  • Save ponkore/4493455 to your computer and use it in GitHub Desktop.
Save ponkore/4493455 to your computer and use it in GitHub Desktop.
Project Euler Problem 25
(ns projecteuler.problem-25
(:require [clojure.string :as str]
[clojure.math.numeric-tower :as math])
(:use clojure.test))
(defn fib-gen
"ใƒ•ใ‚ฃใƒœใƒŠใƒƒใƒๆ•ฐใ‚’ generate ใ™ใ‚‹้–ขๆ•ฐใ€‚ๅˆๆœŸๅ€ค[1 1]ใ‹ใ‚‰ iterate ใ™ใ‚‹ๅ‰ๆใ€‚"
[[a b]] [b (+' a b)])
(def fib-seq
"ใƒ•ใ‚ฃใƒœใƒŠใƒƒใƒๆ•ฐใจใใฎ้ …ใ‚’่ฟ”ใ™ใ€‚"
(->> (iterate fib-gen [1 1])
(map first)
(map-indexed (fn [idx itm] [(inc idx) itm]))))
(defn find-min-fibs
"lower ไปฅไธŠใงๆœ€ๅฐใฎใƒ•ใ‚ฃใƒœใƒŠใƒƒใƒๆ•ฐใจใใฎindexใ‚’่ฟ”ใ™ใ€‚"
[lower]
(first (drop-while #(<= (second %) lower) fib-seq)))
(defn problem-25
"Project Euler Problem 25"
([] (problem-25 (math/expt 10 999)))
([lower] (first (find-min-fibs lower))))
;;(time (problem-25))
;;=> "Elapsed time: 5.387 msecs"
;; test
(is (= (find-min-fibs 100) [12 144]))
(is (= (problem-25 100) 12))
@tnoda
Copy link

tnoda commented Jan 9, 2013

๐Ÿ‘ ่ชญใฟใ‚„ใ™ใ„ใงใ™๏ผŽ

@kohyama
Copy link

kohyama commented Jan 10, 2013

doc-string ใจ่งฃ่ชฌ, ใจใฆใ‚‚ๅˆ†ใ‹ใ‚Šใ‚„ใ™ใ„ใงใ™.
่งฃๆณ•ใ‚‚้ †ๅฝ“ใงไฝ•ใฎๅ•้กŒใ‚‚็„กใ„ใจๆ€ใ„ใพใ™.

ใ•ใ—ใŸใ‚‹ๅˆฅ่งฃใ‚‚ๆ€ใ„ๆตฎใ‹ใฐใชใ„ใฎใง, ๆœฌๅฝ“ใซไบ›็ดฐใช็‚นใง,

  • fib-seq ใŒใ‚คใƒณใƒ‡ใ‚ฏใ‚นไป˜ใใ‚ทใƒผใ‚ฑใƒณใ‚นใ‚’่ฟ”ใ™ใ“ใจใ‚’ doc-string ใซๆ˜Ž่จ˜ใ™ใ‚‹ใ ใ‘ใงใชใ, ้–ขๆ•ฐๅใซใ‚‚ๅๆ˜  (indexed-fibs ใจใ‹) ใ™ใ‚‹ใจใ„ใ†ใฎใฏๅฆ‚ไฝ•ใงใ—ใ‚‡ใ†.
  • ใ‚คใƒณใƒ‡ใ‚ฏใ‚นใŒ 1ใ‹ใ‚‰ๅง‹ใพใ‚‹ใฎใฏใƒ—ใƒญใ‚ฐใƒฉใƒžใ‹ใ‚‰่ฆ‹ใ‚Œใฐ็‰นๆฎŠใชใฎใง, doc-string ใซๆ˜Ž่จ˜ใ™ใ‚‹ใ‹, map-indexed ใŒไป˜ใ‘ใฆใใ‚ŒใŸใ‚คใƒณใƒ‡ใ‚ฏใ‚นใ‚’ๆฏŽๅ›ž inc ใ—ใฆใ„ใ‚‹ใฎใŒใ‚‚ใฃใŸใ„ใชใ„ใฎใง, fib-seq ใŒ่ฟ”ใ™ใ‚ทใƒผใ‚ฑใƒณใ‚นใฎใ‚คใƒณใƒ‡ใ‚ฏใ‚นใฏ 0ใ‹ใ‚‰ๅง‹ใ‚ใฆใŠใ„ใฆ, ่งฃ็ญ”ใ‚’ไฝœใ‚‹ใจใใซ inc ใ™ใ‚‹. ใจใ„ใ†ใฎใฏใฉใ†ใงใ—ใ‚‡ใ†.

่ฆšใˆๆ›ธใ: ใƒ•ใ‚ฃใƒœใƒŠใƒƒใƒๆ•ฐ(ๅˆ—)ใซใคใ„ใฆใฏ @tnoda ใ•ใ‚“ๆ‹…ๅฝ“ Problem 2 ใ‚‚ๅ‚็…ง.

@ponkore
Copy link
Author

ponkore commented Jan 10, 2013

tnoda ใ•ใ‚“ใ€kohyama ใ•ใ‚“

  • ใ‚ณใƒกใƒณใƒˆใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚
  • indexed-fibs ใ€ๅ‘ฝๅใจใ—ใฆใฏใ“ใกใ‚‰ใฎใปใ†ใŒใ„ใ„ใงใ™ใญใ€‚ใ„ใคใ‚‚ๅ‘ฝๅใฎไป•ๆ–นใง่ฟทใ„ใพใ™(็ตๆžœๅคฑๆ•—ใ™ใ‚‹ใ“ใจใ‚‚...)ใ€‚
  • ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ‚’ๆฏŽๅ›ž inc ใ™ใ‚‹ใฎใฏใ€็ขบใ‹ใซใ‚‚ใฃใŸใ„ใชใ„ใงใ™ใญใ€‚ใ”ๆŒ‡ๆ‘˜ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚
  • Problem2ใ€ไปฅๅ‰่ฆ‹ใŸใ‚ˆใ‚Šใ‚ณใƒกใƒณใƒˆใŒไผธใณใฆใŸ...ใ€‚ใ“ใฎ้€ฑๆœซใซใงใ‚‚ใฟใชใ•ใ‚“ใฎ่งฃ็ญ”ใ‚’ใ‚‚ใ†ไธ€ๅบฆใŠใ•ใ‚‰ใ„ใ—ใฆใŠใใŸใ„ใงใ™(ใชใ‹ใชใ‹่ฟฝใ„ใคใ‹ใชใ„ใฎใงๅ›ฐใฃใŸใ‚‚ใ‚“ใงใ™)ใ€‚

@tnoda
Copy link

tnoda commented Jan 10, 2013

Problem2ใ€ไปฅๅ‰่ฆ‹ใŸใ‚ˆใ‚Šใ‚ณใƒกใƒณใƒˆใŒไผธใณใฆใŸ...ใ€‚ใ“ใฎ้€ฑๆœซใซใงใ‚‚ใฟใชใ•ใ‚“ใฎ่งฃ็ญ”ใ‚’ใ‚‚ใ†ไธ€ๅบฆใŠใ•ใ‚‰ใ„ใ—ใฆใŠใใŸใ„ใงใ™(ใชใ‹ใชใ‹่ฟฝใ„ใคใ‹ใชใ„ใฎใงๅ›ฐใฃใŸใ‚‚ใ‚“ใงใ™)ใ€‚

ไป–ใฎๅ•้กŒใ‚‚ใ‹ใชใ‚Šไผธใณใฆใ„ใ‚‹ใฎใง๏ผŒใœใฒ๏ผŒใ‚‚ใ†ไธ€ๅบฆ่ฆ‹ใฆใ‚ณใƒกใƒณใƒˆใ‚’่ฟฝๅŠ ใ—ใฆใฟใฆใใ ใ•ใ„๏ผŽ

@ypsilon-takai
Copy link

ใ‚ณใƒผใƒ‰ใซใ‚ใˆใฆใ‚ณใƒกใƒณใƒˆใ™ใ‚‹ใจใ™ใ‚Œใฐใ€fib-seqใŒใƒ•ใ‚ฃใƒœใƒŠใƒƒใƒๆ•ฐๅˆ—ใฎ็”Ÿๆˆใจใ€ใ‚คใƒณใƒ‡ใ‚ฏใ‚ทใƒณใ‚ฐใ‚’ใ„ใฃใ—ใ‚‡ใซใ—ใฆใ„ใ‚‹ใฎใซ้•ๅ’Œๆ„ŸใŒใ‚ใ‚Šใพใ™ใ€‚ ๅˆฅใซใ—ใŸใปใ†ใŒใใ‚Œใ„ใ ใจๆ€ใ„ใพใ™ใ€‚

ๅค‰ๆ•ฐใ‚„้–ขๆ•ฐใฎๅ‘ฝๅใฏๅƒ•ใ‚‚ใŸใ„ใฆใ„ๅคฑๆ•—ใ—ใพใ™ใ€‚
googleใฎlispใฎใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ ใซใ‚ใ‚‹ใ‚ˆใ†ใซใ€ใ€Œไธญ่บซ(content)ใงใฏใชใ็›ฎ็š„(intent)ใซใ‚ˆใฃใฆๅ‘ฝๅใ™ในใใ€ใจใ„ใ†ใฎใฏ้ ญใซใ‚ใฃใฆใ‚‚ใคใ„ xxx-list ใจใ‹ใซใชใฃใฆใ—ใพใ†ใ€‚

@plaster
Copy link

plaster commented Jan 14, 2013

take-while ใซใ—ใฆใ€ count ใ™ใ‚‹ใฎใ‚‚ใ„ใ„ใ‹ใจๆ€ใ„ใพใ—ใŸใ€‚

(defn fibs [] (map first (iterate (fn [[x0 x1]] [x1 (+ x0 x1)])
                                  [1N 1N])))

(defn solve [limit-exclusive]
  (inc (count (take-while #(< % limit-exclusive) (fibs)))))

(solve (. (java.math.BigInteger. "10") pow 999))

ใ“ใฎๆ–นๆณ•ใงใ‚„ใ‚‹ใจใ€ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ‚’ใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‹ใ‚‰ใชใใ›ใพใ™ใ€‚

+' ใฎๅญ˜ๅœจใ€ๅˆใ‚ใฆ็Ÿฅใ‚Šใพใ—ใŸใ€‚ๅ‹‰ๅผทใซใชใ‚Šใพใ™ใ€‚

@ponkore
Copy link
Author

ponkore commented Jan 14, 2013

ypsilon-takai ใ•ใ‚“

  • ใ‚ณใƒกใƒณใƒˆใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚fib-seq ใฎไปถใ€็ขบใ‹ใซใใฎ้€šใ‚Šใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚ๅๅ‰fib-seq ใจไธญ่บซใŒไธ€่‡ดใ—ใฆใชใ„ใ‹ใ‚‰ไฝ™่จˆใซ้•ๅ’Œๆ„Ÿใ‚’ๅข—ใ—ใฆใ„ใ‚‹ๆ„Ÿใ˜ใงใ™ใญใ€‚plaster ใ•ใ‚“ใฎใ‚ณใƒกใƒณใƒˆใซใ‚ใ‚‹ fibs ใŒ fib-seq ใซใตใ•ใ‚ใ—ใ„ใ‹ใ‚‚ใ€‚
  • google ใฎ lisp ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„ใ‹ใ‚‰ใฎๅผ•็”จใ€ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚ๆ—ฅๆœฌ่ชž่จณ ใฏ็พๅœจ็ฟป่จณ้€ฒ่กŒไธญใงใ™ใŒไธ€ๅฟœใƒชใƒณใ‚ฏ่ฒผใฃใฆใŠใใพใ™( ใ‚ฝใƒผใ‚น )ใ€‚

plaster ใ•ใ‚“

  • ใ‚ณใƒกใƒณใƒˆใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚
  • ่งฃๆณ•ใ€็›ฎใ‹ใ‚‰ใ†ใ‚ใ“ใงใ™ใ€‚ใ™ใฃใใ‚Šใ—ใฆใ„ใ„ใงใ™ใญใ€‚ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚

@ypsilon-takai
Copy link

@ponkore ใ•ใ‚“

ๆ—ฅๆœฌ่ชž่จณใ‚„ใฃใฆใ‚‹ใ‚“ใงใ™ใญใ€‚ใ—ใ‹ใ‚‚ใƒกใƒณใƒใƒผใ‚’ใ‚„ใฃใฆใ‚‰ใฃใ—ใ‚ƒใ‚‹ใ€‚ githubใงใ‚„ใฃใฆใ‚‹ใ‚“ใงใ™ใญใ‡ใ€‚ ใŠใ‚‚ใ—ใ‚ใใ†ใ ใชใใ€‚ ใพใ ่จณใ•ใ‚Œใฆใชใ„ใฎใŒใ‚ใ‚Šใพใ™ใญใ‡ใ€‚ ใ‚„ใฃใฆใฟใ‚ˆใ†ใ‹ใชใใ€‚

@plaster ใ•ใ‚“

ๅƒ•ใ‚‚ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใชใใ›ใชใ„ใ‹ใชใใจๆ€ใฃใŸใ‚“ใงใ™ใŒใ€ๅ‡บใพใ›ใ‚“ใงใ—ใŸใ€‚ ๆ€่€ƒใŒ็กฌ็›ดใ—ใฆใ‚‹่จผๆ‹ ใงใ™ใญใ€‚ ใŠใฟใ”ใจใงใ™ใ€‚

@ponkore
Copy link
Author

ponkore commented Jan 15, 2013

ใ„ใ‚„ใ€ใปใ‚“ใฎใกใ‚‡ใณใฃใจใ—ใ‹็ฟป่จณใ—ใฆใ„ใชใ„ใ‚“ใงใ™...ๅ‰ใใ†ใซใƒชใƒณใ‚ฏๅ‡บใ—ใฆใ—ใพใฃใŸใฎใงใ™ใŒใ€ใชใ‚“ใ ใ‹็”ณใ—่จณใชใ„(ๆš‡ใงใใŸใ‚‰ใพใŸใ‚„ใ‚Šใพใ™!!)ใ€‚

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