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ài viết

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/

Kata Minesweeper

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

Mô tả bài toán

Bạn đã từng chơi Minesweeper chưa? Đó là một game nhỏ rất thú vị được cung cấp kèm theo một hệ điều hành mà tôi cũng không còn nhớ nổi tên nữa. Mục tiêu của trò chơi là tìm ra tất cả các quả mìn trong một khu vực có kích thước M x N. Để giúp bạn, trò chơi cho hiển thị ở mỗi ô vuông số mìn ở các ô liền kề. Ví dụ, một khu vực có kích thước 4 × 4 chứa 2 quả mìn (mìn được biểu diễn bằng kí tự *) như sau:

               *...
               ....
               .*..
               ....

Nếu chúng ta muốn thể hiện các con số để gợi ý số mìn cho khu vực trên, chúng ta sẽ có kết quả sau:

               *100
               2210
               1*10
               1110

Bạn cần viết một chương trình sử dụng đầu vào như sau:

Đầu vào cho phép tùy chọn số lượng bãi mìn và kích thước vùng chứa mìn (bãi mìn).

Dòng đầu tiên nhập 2 số nguyên n và m (0<n, m<=100), tương ứng là chiều dài và chiều rộng (số hàng, số cột) của bãi mìn.

Căn cứ vào giá trị của n, nhập mỗi hàng (trong số n hàng) m ký tự biểu diễn cho mỗi ô của bãi mìn (n x m). Ô an toàn (không chứa mìn) nhập ký tự “.” (dấu chấm) và ô chứa mìn nhập vào kí tự “*” (dấu hoa thị).

Chương trình sẽ ngừng nhập dữ liệu đầu vào và không xử lý gì thêm nếu nhập giá trị 0 cho n và m.

Sau khi nhập dữ liệu xong chương trình sẽ cho kết quả đầu ra như sau.

Với mỗi bãi mìn, đầu tiên bạn sẽ in ra dòng thông báo như sau:

          Bãi mìn #x:

Trong đó x là số thứ tự của bãi mìn (bắt đầu từ 1, số lượng bãi mìn phụ thuộc dữ liệu đầu vào). Và n dòng tiếp theo các kí tự “.” được thay thế bằng số lượng mìn xung quanh ô đó. Các bãi mìn phân cách nhau bằng một dòng trắng.

Ví dụ:

Đầu vào:

              4 4
              *...
              ....
              .*..
              ....
              3 5
              **...
              .....
              .*...
              0 0

Đầu ra:

              Bãi mìn #1:
              *100
              2210
              1*10
              1110

              Bãi mìn #2:
              **100
              33200
              1*100

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