Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2011 02-21 第1回@freaks勉強会

1,472 views

Published on

  • Be the first to comment

  • Be the first to like this

2011 02-21 第1回@freaks勉強会

  1. 1. Webプログラマの為のTopcoder入門<br />2011.02.21<br />Twitter: @yuichirw<br />ハッシュタグ: #atstudy<br />
  2. 2. Topcoderについて<br />Topcoder社の開催するプログラムコンテスト<br />世界中のプログラマが参加するコンテスト<br />Single Round Match(SRM)やMarathonMatch(MM)というコンテストがある<br />使用可能な言語はC++, Java, C#, VB<br />Pythonが使用可能になるらしい...?<br />
  3. 3. SRMについて<br />ほぼ毎週コンテストが開催される<br />75分で,easy, medium, hardの3つの問題を解く<br />5分の休憩後,お互いのバグを発見し,バグを誘発させるとポイントが貰えるチャレンジタイムがある<br />これによりプログラマのネトゲと呼ばれているらしい?<br />問題回答の早さによって,Ratingが振られる<br />2200~はredCoderとして恐れられている<br />Ratingによって,Div1(難しい問題)とDiv2(易しい問題)に振り分けられる<br />
  4. 4. プログラミングコンテストって?<br />問題が提出され,それを解くプログラムを書く<br />解いた問題数や,解けた時間などを競う<br />様々なコンテストがある<br />Google Code Jam<br />http://code.google.com/codejam/<br />Codeforces<br />http://www.codeforces.com/<br />CodeChef<br />http://www.codechef.com/<br />
  5. 5. ここで問題です<br />
  6. 6. 例題<br />絶対パス path,currentPathが与えられるので,currentPathからpathへの相対パスを求めよ – Div2 405 Medium<br />ex)<br />Input: path = “/a/b/c/d”, currentPath = “/a/b/e/d”<br />Output: “../../c/d”<br />
  7. 7. このような問題が5分で解けると<br />
  8. 8. 幸せになれると思いませんか?<br />
  9. 9. 解答例<br />
  10. 10. なぜTopcoder?<br />実際にコードを書くので,コーディング技術が向上する<br />コーディング技術が上がれば,ソースをはやく書ける. シンプルに書ける!!<br />開発効率の向上!!<br />他人のソースを見ることで,いろんな発見ができる<br />もしあなたが美しい(あるいはトリッキーな)コードが飛び交う世界を知りたいと願うならそれはTopcoderに参加することで容易に実現することができる<br />http://www.itmedia.co.jp/enterprise/articles/0703/01/news013.html<br />ただ,トリッキーすぎるソースもある…<br />業務プログラムにFizzBuzzを1行で書くようなプログラムはいらない<br />プログラムの実行時間やメモリ使用量などに気を使えるようになる<br />
  11. 11. Topcoderに参加するために<br />登録しなくてはいけない<br />http://mainly-coding.blogspot.com/2010/02/topcoder.html<br />使用言語はJavaがおすすめ<br />C++は自由度が高すぎて,難しい<br />ライブラリが充実<br />特に文字列処理が素敵<br />文字列 数字の相互変換とか胸熱<br />基数変換も出来ちゃう<br />例外から,エラーを推測しやすい<br />Eclipse + EclipseCoder(プラグイン)がオススメ<br />http://fornwall.net/eclipsecoder/<br />
  12. 12. それ,Javaでもできるよ?<br />
  13. 13. Javaのススメ (1)<br />文字列 “aaa,bbb,ccc” を {“aaa”, “bbb”, “ccc”} とパーズしたい<br />phpなら explode(‘,’, “aaa,bbb,ccc”);<br />String[] str_ary = “aaa,bbb,ccc”.split(“,”);<br />文字列“100034” を変数intvalに格納したい<br />phpなら $val = intval(“100034”);<br />intval = Integer.parseInt(“100034”);<br />10進数 26 を 16進数に変換したい<br />phpならdechex(26);<br />Integer.toString(26, 16); //val, radix … 1a !!<br />
  14. 14. それ,PHPじゃあできないよ?<br />
  15. 15. Javaのススメ (2)<br />数字 17 を18進数に基数変換する<br />Integer.parseInt(17, 18); // h!!<br />と思ったら, base_convert($number, $frombase, $tobase)があった…<br />php恐るべし…<br />じゃ,じゃあ 100000000000000000 * 2の値は?<br />new BigInteger(“100000000000000000”).multiply(new BigInteger(“2”)); // 200000000000000000 …!!<br />任意精度の演算はphpにはできませんよね<br />
  16. 16. ほらね! Javaは出来る子!<br />
  17. 17. まとめ<br />Topcoderに参加すると,開発効率が向上する!!<br />シンプルなソースが書け,可読性が上がる!!<br />Topcoderの参加にはJavaがおすすめ<br />基本,PHPで書けるソースは書ける<br />Javaは出来る子<br />
  18. 18. おしまい<br />以上,ご清聴ありがとうございました<br />

×