Bài viết

Khai giảng CodeGym Career- Đào tạo Full-stack Developer trong 6 tháng

Sáng ngày 24/04 diễn ra buổi Orientation cho những học viên đầu tiên của CodeGym Career, học viên được nghe chia sẻ về lộ trình học tập tại CodeGym; thống nhất và cam kết về nguyên tắc làm việc; tìm hiểu và truy cập các tài nguyên, công cụ hỗ trợ học tập tại CodeGym. Anh Nguyễn Khắc Nhật – Giám đốc CodeGym chia sẻ: “CodeGym Career đào tạo Full-stack Developer trong lộ trình 6 tháng, học viên tốt nghiệp khoá học có thể làm được nhiều vị trí Front-end Dev, Back-end Dev, Full- stack Dev và Mobile Dev. Thời gian học khá ngắn nên đòi hỏi học viên cần phải nỗ lực và tập trung, trau dồi kỹ năng tự học để kết thúc 6 tháng, không những học được thành thạo một ngôn ngữ mà còn biết cách để học được những ngôn ngữ  lập trình khác vì công nghệ luôn cập nhật.”

Khai trương CodeGym - Hệ thống Đào tạo Lập trình Toàn diện

Anh Nguyễn Khắc Nhật – Giám đốc CodeGym trao đổi trong buổi khai giảng Codegym Carrer

Cũng trong buổi Orientation, học viên được hiểu rõ hơn về mô hình đào tạo, nhận thức đúng vai trò và cam kết cá nhân với khoá học. Tham gia chương trình huấn luyện đặc biệt này, người học sẽ được trở thành thực tập sinh ngay từ ngày đầu tiên, tham gia các công việc học tập và làm dự án 8 tiếng/1 ngày để xây dựng thái độ đúng đắn đối với nghề lập trình, rèn luyện kĩ năng làm việc song song với xây dựng năng lực kĩ thuật chuyên sâu để sẵn sàng tham gia vào dự án phát triển sản phẩm ngay khi hoàn thành chương trình huấn luyện khắt khe liên tục trong vòng 6 tháng.

 

Danh sách các Kata dành cho CodingDojo

Kata là một bài tập (bài toán, thử thách, v.v.) về lập trình đi kèm các quy tắc được lựa chọn và thiết kế để giúp các thành viên tham gia buổi Coding Dojo sử dụng để cải thiện kỹ năng\kỹ thuật cụ thể nào đó của lập trình: TDD, Pair-Programming, Unit Testing, Refactoring, v.v..

Bạn không nên chọn một bài toán bất kỳ nào đó trong lập trình để làm một Kata. Thay vào đó bạn nên chọn từ danh sách các bài đã được tổng kết ở một số trang web nổi tiếng về Coding Dojo như:

Dưới đây là những bài Kata đã được CodeGym Premium lựa chọn từ CodingDojo.org và dịch ra tiếng Việt:

  1. Kata FizzBuzz
  2. Kata RomanNumerals
  3. Kata RomanCalculator
  4. Kata Minesweeper
  5. Kata Bowling
  6. Kata PokerHands
  7. Kata YahtZee
  8. Kata DeepFirstSearch
  9. Kata WordWrap
  10. Kata Tennis
  11. Kata NumberToLCD
  12. Kata GameOfLife
  13. Kata DictionaryReplacer
  14. Kata FooBarQix
  15. Kata NumbersInWords
  16. Kata Potter

Kata GameOfLife

Giới thiệu kata :

Game Of Life là một bài toán rất thú vị của Conway, một nhà Toán học người Anh. Bài toán của ông đơn giản nhưng khi triển khai nó bạn sẽ được những kết quả thật tuyệt vời như cuộc sống đang diễn ra xung quanh ta vậy.

Mô tả bài toán :

Giả thiết thế giới chúng ta đang sống là một không gian n chiều (để đơn giản ta dùng không gian hai chiều). Ví dụ:

Game of life không gian đa chiều

Mỗi sự sống trong thế giới này là một ô (cell) nhỏ bé và chịu những quy tắc sống còn như sau:

  • Ô đang SỐNG mà xung quanh nó (kề sát) có ít hơn 2 ô hàng xóm sống thì sẽ CHẾT (Ô màu vàng)

Game of life hai ô đang sống

  • Ô đang SỐNG mà xung quanh nó có nhiều hơn 3 ô hàng xóm sống thì sẽ CHẾT. (Ô màu vàng)

Game of life ba ô đang sống

  • Ô đang SỐNG mà xung quanh có 2 hoặc 3 ô hàng xóm sống thì tiếp tục SỐNG. (Ô màu vàng)

Game of life 2 hoăc 3 ô đang sống

  • Ô đang CHẾT mà xung quanh có đúng 3 ô hàng xóm sống thì sẽ SỐNG lại. (Ô màu vàng)

Game of life 3 ô đang sống

Bài toán này thú vị khi khởi tạo (gieo mầm) sự sống cho thế giới này. Tức là bạn đóng vai Chúa, đặt các “hạt giống” sự sống vào thế giới này và rồi … quy luật “sinh tồn” sẽ quyết định.

Bạn có thể xem một số mẫu đơn giản và phức tạp sau đây để thấy Game Of Life thú vị thế nào:

Mẫu 1: Hạt mầm sự sống (các ô màu xanh) được gieo như sau…

Game of life hạt mầm sự sống

Và rồi… https://youtu.be/bJ_Hhh5gV4w

Mẫu 2: Hạt mầm sự sống được gieo như sau…

Game of life hạt mầm sự sống được gieo

Và rồi… https://youtu.be/nlzATno5ek8

Mẫu 3: Hạt mầm sự sống (ô màu xanh và ô màu cam) được gieo như sau…

Game of life hạt mầm sự sống được gieo theo ô màu cam

Và rồi… https://youtu.be/OlIuo4If18Y

Mẫu 4: Hạt mầm sự sống (ô màu xanh và ô màu cam) được gieo như sau…

Game of life hạt mầm sự sống được gieo

Và rồi… https://youtu.be/mhswQu_VLQk

 Nguồn Kata: http://codingdojo.org/kata/GameOfLife/

Kata NumberToLCD

Giới thiệu về Kata

Viết một chương trình hiển thị số giống kiểu màn hình LCD.

Mô tả bài toán : 

Phần 1

Viết một chương trình chuyển một số (với độ dài tùy chọn) thành kiểu hiển thị trên LCD theo mẫu sau:

             _   _       _   _  _   _   _  
          |  _|  _| |_| |_  |_   | |_| |_|  
          | |_   _|   |  _| |_|  | |_|  _|  

(mỗi chữ số được trình bày trên 3 dòng)

Chú ý: Không đọc Phần 2 trước khi làm xong Phần 1. Một mục đích của bài kata này là thực hành tái cấu trúc và thích ứng với việc yêu cầu thay đổi.

Phần 2

Thay đổi chương trình đã viết để hỗ trợ việc tùy biến hiển thị theo chiều rộng và chiều cao của số.

Ví dụ: với chiều rộng = 3 và chiều cao = 2, số 2 sẽ hiển thị như sau:

___
   |
   |
 ___
|
|___

Bài Kata này dựa vào một chương trình trên:

https://github.com/coreyhaines/kata-number-to-led

http://rubyquiz.com/quiz14.html

Bài Kata ngược lại: LCD to number

 

Nguồn Kata: http://codingdojo.org/kata/NumberToLCD/

Kata Tennis

Giới thiệu kata

Trong bài Kata này ta sẽ xây dựng một phiên bản trò chơi tennis đơn giản. Khi tạo ra bài Kata này, tác giả lấy ý tưởng từ trò tennis trên Wii và đã đơn giản hóa thành mỗi set là một trận đấu.

Cách tính điểm đơn giản như sau:

  1. Mỗi người chơi ghi được các điểm số sau: 0, 15, 30, 40
  2. Nếu người chơi đạt được điểm 40 và thắng lượt đánh hiện tại, người đó sẽ thắng trận đấu này, tuy nhiên có thêm luật cho các trường hợp đặc biệt.
  3. Nếu cả hai người chơi đều được 40 điểm thì hai người hòa (deuce).
    1. Nếu trận đấu đang hòa, người thắng lượt sau sẽ được gọi là “người chơi có lợi thế (advantage)” và được phát bóng.
    2. Nếu “người chơi có lợi thế (advantage)” thắng lượt chơi sau thì sẽ thắng cả trận đấu.
    3. Nếu “người chơi có lợi thế (advantage)” không thắng lượt chơi sau thì hai người lại hòa.

Cách tính điểm được mô tả trên Wikipedia:

  1. Một người thắng trò chơi khi ghi được ít nhất 4 điểm và nhiều hơn đối thủ ít nhất 2 điểm.
  2. Trong tennis, tỉ số được gọi theo cách riêng:
Số điểm Cách gọi
0 “love”
1 “15”
2 “30”
3 “40”
  1. Nếu hai người chơi đều đạt được ít nhất 3 điểm (“40”) và có số điểm bằng nhau, tỉ số được gọi là “hòa”.
  2. Nếu khi hai người đang hòa, một người thắng nhiều hơn 1 điểm so với đối thủ thì tỉ số của trò chơi được gọi là người chơi (nhiều điểm hơn) hoặc “người chơi có lợi thế (advantage)”.

 

Nguồn Kata: http://codingdojo.org/kata/Tennis/

Kata WordWrap

Giới thiệu Kata

Bài Kata này được lấy từ blog của Robert Martin cùng với một lời giải viết bằng Java.

Mô tả bài toán

Bạn hãy viết một lớp có tên là Wrapper, lớp này có phương thức wrap nhận vào 2 đối số: một chuỗi (string) và một số nguyên. Phương thức này trả về chuỗi được với những ký tự xuống dòng chèn được chèn đúng chỗ để đảm bảo không dòng nào dài hơn số cột được chỉ định bởi tham số thứ hai truyền vào phương thức. Bạn cần đảm bảo việc ngắt dòng hợp lý sao cho các từ không bị bẻ giữ chừng.

Phương thức này giống như một bộ xử lý văn bản, bẻ dòng bằng cách thay thế khoảng trắng cuối cùng với kí tự xuống dòng.

Các lời giải trên những ngôn ngữ khác nhau:

Các giải thuật khác nhau

PeterKofler đã làm bài Kata này vài lần bằng Java với những cách làm khác nhau. Các giải thuật làm tăng độ phức tạp của code nhưng giảm số lần thay thế. Có thể xem chi tiết các giải thuật này tại đây.

Nguồn Kata: http://codingdojo.org/kata/WordWrap/

Kata DepthFirstSearch

Giới thiệu kata

Cấp độ của Kata: Dễ

Dùng để luyện về Đệ quy

Kata liên quan: KataBreadthFirstSearch

Mô tả bài toán

Depth-first search (tìm kiếm theo chiều sâu) không chỉ là một kĩ thuật AI mà còn là một tiêu chuẩn để duyệt qua các cây (tree – được dùng phổ biến trong khoa học máy tính).

Hướng dẫn

Mức dễ nhất của depth-first search là làm theo hướng function-call stack thay vì hướng stack data structure.

Tránh triển khai một lớp như Graph, Maze hoặc Problem (dù chỉ để làm mocked interface) làm depth-first-searcher để duyệt. Thay vào đó hãy đặt câu hỏi như một “người” dùng (ví dụ: standard in/standard out hoặc theo ngôn ngữ của bạn). Ví dụ: “Các lối ra là gì?” và “Chúng ta đang ở đâu?”. Điều này sẽ tạo ra được các kiểm thử thăm dò rất thú vị. Nếu xây dựng Graph hoặc Maze bằng cách khởi tạo dữ liệu hoặc phân tích một file thì sẽ làm chậm nhóm và mất ý nghĩa của bài Kata.

Tất nhiên, bạn nên giả lập các cuộc hội thoại trong các kiểm thử đơn vị của mình. Điều này chứng tỏ rằng kiểm thử thăm dò có thể được ghi lại trong các kiểm thử tự động có khả năng lặp lại, thứ có giá trị.

Gợi ý các ca kiểm thử

  • One-node graph.
  • Two-node graph.
  • 2×2 maze.
  • Cây nhị phân đầy đủ 2 cấp độ (full two-level binary tree).
  • 3×3 maze.

Nguồn Kata: http://codingdojo.org/kata/DepthFirstSearch/

Kata Yahtzee

Giới thiệu Kata

Bài toán này dựa trên bài kiểm tra số 19 của Ruby (http://rubyquiz.com/quiz19.html).

  • Bạn sẽ mất khoảng 20 phút nếu tự làm bài Kata này và khoảng 2 tiếng khi làm trong một buổi dojo.

Mô tả bài toán

Trò chơi Yahtzee là một trò tung xúc xắc đơn giản. Ở mỗi vòng, mỗi người chơi sẽ tung 5 quân xúc xắc 6 mặt. Người chơi được phép tung 3 lần vài quân hoặc tất cả 5 quân xúc xắc (tính cả lần đầu). Sau đó tính điểm cho người chơi theo các luật được quy định từ trước.

Bài Kata gồm việc tạo ra các luật để tính điểm và tính điểm cho lượt chơi dựa theo kết quả của lượt tung xúc xắc và luật chơi.

Các luật của Yahtzee và các kiểm thử khuyên dùng

Yahtzee có các luật chơi sau:

  • Ones, Twos, Threes, Fours, Fives, Sixes: Người chơi tính điểm bằng tổng các xúc xắc tung được có số từ là 1/2/3/4/5/6. Ví dụ: lượt tung có kết quả 5 quân xúc xắc là 1, 1, 2, 4, 4  luật tính điểm là  “Fours” người chơi sẽ được điểm là 4 + 4 = 8 điểm.
  • Pair: Người chơi tính tổng của một cặp có giá trị lớn nhất. Ví dụ, kết quả lượt tung là 3, 3, 3, 4, 4 có cặp lớn nhất là cặp 4, 4 sẽ được điểm là 4 + 4 =
  • Two pairs: Nếu có 2 cặp thì tính điểm bằng tổng 4 xúc xắc đó. Nếu không có thì được 0 điểm. Ví dụ lượt tung có kết quả là 1, 1, 2, 3, 3 tính điểm theo luật “two pairs” sẽ được 8 điểm = (1 + 1 + 3 +3).
  • Three of a kind: Nếu có 3 xúc xắc trùng giá trị thì tính điểm là tổng 3 giá trị đó. Còn lại được 0 điểm. Ví dụ: 3, 3, 3, 4, 5 tính điểm theo luật “three of a kind” thì được 9 điểm = (3+ 3 + 3).
  • Four of a kind: Nếu có 4 xúc xắc trùng giá trị thì tính điểm là tổng 4 giá trị đó. Còn lại được 0 điểm. Ví dụ: 2, 2, 2, 2, 5 tính điểm theo luật “four of a kind” thì được 8 điểm.
  • Small straight: Nếu tung được xúc xắc 1, 2, 3, 4, 5 thì được 15 điểm (tổng các xúc xắc), nếu không thì được 0 điểm.
  • Large straight: Nếu tung được xúc xắc 2, 3, 4, 5, 6 thì được 20 điểm (tổng các xúc xắc), nếu không thì được 0 điểm.
  • Full house: Nếu tung được một bộ 2 và một bộ 3 xúc xắc cùng giá trị thì được điểm là tổng các giá trị đó. Ví dụ 1, 1, 2, 2, 2 tính điểm theo “full house” được 8 điểm. Nhưng 4, 4, 4, 4, 4 không phải là “full house”.
  • Yahtzee: Nếu tất cả các quân xúc xắc tung được giá trị giống nhau, người chơi được 50 điểm, nếu không thì được 0 điểm.
  • Chance: Người chơi được điểm là tổng tất cả các xúc xắc tung được, không có điều kiện gì kèm theo.

Mọi người có thể đặt ra thêm luật nếu muốn.

Nguồn Kata: http://codingdojo.org/kata/Yahtzee/

Kata PokerHands

Giới thiệu kata

Kata này được sao chép từ acm.uva.es/p/v103/10315.html, là một tập nhỏ của một bộ Kata rất lớn có tên là KataTexasHoldEm.

Mô tả bài toán

Trong trò chơi Poker bạn phải so sánh vài cặp poker hands (Xi phe) với nhau, và cho biết đâu là bộ lớn hơn.

Mô tả quy tắc

Một bộ bài (poker) gồm có 52 lá – mỗi lá bài thuộc một trong 4 chất bích (clubs), rô (diamonds), cơ (hearts), tép (spades), lần lượt được ký hiệu là C, D, H, S trong dữ liệu đầu vào. Mỗi lá bài còn chứa một trong các giá trị 2, 3, 4, 5, 6, 7, 8, 9, 10, jack, queen, king, ace với kí hiệu tương ứng là 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A. Lá bài có giá trị 2 là nhỏ nhất và Ace là lớn nhất.

Mỗi một Xi phe gồm 5 lá từ bộ bài, Xi phe được xếp hạng theo thứ tự từ thấp đến như sau:

  • Lá cao (high card): 5 lá bài không phù hợp với bất kì thể loại nào cao hơn được xếp hạng theo lá bài cao nhất. Nếu 2 người có lá bài cao nhất bằng nhau (không xét về chất), họ được xếp hạng bởi lá bài cao tiếp theo.
  • Đôi (pair): Trong 5 lá bài có 2 lá cùng giá trị. Nếu hai người chơi đều có đôi, sẽ xét xem đôi nào có giá trị cao hơn. Nếu đôi của 2 người chơi bằng nhau, sẽ xét theo giá trị của Lá Cao.
  • Hai Đôi (Thú) (two pair): Trong 5 lá bài có 2 đôi (không phải tứ quý). Nếu hai người đều có 2 đôi sẽ xét theo ai có đôi lớn hơn, nếu đôi lớn hơn bằng nhau sẽ xét đôi tiếp theo. Nếu bằng nhau sẽ xét giá trị của lá còn lại.
  • Ba lá bằng nhau (Sám) (three of a kind): Trong 5 lá bài có 3 lá cùng giá trị. Nếu hai người chơi cùng có Sám, sẽ xét Sám của ai lớn hơn.
  • Sảnh (straight): 5 lá bài liên tiếp nhau (VD: 2 3 4 5 6) nhưng không phải Thùng. Nếu hai người chơi cùng có Sảnh sẽ xét giá trị của lá bài lớn nhất.
  • Thùng (cùng chất) (flush): 5 lá bài cùng 1 chất nhưng không liên tiếp nhau (không phải Sảnh). Nếu hai người chơi cùng có Thùng sẽ xét theo giá trị của lá bài cao (Lá cao).
  • Cù lũ (Full House): 3 lá cùng giá trị, 2 lá bài còn lại là Đôi. Bài này được xếp hạng theo giá trị của bộ ba.
  • Tứ quý (Four of a kind): 5 lá bài có 4 lá cùng giá trị. Nếu hai người cùng có Tứ quý sẽ xét xem Tứ quý của ai lớn hơn.
  • Thùng phá Sảnh (Vừa Sảnh vừa Thùng) (Straight flush): 5 lá bài liên tiếp nhau và cùng một chất. Nếu 2 người chơi cùng có Thùng phá Sảnh sẽ so sánh giá trị lá bài lớn nhất (Lá cao).

Một số ca kiểm thử (test case)

Đầu vào:

  • Black: 2H 3D 5S 9C KD White: 2C 3H 4S 8C AH
  • Black: 2H 4S 4C 2D 4H White: 2S 8S AS QS 3S
  • Black: 2H 3D 5S 9C KD White: 2C 3H 4S 8C KH
  • Black: 2H 3D 5S 9C KD White: 2D 3H 5C 9S KH

Đầu ra:

  • White thắng – với Lá cao (lá bài Ace)
  • Black thắng – với Cù lũ
  • Black thắng – với Lá cao (lá bài 9)
  • Hòa

Nguồn Kata: http://codingdojo.org/kata/PokerHands/

Kata Bowling

Mô tả bài toán

Viết một chương trình để tính điểm của 1 ván bowling dựa trên đầu vào là 1 dãy số điểm của các lượt ném hợp lệ. Một số thứ sẽ không cần có trong chương trình:

  • Không kiểm tra tính hợp lệ của các lần ném bowling.
  • Không kiểm tra tính đúng đắn của số lượt ném (frame) và số lần ném (roll).
  • Không tính điểm sau từng lượt ném (chỉ tính tổng điểm cuối cùng sau khi ném đủ 10 lượt).

Tuỳ thuộc vào mỗi dojo khác nhau mà chương trình có thể được xây dựng hoàn thiện hoặc không, nhưng chúng tôi không xử lý ba điều trên nhằm giúp bài Kata “sáng sủa” hơn, người luyện Kata tập trung vào vấn đề chính cần giải quyết. Nếu bạn muốn viết một trò chơi bowling thật, bạn sẽ phải thực hiện các bước kiểm tra ở trên.

Quy tắc tính điểm ngắn gọn của bowling như sau:

  • Mỗi ván bowling có 10 lượt ném (10 frame).
  • Mỗi frame, người chơi có hai lần ném (roll) để làm đổ hết 10 pin.
  • Nếu sau hai lần ném (trong 1 frame) mà người chơi không ném đổ được hết 10 pin, điểm số cho frame đó là tổng số pin đã bị ném đổ.
  • Nếu sau hai lần ném (của 1 frame), người chơi ném đổ hết 10 pin, frame này được gọi là “spare” và điểm cho 1 frame spare được tính bằng 10 cộng thêm số pin mà bạn ném đổ ở lần ném tiếp theo (Ví dụ ở frame thứ 1 bạn đạt spare, frame thứ hai bạn ném lần 1 đổ 3 pin, lần 2 đổ 5 pin, điểm số của frame 1 (spare) sẽ là (10 + 3), và tổng điểm của frame 1 và frame 2 sẽ là: (10+3) + (3+5).
  • Nếu sau lần ném đầu tiên (của 1 frame), người chơi làm đổ hết 10 pin, frame đó được gọi là “strike”, điểm số của của frame strike được tính bằng 10 cộng thêm số pin mà người chơi ném đổ ở 2 lần ném tiếp theo (Ví dụ ở frame thứ 1 bạn đạt strike, frame thứ hai bạn ném lần 1 đổ 3 pin, lần 2 đổ 5 pin, điểm số của frame 1( strike) sẽ là (10 + 3 + 5) , và tổng điểm của frame 1 và frame 2 sẽ là: (10 + 3 + 5) + (3 + 5).
  • Lượt ném thứ 10 thì hơi khác hơn 1 chút. Nếu bạn đạt strike hoặc spare ở lượt ném thứ 10 thì bạn sẽ được ném thêm (bạn được ném tối đa 3 lần trong lượt ném thứ 10). Ví dụ nếu ngay lần ném đầu tiên của frame thứ 10 bạn đạt strike thì bạn sẽ được ném tiếp hai lần, nếu bạn đạt spare thì bạn sẽ được ném thêm 1 lần nữa. ( Tối đa điểm bạn có thể có trong frame 10 là (10+10+10) khi 3 lần némcủa frame này đều dành được strike).
  • Bạn có thể xem thêm về luật trò bowling tại: www.topendsports.com/sport/tenpin/scoring.htm

Gợi ý

Trò bowling thú vị là nhờ strike và spare. Khi chúng ta giành được một frame strike hoặc spare, chúng ta không thể biết điểm của frame đó ngay mà phải chờ 1 hoặc 2 lần ném (một nửa hoặc cả 1 frame) để biết được điểm thưởng thêm là bao nhiêu.

Một số test case mẫu

(Dấu “X” là strike, “/” là spare và “-” là miss: Không ném đổ pin nào).

  • “XXXXXXXXXXXX” (12 lần ném với 12 strike) = 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 = 300 (điểm)
  • “9-9-9-9-9-9-9-9-9-9-” (20 lần ném với 10 cặp: 9 và miss) = 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 = 90 (điểm)
  • “5/5/5/5/5/5/5/5/5/5/5” (21 lần ném với 10 cặp: 5 rồi spare, lần ném cuối ném đổ 5 pin) = 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 = 150 (điểm)

Nguồn Kata: http://codingdojo.org/kata/Bowling/