Wednesday, August 31, 2016

CSS - responsive background image

August 31, 2016

Spent over 3+ hours to work on the research on CSS - responsive background image. Take time to learn CSS and enjoy the workout.

Learn to design a nice menu page with header and footer, with responsive background image, it is a fun journey. How to make it pragmatic solution? Julia has her own journey recently.

Step 1:
Study the idea to design CSS -

https://www.smashingmagazine.com/2013/07/simple-responsive-images-with-css-background-images/ 

use a span element, and set padding top to aspect ratio of image -

Step 2: box model issues - footer is cut off, and background image is cut off on mobile devices.

1. Read stackoverflow article to address the issues -

http://stackoverflow.com/questions/8916148/ipad-iphone-full-page-background-image-shows-cut-off-screen-shot-link-includ

https://dev.opera.com/articles/an-introduction-to-meta-viewport-and-viewport/

2. study the blogs:

How div container behaves - box model -

http://stackoverflow.com/questions/9061520/auto-height-on-parent-container-with-absolute-fixed-children

problem:  here is the website:
http://jsfiddle.net/dPCky/

Here is the solution blog:
http://jsfiddle.net/blowsie/dPCky/1/

http://www.gsmarena.com/lg_nexus_5-5705.php

The lesson Julia learned is that body is the container - root of DOM tree. The height of body should be bigger than inside elments' height. Otherwise, footer is missing since it is out of box of DOM element - body.

Editorial Notes:
Learn how to search github more often:
1. CSS reading blog:
https://github.com/YuanXiaosong/Front-End-Interview

A small research on HackerRank - seek excellence

August 30, 2016

  Go over HackerRank world code sprint lead board, from ranking 230 to 430, go over one by one, and see how Julia can make it in short future. To be one of them, what is missing, what should learn from those people.

  From different backgrounds, computer professors, Google employees, Microsoft employees, and a lot of others, university students. But, most of them attended more than 4 contests, and showed strong interest in things:

  1. Some of them take Coursera courses - More than 10 of courses
  2. Some of them document their HackerRank contests on Linkedin profile.
  3. Some of them are excellent coding, one of them finishes Leetcode over 200 questions.
     Julia just forked solution in the next minute, will study the code.
  4. Some of them are from Intel, Intuit, Cisco, etc.
      Read code, study styles, that is Julia's favorite thing to do.

  Julia has to take into consideration, work on difficult level algorithm on HackerRank. She prefers to stay in easy, medium level up to August 31, 2016.

Blogs to read:

1. practice, drills, strategies - a computer science course to help
https://cs.illinois.edu/news/illinois-team-advances-icpc-world-finals
http://goo.gl/ZdJ8C0

2. https://algo.is/
competitive programming course

https://sites.google.com/site/stevenhalim/

Free download - version 1
http://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/cp1.pdf

http://linc.nus.edu.sg/search~S16?/aVerdu%2C+Elena./averdu+elena/-3%2C-1%2C0%2CB/frameset&FF=averdu+elena&1%2C1%2C

Julia is looking for a book talking about suffix array etc. advanced data structure. She found on today.

2B:
http://www.stanford.edu/~liszt90/

Interview:
https://www.youtube.com/watch?v=tZRWUesgqFc&feature=youtu.be

2C: questions and answers about practicing:
https://www.quora.com/profile/Bohdan-Pryshchenko

2. Top 50 - blogs about programming competition:
http://sd-invol.github.io/Archives/
http://sd-invol.github.io/
http://sd-invol.github.io/2015/02/14/Palindromic-tree/

Talk about algorithms - in contest - SRM641 - ?
http://sd-invol.github.io/2015/01/10/Topcoder-SRM-641-650/

SRM
https://github.com/jianminchen/TopCoder

3. Read the algorithm  - enjoy time to read
https://threads-iiith.quora.com/

Tutorial on Trie and example problems

4. Look into those contests the contestant chose to take part in - anything interesting?

26 gold medals - read code first
https://www.hackerrank.com/rantd

5. Read one algorithm first:  Excellent blog about algorithm - great sharing!

https://aleigorithms.wordpress.com/

https://aleigorithms.wordpress.com/2016/03/11/hfcq2016-problem-analysis/

6.  Choose one of algorithms to work on this week:
http://basicjahid.blogspot.ca/search/label/Algorithm%20Tutorials

7. MCSD programming in C#
https://www.microsoft.com/en-us/learning/exam-70-483.aspx

Monday, August 29, 2016

Beautiful 3 set - code study

August 29, 2016

Plan to work on difficult level algorithm - world code sprint #6. Plan to work on world code sprint some day, be able to solve difficult/ advanced algorithm.

https://www.hackerrank.com/contests/world-codesprint-6/challenges/beautiful-3-set

Will come back very soon to work on this algorithm.


Sunday, August 28, 2016

C# StringBuilder Class - study

August 28, 2016

Work on C# StringBuilder class APIs.

https://msdn.microsoft.com/en-us/library/system.text.stringbuilder(v=vs.110).aspx

Will work on the APIs 30 minutes a time. Try to memorize all of them, understand the design in detail: function signatures, overload, optional arguments etc.


Bonetrousle - HackerRank world code sprint #6 - Time complexity

August 28, 2016

Worked on the algorithm over 3 hours, Bonetrousle. HackerRank code sprint #6.

 Julia started to train herself to get smart on algorithm problem solving - contest level. First and big lesson is to put the time complexity analysis first - she experienced the pain and valued the lesson she learned through 3+ hours.

 Editorial notes from HackerRank:

https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle/editorial

Will work on this blog later!

Come back on Sept. 1, 11:15pm.

The problem is about loops, and let us work on the example used in the editorial notes:

N = 15, K = 8, B =3, in other words, find 3 distinct numbers from set {1, 2, ..., 8}, and the sum is 15.

First idea: brute force one 
Brute force, 3 number, each one is chosen from 1-8, 3 time, then, simple combinatorics: 8 * 7 * 6, K (K-1)(K-2), , the order does not matter, so it is should C(8,3).

As we know, N < 10^18, K<=10^18, so, Julia, you like to make any points, try to avoid any brute force solution like the above.

Second idea: How low it can be? 
Find B numbers, as we know, from the example,
N = 15, K = 8, B = 3, there are more than 1 solution.

But, there is one definitely taking minimum time. That is to find maximum number in B number set first, and it takes O(1) time. Then, in decreasing order, find one by one. The total time can be  small as O(B).

Simple math, we can analyze first if N is in the range of minimum value and maximum value range first.

if B > K, not possible;

Assuming B <= K,
Minimum value = 1 + 2 +... +B,
Maximum value = K + (K-1) + (K-B+1)




C# string class - API study

August 28, 2016

Previous blog about string class study for C#, Java, JavaScript, C++:

http://juliachencoding.blogspot.ca/2016/07/c-c-javascript-java-string.html

Go over all APIs in string class - C# programming language:

https://msdn.microsoft.com/en-us/library/system.string_methods(v=vs.110).aspx

40 APIs - Go over it 30 minutes a time - start to memorize them: function signature etc.

Clone
Compare
CompareTo
Concat
Contains
Copy
CopyTo
EndsWith
Equals
Format

GetEnumerator
GetHashCode
GetType
GetTypeCode
IndexOf -        (8 overloaded version)
IndexOfAny    (3 overloaded version)
Insert
Intern
IsInterned
IsInterned

IsNormalized
IsNullOrWhiteSpace
Join (5 overload)
LastIndexOf (8 overloaded version)
Normalize
PadLeft
PadRight
Remove
Replace
Split (6 overloaded version)

StartsWith (3 version)
Substring
ToCharArray
ToLower
ToLowerInvariant
ToString
ToUpper
ToUpperInvariant
Trim
TrimEnd

TrimStart








Bonetrousle - HackerRank world code sprint #6 - code study

August 28, 2016


Study 5+ C# submission code, put some notes here as well.

1. Use Queue, using structure, excellent code to study -
C# submission to study.

 rank before 190/ 5332




Great workout using Queue, Julia came out this idea through practice, but she could not write down code. She tried to write recursive function.

2. a while loop, less than 40 lines code
C# submission

rank before 200/ 5332, score around 250/380

3. C# submission

4. C# submission

5. Great code! C# submission


rank in range of 270 - 300/ 5332 participants (score in range of 

180- 200/380)

Time to go over C# string class: 


C# string class join method



Motivation talk:


work hard! 

Julia ranks 1112 on world code sprint #6. If she can work out the algorithm - Bonetrousle, based on her current score is 100, she can score another 50, from score of 100 to 150, then, she can get into top 1100 to top 550 - 650 ranking. 

Bonetrousle - HackerRank world code sprint #6 - Practice 3

August 28, 2016


Practice 3:

https://gist.github.com/jianminchen/da8be63104ef404e82733669a3d60370

Highlights of practice:
1. Add hashset to filter out the boxes

Statistics:

Score 0 out of 50.


Bonetrousle - HackerRank world code sprint #6 - Practice 2

August 28, 2016

Problem statement:
https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle


Try to make any progress on timeout issue, wrong answers issue. Add additional checking to shorten the time to do processing:

https://gist.github.com/jianminchen/ff048969b7b69948eb3dc4db59119591

Highlights of practice: 
1. line 113

Statistics:
score 0 out of 50 points.

Bonetrousle - HackerRank world code sprint #6 - Practice 1

August 28, 2016

Problem statement:
https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle

Julia was naive on planning, management of time, tried to solve this algorithm, without any hesitation. She tried to score any point above 0, found the idea to write code using stack, but with additional 2+ hours to review code, stayed overnight, from 12:00am - 2:45am, a brute force solution. She did not make any (over 10 test cases: 5+ wrong answer, 4+ time out). So, she wrote down the experience to celebrate her weekend, over middle night struggling with an algorithm.

Share some statistics of world code sprint #6 workout:
Current Rank: 1112 - score 100/ 380 (score first 4 algorithms full score)

First practice:

Use stack, brute force, each box has two choice, join or skip. She tried to implement the brute force solution first, and then, she recalled the previous work on algorithm Leetcode: phone number:

https://gist.github.com/jianminchen/872bf70039fa8c61ff208b34a591c8ec

Only pass the test cases provided in the problem description.

https://gist.github.com/jianminchen/e3fc7d23a62274b207ddc41a06030cd4

Statistics:
score 0 out of 50 points.

Brute facts:
A brute force solution does not score any points - even pass the basic test case - test case 1.

Actionable Item:

Write a blog about this algorithm, document the importance of time complexity analysis; how to plan to spend time to work on a solution.

http://juliachencoding.blogspot.ca/2016/08/bonetrousle-hackerrank-world-code_75.html

Abbreviation - HackerRank world code sprint #6

August 26, 2016

Problem statement:
https://www.hackerrank.com/contests/world-codesprint-6/challenges/abbr


C# practice:
https://gist.github.com/jianminchen/12e7c74b57c5780a069b0e9df66f77c3

Study editorial notes about the algorithm, using dynamic programming, a DP solution.

Study other submissions through HackerRank.

Saturday, August 27, 2016

Blog writing - aiming for good writing talent

August 27, 2016

  It is a nice journey to write a lot of blogs in last 12 months. Julia learns to handle a lot of stress, spend a lot of time to proofread, feel headache about the content, organization of ideas etc. Sometimes, she notice that she writes something she does not know, she does not have best solution, since she is still developing, in the cooking process. Or she just pushes herself, just do it. It may be an interesting topic, start first, come back to work on.

  What is about good writing talent? It is not just English writing, also about communication skills, inspiration to share, good language skills.
  A true short story about her personal experience:

  She went through 3 IELTS test in 2008 from June to August in order to score 2 of 7/ 9 on English (reading, writing, speaking, listening) - apply Canadian immigration. She did 3 tests in 3 months, because Fort Lauderdale test center only gives one test a month. She even filed an appeal against the scoring result after 2nd test, costed her $160 dollars, same amount as the test fee. She practiced old tests in the time range of 3 month - 3 hours for one test, she did again and again.

More detail about IELTS:
http://www.ielts-blog.com/ielts-results-competition-winners-2008/
  End of the true short story.

  And then, in 2015, Julia learned that in order to
get best result of
build up some writing talent continuously in long term,
grow up from a junior software developer to talent programmer,
she has to write down her coding practice everyday, speak out her unique experience, ideas/ practice log, show her progression, weakness, highlights, one step a time, one practice a time. There is no way to avoid hard work, embrace it. She learns from her favorite tennis sports. 

  So, she try to push herself to work on writing. Being a good software programmer, writing code is much more challenging. 

Here are some ideas:

  From blog - how to improve your blog writing skills 

 1. Make writing a habit
As the old saying goes: Practice Makes Perfect.
 2. Get back to basics
 3. Proofread your articles
 4. Remove the filler - tighten your article and make it easier to read
 5. Evaluate your writing
 6. Be an avid reader
 passionate writer should be a passionate reader.
 7. Establish good writing habits

Google search keyword:
blog writing help English writing

Second blog - Improve writing skills


Notes:

1. Brush up on the basics

2. Write like it's your job
Keep practising, writing is no exception.
diminish your fear of the blank page (or blinking cursor)
develop a unique style
even if nobody reads it, keep writing.

3. Read like it's Your Job
reading on a regular basis
pay attention to sentence structure, word choice, and how the material flows.

4. Find a writing partner
a solitary activity - writing?
cast an eye over your work?
spot mistakes that you may overlooked

5. Join a workshop or take a night class - not applicable right now

6. Dissect writing that you admire

7. Imitate writers you admire
use humour to spice up dry topics?
use pop culture references to make their work entertaining and useful?

8. Remember that outlines are your friend - outline?
solid outline plan? When, who, what, where, why, how? 7 W

9. Edit your work ruthlessly

be your own harshest critic?
editing is a tough skill to learn for beginner?
writing or rewriting?
the cold, hard eye of an editor will serve you well?
discipline to eliminate extraneous words?
resist the temptation to wax lyrically and get to the point?

10. Accept that first draft are almost always crap

write down on paper first, clean up later. Iterative process. Do not beat yourself up.

11. Find a good patient editor

12. Eliminate unnecessary words

13. Take a stroll down memory lane

14. Don't be afraid to say what you think

15. Do your research

16. Don't take weeks to finish a post

Actionable items:

Try 3 ideas first:

14. Don't be afraid to say what you think
testimony:
Share personal IELTS test experience in 2008 


Html, CSS style guideline study

August 27, 2016

 Always work on code guidelines first, then write more code everyday.

 Plan to spend 2+ hours to study html, CSS code guide.

http://codeguide.bootcss.com/

https://google.github.io/styleguide/htmlcssguide.xml



Java Design Pattern - code study

August 27, 2016

 Plan to spend 3+ hours to go over some Java Design Pattern.

https://github.com/jianminchen/java-design-patterns


Programming Principles - study

August 27, 2016

 Through leetcode practice Algorithm 125 in August 2015, Julia noticed that she still stumbled badly on easy question. Because ..., wild guess?:-) she does not have good understanding of programming principles.

 She wrote blogs about the practice of Leetcode 125, 11 practice, through continuously hard word through 3 days, she finally came into realization of best solution - extract one more function  called removed noise. She read the code written in C++ in her github forked solution more than 6 months ago. She could not find the best solution through google/ bing, and she studied stackoverflow related articles more than 2 hours, but she just did not come out the idea.

  Apply Separation of concerns principle? optimal solution to Leetcode 125. 

 The above is enough for her to dedicate herself to read more about programming principles.

Programming Principles

https://github.com/jianminchen/programming-principles

 Plan to work on reading 3+ hours, write down some notes here.


Thursday, August 25, 2016

CSS - Responsive background image

August 31, 2016

 Spent over 10+ hours to work on responsive background image issues. So, Julia likes to spend time to serve herself better using CSS.

Google keyword search:

 css responsive background image


Code study: Leetcode blogs

August 25, 2016

 Compile a list of Leetcode blogs to read, 10 minutes a time, look for excellence through blogs:

1. http://bangbingsyb.blogspot.ca/   (Microsoft, C++)
2. http://fisherlei.blogspot.ca/          (facebook, blogs, C++)

C++ solutions in github:
1. https://github.com/jianminchen/leetcode-1 (C++, ex-amazoner)
2. https://github.com/liaoxl/leetcode/tree/master/code  (Neteaze, C++, China)
3. https://github.com/jianminchen/Leetcode-13  (UBC, C++)
4. https://github.com/jianminchen/myleetcode (China, Microsoft, C++)
5. https://github.com/jianminchen/LeetCode-IIII  (C++, HackerRank Silver medal)
6. Inside github, search HackerRank, find this: (MSFT, top performer, with time spent for each algorithm)
https://github.com/jianminchen/LeetCode-17

Java solutions in github:
1.  https://github.com/jianminchen/LeetCode-Java-Solutions
2.  https://github.com/jianminchen/LeetCode-Java-Solutions  (Java, computer PH.D.)
3.  https://github.com/jianminchen/LeetCode-Sol-Res  (Nine chapter etc., Java)
4.  https://github.com/jianminchen/leetcode-3   (Java solution, Googler)

C# solution:
1. https://github.com/jianminchen/LeetSharp
2. https://github.com/jianminchen/Qilu-leetcode
2. https://github.com/jianminchen/LeetCodeInCSharp
Motivation talk: 
1. Sometime, google, bing search do not provide best source code, so, it is time to look up github forked solutions. 

Friendly remind: 
Julia, you should use github's search - use keyword: Leetcode to find solutions - 

2. Look for optimal solution, do not miss the best solution in practice of Leetcode algorithm. Do not rush, try to go through all kinds of practices, search for great ideas out there. Get the best idea to practice. One algorithm a time. 

3. Follow more people through github, easy to fork leetcode solutions. Sometimes, it is hard to tell best code, just get some code running first, write first C# practice, and then, ideas will come, what to search, issues etc.

4. Evaluate practices (junior/middle/senior level practice), and then compare to 5-10 practices. (0-3 junior practice, 4-7 middle level, 1-2 optimal solution, senior level practice)

4. Look up stackoverflow to get more ideas, specially from high reputation/ high voted opinions, terms to know when practicing Leetcode algorithms. Try to expand the things to work on through the practice, one algorithm can bring good study about coding style. See the blog:
http://juliachencoding.blogspot.ca/2016/08/leetcode-125-valid-palindrome-summary.html


5. When practicing Leetcode questions, try to work on more through the practice. There is an idea that if you work on thoroughly on one problem a time, you may be able to solve unseen problems as well.

Actionable Items:

1. Study programming principles:
Programming principles
https://github.com/jianminchen/programming-principles









Leetcode 348: Design Tic-Tac-Toe

August 25, 2016
Problem statement:

Design a Tic-tac-toe game that is played between two players on a n x n grid.
You may assume the following rules:
  1. A move is guaranteed to be valid and is placed on an empty block.
  2. Once a winning condition is reached, no more moves is allowed.
  3. A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game.
Will work on the algorithm very soon. 

System Design: Design a URL shortening service

August 25, 2016

Problem statement:

Design a URL shortening service

  • What do you think the requirements are?
  • What is your high level design?
  • You might be asked to implement interesting portions
  • How do you test it? 
Will work on the design very soon.

1. Read the website first:  5 - 10 minutes

stackoverflow.com - how do short urls services work

2. Hired in tech website - the system design process

Step 1: Constraints and use cases
Step 2: Abstract Design

Start from step 1:

System constraints (Do you clarify?)
Use cases ( the list to satisfy?)
Scope system (agree?)

Gather requirements -> design a solution to cover them well.

Use cases:
1. Shortening:
2. Redirection:
3. Custom Url
4. Analytics
5. Automatic link expiration
6. Manual link removal
7. UI or API

And then, discuss and exchange ideas with requirements:
For example, add one more use case 4, and move 4 - 7 out of scope, not for now.

1. Shortening:
2. Redirection:
3. Custom Url
4. High availability of the system

Out of scope: 
4. Analytics
5. Automatic link expiration
6. Manual link removal
7. UI or API

Constraints: 

Top 10 shorten URL services:

Math to figure out, for example: 

15 billion new tweets in twitter, 

All shortened URLs per month: 1.5BN - 10 percent
Sites below the top 3: shorten 300M per month

1. New urls per month: 100MLN - 100 millions request to shortening
2. 
3. 
4. 
20% urls generate 80% traffic -> 1BN request per month -> 10% shortening, 90% redirection.

4. Requests per second: 400+ requests per second (40: shortens, 360: redirects)
5. 6BN urls in 5 years -
6. 500 bytes per URL (100 to 1000 characters per URL)
7. 6 bytes per hash
8. 3TBs for all urls, 36GB for all hashes (over 5 years, not 10 years)
9. how much data goes through each second?
    New data written per second: 40 *(500 + 6): 20K
10. Data read per second: 360 *506 bytes: 180K

scope the problem beautifully - it takes a while, but 15 minutes in the video, with practice, it takes 5 minutes to clear up everything.

Follow up 


Sept. 3, 2016

Spend 2 hours to watch the video, hiredintech.com, the video link is here. System design - scalability, the link is here.


Take some notes here.




Linked List Queue

Problem:
Implement a Queue using a linked list.

Will come back soon.


Array Queue

August 25, 2016

Problem statement:
Implement a Queue using a circular array.

Read circular array:
http://www.mathcs.emory.edu/~cheung/Courses/171/Syllabus/8-List/array-queue2.html

Will come back very soon!


Monday, August 22, 2016

Leetcode 125: Valid Palindrome (III)

August 22, 2016

Continue to review solutions on Leetcode 125. 

1. study code:

extract one more function - removeNoise - practice #10 

C# practice 


Great idea to extract one more function, SRP - single responsibility principle 
- make the code much more easy to follow, test, static analysis

Two tasks - put into one function - first ask if the function can be broken into two, what is the checkpoints?

Both are with time complexity O(N), N is the string length; 
Two tasks can be separated easily, task 1 can be done first. 

 1. remove noise
 2. compare chars 

Easily, combine the above 1 and 2 cases, there are 4 cases in the function to handle. 


2. use continue keyword -  practice #11

study code: 

C# practice: 

Sunday, August 21, 2016

Leetcode 125 - Valid Palindrome - Code styles study

August 21, 2016

Here is the blog with 5+ practice.

8th practice code

Summary of study: 
Go over blogs, read 2+ hours, and then, write 9th practice; Be able to find issues in 8th practice. 

9th practice

10th practice

- best solution - extract one more function called removeNoise

11th practice

Julia likes to study code style blogs to help better performance on Leetcode 125:

1. if-else discussion on stackexchange.com

2. fail fast

3. a branched arrow head antipattern

4. https://blog.codinghorror.com/flattening-arrow-code/

5. Refactoring: Book: "improving the Design of Existing Code" - if-else structure sections

6. http://programmers.stackexchange.com/questions/167607/how-can-i-reformat-my-condition-to-make-it-better?noredirect=1&lq=1

7. http://stackoverflow.com/questions/1364946/what-is-the-highest-cyclomatic-complexity-of-any-function-you-maintain-and-how

8. A lot of discussions:
http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement

9. Guard clauses

10. Try this tool - static analysis tool

Study notes:
Get some keywords for google search, or ideas to help review of function:

1. inconsistent levels of abstraction
2. prevent inclusion in if
3. two calls to one function violate DRY principle

Execution paths concern: 
1. multiple returns - avoid it
2. only return from a function in one spot  - (Good ? Bad?)
     Julia made a terrible mistake in 2 sum algorithm, about the return issue - took more than 20 minutes to find out return issue.
3. multiple return paths
4. early returns help to avoid the arrowhead anti pattern.

Readable code

1. use a flag variable to avoid giant expression/ gross if statement.
2. orthogonal ?
3. early returns help to avoid the arrowhead anti pattern.
4. flattening arrow code
5. cyclomatic complexity value - execution paths
6. reduce a module's cyclomatic complexity make code easy to test

Avoid If statement
1. replace conditions with guard clauses.
2. decompose conditional blocks into separate functions
3. convert negative checks into positive checks
4. always opportunistically return as soon as possible from the function.
5. the goal to make code more flat, scroll vertically not horizontally  

Book "code complete" about cc - cyclomatic complexity value:
If the score is:
  • 0-5 - the routine is probably fine
  • 6-10 - start to think about ways to simplify the routine
  • 10+ - break part of the routine into a second routine and call it from the first routine
Might be a good idea to write unit tests as you break up the original routine.

A quick comparison image:
Leetcode 125 8th practice vs 9th practice on the change - if conditions inside a while loop:


Continue to review solutions on Leetcode 125. (August 22, 2016)

1. study code: 
C++ code - valid palindrome

extract one more function - removeNoise - practice #10 

Julia wrote a C# version

Great idea to extract one more function, SRP - single responsibility principle 
- make the code much more easy to follow, test, static analysis

Two tasks - put into one function - think if the function is designed for more than 1 task. 
Both are with time complexity O(N), N is the string length; 
Two tasks can be separated easily, task 1 can be done first. 

 1. remove noise
 2. compare chars 

Easily, combine the above 1 and 2 cases, there are 4 cases in the function to handle. 

2. use continue keyword -  practice #11

study code: 
using continue - C++ valid palindrome

Julia wrote a C# solution




Saturday, August 20, 2016

Confidence and determination coaching - Nishikori Kei and his coach

August 20, 2016

Review Nishikori and his coach's video.
https://www.youtube.com/watch?v=LfoYUQIsrg4&feature=youtu.be

Nishikori: 
Not tall, ...

Coach's talk:
You are a little bit smaller, but ability to cover more court, quicker. Use speed to be many many advantages.

Early in the career, have a book, write down who to play with, write down strength/ weakness, why I lose, be prepared, be smart; It is not hitting a good forehand or backhand; Tennis, at the end of day, it is to find the way to win.

People interviewed you before the final match, you told that you admired Roger Federal.

First of mistake, not ready in mental to play final. Your opponent should not be your admire.  A great achievement to play final; admire Roger Federal, should be off the court.

Mentality and determination:
But, you are in my way. I do not care about what you have accomplished, prior achievements, no matter whoever is, find the way to beat the guy.

More videos to watch:
1. https://www.youtube.com/watch?v=s36vSwgn9A0
2. https://www.youtube.com/watch?v=fQBTvSqpRCI
3. https://www.youtube.com/watch?v=zMokexfhTIY
4. https://www.youtube.com/watch?v=mBluyNvnSlc
IMG - how to build a champion?

Most favorite coaching - on-court coaching:
1. https://www.youtube.com/watch?v=zfZGX_f3BOs

Coach - great motivator/ ...
2. https://www.youtube.com/watch?v=g-wKFSkHl3Q
3. https://www.youtube.com/watch?v=2REF6qaUSG4#t=93.0502
4. https://www.youtube.com/watch?v=iK6MMYnNr-M

5. Novak Djokovic
https://www.youtube.com/watch?v=9rHV9nDGHXM


Friday, August 19, 2016

Leetcode 125 - valid palindrome - 5+ practice

August 19, 2016


problem statement: 


Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

Summary of practice: 

After 2+ hours workout on coding, with  8th practice, Julia sets pragmatic goal - easy to control:
1. No nested if statement
2. No else statement
3. return early in the function 
4. work smart to work around the logic to fit in rule 1, 2, 3

Arguments of goal:
1. even if the code is written with a bug, easy to find, quick to find
2. at least more readable, aesthetic better


8th practice code: 





A table to summarize the workout:



ID Problem Practice  Summary  Statistics
1 a bug 1st practice  increment one, should decrement
2 a bug 2nd practice run time error, logic with a mistake
3 pass Leetcode online judge 3rd practice  Fix bugs in 1st and 2nd version. But code is too much with if/else if - 2 times, else if - 3 times, else - 1 time
4 pass Leetcode online judge 4th practice  Work on 3rd practice, remove else if statement if - 4 times, else - 1 time
5 5th practice  Remove extra checking in while staement (line 44) if - 4 times, else - 1 time
6 6th practice Break the rule, nested while loop, but it works better, code is more clean while - 2, if - 1 time
7 7th practice  skip left char, or skip right char or fail because unmatching pair of chars, else statement for rest if - 1 time, else if - 2 times, else - 1 time
8 8th practice Set pragmatic goal, no nested if statement, no else, based on 4th practice if - 4 times

Practice to win - have some strategy - 
1. Using nested while loops twice, 8 out of 10, no bug with excellent code. 
2. Use if, and else if 3 times, 3 out of 10, easy to create bug, hard to argue
3. Use all if, no else, no nested if, 10 out of 10. In future practices, figure out later!



9th practice: 



(after 3+ hours study on code styles, work on issues on practice #8)

9th practice C# code


5+ practices - a journey with online judge/ blog searching/ what to search after practice I - (try to find a smart person working on if/else statement)

Leetcode 125

1. Choose the study code

Leetcode 125 - write code based on this version

short function name - isalnum - very good name

a blog to read

5 practices - interest journey !

1st practice


failed static analysis - miss a bug - easy to spot --, not++

1st practice C# code

there is a bug in first writing, line 62, shoud be right--; not right++.
static analysis did not catch the bug - be careful next time.

2nd practice


2nd practice C# code

highlights of practice 2:
1. Fail to pass the online judge
2. line 24 - 27, logic and reasoning has flaws
logic with a mistake:
both are alphabetic/ number
first one is not 
else - 

should be: 
both are ok
both are failed
A is failed
B is failed
Those are 4 cases - in the specific order as well.

3rd practice

C# code 

highlights of 3rd practice:
1. Fix the bug first, add these line 59 -67 two "else if", one "else", pass online judge
2. But code "else if" from line 59 -67 can be shortened, avoidable.

4th practice


C# code

break Remove "else if" statement, make it more flat - line 60 - 65, only two if, avoid " else if" in 3rd practice.
In other words, avoid too complicated if checking

3 cases:
3 if statements:
1st if:
both are ok

Two ifs:
a is not
b is not

Good things in the 4th practice:
1. Inside 1st if statement, line 51 - 56, positive checking first (line 49), then negative.

Declare explanation variable for line 49, and line 51, make it more readable.
Good news! Julia sets pragmatic goal - easy to control - no else statement, no nested if statement.

Practice 8 based on practice 4:
https://gist.github.com/jianminchen/54200adc1b68928b46fef5a087721f57

End of Good news!

5th practice:


https://gist.github.com/jianminchen/8f9ae3839499718790180aa58965d3de

6th practice:

follow the flow of real processing - skip left/right if need, comparison failed, or continue to compare

7th practice:


Actionable Items:
1. If else is a maze, easy to make mistakes. Things can work on: 
  1. List of approaches - 
  2. Possible bugs - 
  3. What is best strategy to approach?  
  4. What can be trained on? 

Based on practice 4, work on practice 8th, and set practical goals which are easy to control, even it takes more time to write but easy to maintain/ share the code - help to reduce bugs. 


8th practice




Controllable goals: 
1. No else statement - how? practice 8, line 54 - 80, only 4 if statements (line 64, 67, 75, 78)
2. No nested if statement - declare short explanation variable, make a few of conditions checking. (two if statements, line 64 go first, even it is negative checking, line 67 after line 64)
3. let return case go first
4. hide else relationship - but with more careful static analysis 

Things to break:
1. Always check is True, no negative checking
2. Extra variable for explanation, summarize
3. Scope of variable - not ideal case
4. Avoid nested while loop, let outside while take care of business
5. ...

Problem with practice #8:   (After 3+ hour study and study
 http://juliachencoding.blogspot.ca/2016/08/leetcode-125-valid-palindrome-summary.html )
study guard clauses, 
http://www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html

1. first, the style does not match guard clauses style, 
    All guard clauses should stay together, and before the clause.

    Put line 75 if, line 78 if into guard clauses, and then, before the normal business:
    line 67, if(isComparable && isSame)

2. 4 if conditions are not the same level (not same abstraction level!)
     1st if:  isCompare &&  !isSame
     2nd if: isCompare && isSame 
     3rd if:  !arr[0]
     4rd if:  !arr[1]

 1st, 3rd, 4rd if are guard clause
 put the idea in next practice: 9th practice
     1st  if:  !isCompare && !arr[0]
     2nd if: !isCompare && !arr[1]
     3rd  if:  isCompare  && !isSame
     4th  if:  isCompare &&  isSame


Practice #9:



9th practice: (after 3+ hours study on code styles, work on issues on practice #8)
https://gist.github.com/jianminchen/ce79fbd9c3c97b628d8857f55e684aab

Editorial notes:
It is time consuming messing with if/else statement. 
Facts:
1. 2+ hours programming workout
2. Over 5 practice to experience up and downs, 
3. Hard to please a programmer if the code is working but take time to reasoning. 
4. Celebrate 2+ hour workout on Leetcode 125 - read

De Morgan's laws


Here is the table of 8 practice: 


ID Problem Practice  Summary  Statistics
1 a bug 1st practice  increment one, mistake: decrement  one
2 a bug 2nd practice run time error, logic with a mistake
3 pass Leetcode online judge 3rd practice  Fix bugs in 1st and 2nd version. But code is too much with if/else if - 2 times, else if - 3 times, else - 1 time
4 pass Leetcode online judge 4th practice  Work on 3rd practice, remove else if statement if - 4 times, else - 1 time
5 5th practice  Remove extra checking in while statement (line 44) if - 4 times, else - 1 time
6 6th practice Break the rule, nested while loop, but it works better, code is more clean while - 2, if - 1 time
7 7th practice  skip left char, or skip right char or fail because unmatching pair of chars, else statement for rest if - 1 time, else if - 2 times, else - 1 time
8 8th practice Set pragmatic goal, no nested if statement, no else, based on 4th practice if - 4 times

Practice to win - have some strategy - 
1. Using nested while loops twice, 8 out of 10, no bug with excellent code. 
2. Use if, and else if 3 times, 3 out of 10, easy to create bug, hard to argue
3. Use all if, no else, no nested if, 10 out of 10. In future practices, figure out!

Google search and find some related topic:
if/else statement - 
1. http://programmers.stackexchange.com/questions/206816/clarification-of-avoid-if-else-advice