Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.

Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.

Like this presentation? Why not share!

- Lessons from Testing by Jon Jagger 611 views
- c++ programming Unit 4 operators by Aakash Kumar 499 views
- c++ programming Unit 3 variables,da... by Aakash Kumar 995 views
- Brand Communications in a Social World by Neville Hobson 3461 views
- DeCaro Seller Presentation by Jeff Rhoades 189 views
- Hadoop in a Box by Tim Lossen 3748 views

678 views

619 views

619 views

Published on

You can find the video of me giving the talk on this here (in Chinese): http://v.youku.com/v_show/id_XMzI3OTI1MDQw.html

I did the talk in English as well, but there's no video online.

No Downloads

Total views

678

On SlideShare

0

From Embeds

0

Number of Embeds

1

Shares

0

Downloads

13

Comments

0

Likes

4

No embeds

No notes for slide

- 1. Programming Exercises Terry Yin
- 2. Who am I? 2
- 3. Why Programming Exercises? 3
- 4. 4
- 5. Quality vs. Quantity 5
- 6. Gamiﬁcation 6
- 7. Question Does software company need to train programmers? 7
- 8. Leonhard Euler Dojo vs. 8
- 9. What is ProjectEuler.net? 9
- 10. ProjectEuler.net "Project Euler exists to encourage, challenge, and develop the skills and enjoyment of anyone with an interest in the fascinating world of mathematics." • Project Euler is a series of challenging mathematical/computer programming problems that requires more than just mathematical insights to solve. 10
- 11. ProjectEuler.net 11
- 12. ProjectEuler.net 12
- 13. Expectations Mathematics lution implementing So rfor mance co d ing Hig h pe So lving problem ind ivi dually 13
- 14. Example: Quick & Dirty Once you solved a problem, you are entitled to join the forum for this problem.You can share your solution with the other people who have also solved it. And the post usually start with this sentence:! Good coding habit? 14
- 15. Another Example 15
- 16. int i, j, k, n, sum;! int factorial[10000];! " • It’s too simple for • • Java, Ruby or Python, for which they can handle big numbers by default." So let’s look at C/C++." Real code copied from the forum. int* getfactorial(int n)! {! factorial[0] = 1;! k = 0;! for(i = 2; i <= n; i++)! {! for(j = 0; j <= k; j++)! factorial[j] *= i;! for(j = 0; j <= k; j++)! {! if(factorial[j] >= 10)! {! factorial[j+1] += (factorial[j] - (factorial[j] % 10)) / 10;! factorial[j] = factorial[j] % 10;! if(j == k)! k++;! }! }! }! return factorial;! }! " int getsum(int* array, int k)! {! sum = 0;! for(i = 0; i <= k; i++)! sum += array[i];! return sum;! }! " int main()! {! int* factorial = getfactorial(n);! sum = getsum(factorial, k);! cout << "nThe sum of the digits of " << n << "! is " << sum << ".n";! return 0;! 16 }!
- 17. 17
- 18. Big number again. Ha ha, I did that before! Let me reuse it... 18
- 19. #include<iostream>! " using namespace std;! " int i, j, k, n, sum;! int factorial[10000];! " Why the big number is named ‘factorial’ in my previous implementation? int* getfactorial(int n)! {! factorial[0] = 1;! k = 0;! for(i = 2; i <= n; i++)! {! for(j = 0; j <= k; j++)! factorial[j] *= i;! for(j = 0; j <= k; j++)! {! if(factorial[j] >= 10)! {! factorial[j+1] += (factorial[j] - (factorial[j] % 10)) / 10;! factorial[j] = factorial[j] % 10;! if(j == k)! k++;! }! }! }! return factorial;! } Where’s the code for big number? 19
- 20. #include <stdio.h> " #define NUMB 120 #define SIZE 1000000000 " OK, too hard to reuse. It’s not that hard to invent the wheel again. // 9 * 120 = 1080 total digits. // 9 digit numbers int main() { int i = 0; int j = 0; int bigNum1[NUMB]; int bigNum2[NUMB]; int bigNum3[NUMB]; int counter = 0; " " " " } for (i = 0; bigNum1 = bigNum2 = bigNum3 = } i < NUMB; i++) { 0; 0; 0; bigNum1[0] = 1; bigNum2[0] = 1; counter = 2; i = 0; while (i == 0) { counter++; for (j = 0; j < NUMB; j++) { bigNum3[j] = bigNum2[j] + bigNum1[j]; } for (j = 0; j < NUMB-1; j++) { while (bigNum3[j] >= SIZE) { bigNum3[j] -= SIZE; bigNum3[j+1]++; } } if (bigNum3[111] >= 1) break; for (j = 0; j < NUMB; j++) { bigNum1[j] = bigNum2[j]; bigNum2[j] = bigNum3[j]; } } printf("n"); printf("P025 answer = %u", counter); 20
- 21. s ng exercise i oblem so lv Pr tant skills ver y impor ✓ Train inter view s ten use d a Of ✓ ques tions n skills in i ly also tra ✓ Probab able co de, n ng maintai maki a little. •Don’t do it before bed time... 21
- 22. What is Cyber Dojo? 22
- 23. 23
- 24. 24
- 25. 25
- 26. RED - GREEN - REFACTOR 26
- 27. Functional Test Integration Test Unit Test 27
- 28. 28
- 29. 29
- 30. 30
- 31. Refactoring Dojo 31
- 32. Code Retreat A day-long practice-intensive event for programmers, ! popularized by Corey Haines. ✓ ✓ ✓ ✓ ✓ ✓ ✓ 32
- 33. Which One Do You Prefer? 33
- 34. Poker Hands 34
- 35. Poker Hands Kata 35
- 36. Poker Hands in ProjectEuler • This is not a very hard problem to solve, • comparing to most of the problems listed in ProjectEuler.net" But it’s hard to solve it without bugs if you don’t have unit tests." • Problem 54 in projectEuler.net 36
- 37. Example: Complicated Transaction 37
- 38. Why Did I Do It Right With Only One Try? 38
- 39. TEST(poker_hand, comparing){ CHECK(pokerHand("4H 5C 6S 7S TD")< pokerHand("2C 3S 7S 8D KD")); CHECK(!(pokerHand("4H 5C 6S 7S KD")< pokerHand("2C 3S 7S 8D TD"))); CHECK(pokerHand("4H 5C 6S 7S KD")> pokerHand("2C 3S 7S 8D TD")); } TEST(poker_hand, compare_cards){ CHECK(pokerHand("3H 5C 6S 7S 8D")< pokerHand("4H 5C 6S 7S 9D")); CHECK(pokerHand("3H 5C 6S 7S 9D")< pokerHand("4H 5C 6S 7S TD")); CHECK(pokerHand("3H 5C 6S 7S TD")< pokerHand("4H 5C 6S 7S JD")); CHECK(pokerHand("3H 5C 6S 7S JD")< pokerHand("4H 5C 6S 7S QD")); CHECK(pokerHand("3H 5C 6S 7S QD")< pokerHand("4H 5C 6S 7S KD")); CHECK(pokerHand("3H 5C 6S 7S KD")< pokerHand("4H 5C 6S 7S AD")); } TEST(poker_hand, compare_high_cards_2nd){ CHECK(pokerHand("3H 5C 6S 7S 9D")< pokerHand("3H 5C 6S 8S 9D")); } TEST(poker_hand, compare_high_cards_3nd_4th_5th){ CHECK(pokerHand("3H 5C 6S 8S 9D")< pokerHand("3H 5C 7S 8S 9D")); CHECK(pokerHand("3H 4C 7S 8S 9D")< pokerHand("3H 5C 7S 8S 9D")); CHECK(pokerHand("2H 5C 7S 8S 9D")< pokerHand("3H 5C 7S 8S 9D")); } TEST(poker_hand, compare_high_card_and_one_pair){ CHECK(pokerHand("3H 5C 6S 8S 9D")< pokerHand("3H 5C 7S 8S 8D")); } TEST(poker_hand, compare_one_pairs){ CHECK(pokerHand("3H 5C 6S 9S 9D")> pokerHand("3H 5C 7S 8S 8D")); CHECK(pokerHand("5C 6S 9S 9D KD")> pokerHand("5C 7S 8S 8D AD")); CHECK(pokerHand("5C 6S 9S 9D KD")< pokerHand("5C 7S 9S 9D AD")); } " ... 39
- 40. Do deliberate exercises. Alone and with the others. Always use good practices. Have fun. 40

No public clipboards found for this slide

×
### Save the most important slides with Clipping

Clipping is a handy way to collect and organize the most important slides from a presentation. You can keep your great finds in clipboards organized around topics.

Be the first to comment