Your SlideShare is downloading. ×
0
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Challenge the Project Euler with R
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Challenge the Project Euler with R

2,383

Published on

Tsukuba.R#2 @twittoru\'s Presentation

Tsukuba.R#2 @twittoru\'s Presentation

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,383
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Transcript

    • 1. プログラミングを⑨㍉しか知らない俺が R で Project Euler に挑戦してみた @twittoru
    • 2. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 3. 自己紹介
      • @twittoru
      • id:tor_ozaki
      • です どうぞよろしく
    • 4. じこしょうかい
      • 某頭狂高専電子工学科
      • 電子工学ですが情報系ではないです
      • 有機系太陽電池とかそういうことやってます
      • そんな奴ですが何故か R やってます
    • 5. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 6. こんなノリでいきます
    • 7. こんなノリでいきます
    • 8. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 9. ぷろいぇくとえうらー?
      • はてなキーワード -> 「まだ説明がありません」
      • Wikipedia 日本語版 -> 「記事がありません」
      • ぐぐればわかります…よね?
      • オイラー先生と言えば… 「テトラちゃん?ユーリ?いいえ、 ミルカさん最高です」
    • 10. どう解く? .org
      • 命題を解けるであろうアルゴリズムを実装する
      • 高ランク言語は Mathematica,C++ 等
        • 数学向け言語や高速な汎用言語強し
      • Pencil/Paper や SpreadSheet で解くひとも
      • 解くと解説や正解者向けスレッドが解禁される
      • 進行具合によってスコアや称号がある
    • 11. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 12. といてみた:かんたんかんたん
      • Problem 1 10 未満の自然数のうち、 3 もしくは 5 の倍数に なっているものは 3,5,6,9 の 4 つがあり、 これらの合計は 23 になる。 同じようにして、 1,000 未満の 3 か 5 の倍数に なっている数字の合計を求めよ。
      • いわゆる FizzBuzz の応用ですよね、わかります。
    • 13. といてみた:かんたんかんたん
      • コード例 (function(n){ x <- 1:(n-1) sum(x[(!x%%3)|(!x%%5)]) })(1000)‏
      • 答え [1] 233168
    • 14. といてみた:ぐぬぬ…
      • Problem 2 フィボナッチ数列の項が 400 万を超えない範囲で、 偶数の項の総和を求めよ。
      • 400 万とか多過ぎませんか ?
    • 15. といてみた:ぐぬぬ…
      • コード例 (function(fib=c(1,0),sumfib=0){ if(fib[1]==4000000){ sumfib }else{ Recall(c(sum(fib),fib[1]), ifelse(fib[1]%%2, sumfib,sumfib+fib[1])) } })()‏
      • 答え [1] 4613732
    • 16. といて…ません… orz
      • Problem 3 600851475143 の素因数のうち最大のものを求めよ。
      • 先生、 PC が燃えます… orz
    • 17. と…け…な…い…
      • Problem 12 501 個以上の約数をもつ最初の三角数はいくらか。
      • Problem 14 100 万未満の数字の中で、どの数字からはじめれば一番長いコラッツ数列が得られるか。
      • Problem 21 10000 未満の友愛数の合計を求めよ。
      • ( 「・ ω ・ ) 「 ぎゃおおおおお !!!!
    • 18. ダ…ズ…ゲ…デ…
      • Problem 16 2 1000   の各桁の合計を求めよ。
      • Problem 20 100! の各桁の数字の合計を求めよ。
      • Problem 23 2 つの過剰数の和で書き表せない正の整数の総和を求めよ。
      • ( 「・ ω ・ ) 「 ヒャッホォォォォォォォォォォゥ !!!!!
    • 19. あれ、解ける
      • Problem 15 2×2 のマス目の左上からスタートした場合、引き返しなしで右下にいくルートは 6 つある。 では、 20×20 のマス目ではいくつのルートがあるか。
      • あれ?これは組み合わせですよね。
    • 20. あれ、解ける
      • コード例 (function(row,col){ prod(factorical(col+row), 1/factorical(col),1/factorical(row)) })(20,20) # もしくは choose(20+20,20)‏
      • 答え [1] 137846528820
    • 21. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 22. クラス” vector” の有難味
      • 列挙して積 / 和を求めよ -> apply,sapply,sum,prod...
      • hoge の中から条件 fuga に当てはまるものを求めよ -> all,any,min,max...
      • 条件どおりに要素を加えベクトルを伸ばしていき、 最後で一気に処理をかけることができる。 (ex:Problem 2 フィボナッチ数列 fib を十分な長さ用意しておいて sum(fib[!fib%%2]) でも問題ない )‏
    • 23. 量の壁
      • as.integer(10^10) -> NA
      • 50 桁とか 2^1000 とか精度を維持して計算できない
      • Java とか Ruby とか Haskell だとできる !
    • 24. 量の壁
      • Java の BigInteger と BigDecimal とか
    • 25. 量の壁
      • Python とか
    • 26. 量の壁
      • python >>> 2**1000 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376L
    • 27. 量の壁
      • Ruby とか
    • 28. 量の壁
      • irb irb(main):001:0> 2**1000 => 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
    • 29. 量の壁
      • Haskell だと
    • 30. 量の壁
      • ghci Prelude> 2^1000 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
    • 31. 量の壁
      • できちゃうんです。まったくけまらしい。
    • 32.
      • 最終鬼畜 R 以外全部爆発 ! 発表者が落ちつくまで しばらくお待ち下さい……
    • 33. クラス” bigz” に学ぶ
      • R は標準では多倍長整数は扱えない
      • GNU MP の移植 gmp が CRAN からインストールできる -> Ubuntu8.04 , gcc4.2.3 , R 2.6.2 ではコンパイル通りませんでした>< タスケテ
      • gmp では、
        • 追加クラス ( 型 ) の多倍長整数 (.bigz), 分数 (.bigq)‏
        • 追加されたクラス向けの総称関数
        • 最小公倍数、最大公約数などの新規関数
      • が追加されます。
    • 34. クラス” bigz” に学ぶ
      • これで R も多倍長整数を扱えるんですが…
      • べ、べ、別にあんたに頼らなくったって 私だけでも問題と、解けるんだからね !
      • というわけではないですが、馬鹿正直に全部計算する必要はなかったりします。
    • 35. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 36. R の向き不向き というか限界
      • 扱えるデータの限界 Problem 10 200 万までの素数をどう手にするか
      • Common Lisp (defun hogehoge (n &optional (ls nil)) (if (= n 1) ls (hogehoge (1- n) (cons i ls)))) とかやって (hogehoge 2000000) を篩にかける
    • 37. R の向き不向き というか限界
      • 扱えるデータの限界 Problem 10 200 万までの素数をどう手にするか
      • Ruby (2..2000000).each{|i| ------ 篩処理 ------ }
      • 表記は簡単だが鬼のように時間がかかる。
    • 38. R の向き不向き というか限界
      • 扱えるデータの限界
      • R CL 風にやると ( ベクトル操作 ) 大量な要素のベクトルへの処理が重すぎて暴走する 2:2000000 は環境によっては作れない
    • 39. R の向き不向き というか限界
      • 扱えるデータの限界
      • R CL 風にやると ( ベクトル操作 ) 大量な要素のベクトルへの処理が重すぎて暴走する 2:2000000 は環境によっては作れない Ruby 風にやると ( ループ処理 ) “ ゴールド・ E ・レクイエム” が発動
    • 40. まとめると
      • R 向いてる
        • 大量のデータに対して関数を適応すること
        • 問題がベクトルの操作と等価であるもの
        • 手間が泥
      • R 向いていない
        • 計算時間がかかるもの
        • 手順が泥
        • while ループしか書けない人
        • (( 空 . 気 ) . ( 読 . ( め る . 人 )))‏
    • 41. あじぇんだ
      • 自己紹介
      • はじめに
      • Project Euler って何
      • 出題問題紹介
      • 多言語の DisDis タイム
      • R でこの先生きのこるには
      • プログラミングな話?
    • 42. さぁみんなも挑戦しよう
      • なるべくベクトルとにかくベクトル
        • 桁ごとに分解して筆算を実装するとかいいかも
      • 枝刈りちゃんとしましょう
        • 計算回数は最小限に
        • ごり押しのコードを考える前に問題の本質を理解する
      • どうしても大量のループが必要なら諦める
        • 使用言語を制限するルールはありません
    • 43. 速度とコンパイル
      • 数行数秒とかいう GAIJING めwwww
        • Calculated the answer in 2 seconds flat.
        • Runs under 1 second. 
        • It executes in only a few seconds.
        • It's easy in Matlab.
        • One line in Mathematica: ---code---
    • 44. 速度とコンパイル
      • 現状でもループを使わなければ十分使える
        • GNU Octave,MATLAB より行列計算速いとかなんとか
      • LISPLISP したコードは遅いだけの現状 !
      • とはいえコンパイルの構想はあるらしい
        • 将来に期待?
    • 45. おまけ: Lazy に生きたい
      • 遅延評価は使えるようにしておくと楽しいかも
      • 無限ストリームがあると解き方が変ってくるかも
      • 素数とかフィボナッチ数とかの問題は向いてると思いません?
    • 46. かんそうとか
      • あんま時間なかった
      • SICP 読めばよかった
      • 幻想都市大学筑波
    • 47. かんそうとか
      • あんま時間なかった
      • SICP 読めばよかった
      • 幻想都市大学筑波
      • 一緒に問題をコネコネするミルカさん募集中
    • 48. おわり

    ×