Trang chủ » Blog » Bắt đầu Kata Game of Life như thế nào – Autumn Coderetreat 2020

Bắt đầu Kata Game of Life như thế nào – Autumn Coderetreat 2020

bởi CodeGym | 26/12/2023 15:35 | Blog | Coding Dojo

Bạn có thể đọc chi tiết về kata này ở bài viết này. Và đây là một kata rất thú vị và thách thức. Một không gian hai chiều rộng vô hạn, với các cell nằm ở một trong hai trạng thái “sống” hay “chết”, và 3 luật nhân quả đơn giản. Nhưng việc triển khai hoàn thiện trong khoảng thời gian của một phiên Coding Dojo (25 phút) hay Coderetreat (45 phút) là không hề dễ dàng, điều đó loại bỏ mọi áp lực phải xong và giúp người tập đặt chú ý vào kỹ năng và cách làm.

Sự thú vị của GoL còn nằm ở chỗ, không như nhiều kata khác vốn có cách giải quyết khá đơn điệu, GoL có vô số các cách để thiết kế và triển khai. Sự khác nhau giữa thiết kế ở một vài ca kiểm thử đầu tiên có thể tạo nên quá trình phát triển cũng như kết quả cuối cùng khác biệt hoàn toàn.

Bài viết này gợi ý một thiết kế ban đầu mà người tham gia Coding Dojo hay Coderetreat lần đầu có thể dễ dàng tiếp cận. Thiết kế ở đây xoay quanh ý tưởng chính

  • Một universe để mô phỏng trạng thái của toàn bộ thế không gian trò chơi. Không gian có kích thước giới hạn. Và mọi cell nằm ngoài không gian mặc nhiên được coi là cell “chết”.
  • Đầu vào của chương trình là thông tin về tập các cell sống ban đầu, thông tin này có thể được mô tả bằng nhiều cách, chẳng hạn bằng những giá trị true trong một mảng boolean[][], hoặc bằng cách chỉ định mỗi cell sống bằng một lần gọi hàm bless() như dưới đây
  • Một chức năng để để chuyển tất cả các cell của universe sang trạng thái tiếp theo.
  • Một chức năng để cho biết trạng thái của một cell tại một vị trí bất kỳ.

Theo đó, kịch bản kiểm thử trông có thể như sau:

before
universe = new Universe(4, 8)

testEmptyUniverseHasNoLivingCell
universe.neighborsAt(1, 1) shouldBe 0

testFoundOneLivingNeighbor
universe.bless(0, 1)
universe.neighborsAt(0, 0) shouldBe 1

testFoundTwoLivingNeighbors
universe.bless(0, 0)
universe.bless(0, 2)
universe.neighborsAt(0, 1) shouldBe 2

// ...

testLonelyCellDies
universe.bless(0, 0)
universe.bless(0, 2)
universe.evolve()
universe.isAlive(0, 0) shouldBe false

Bộ API này có thể đáp ứng mọi nhu cầu tái cấu trúc cũng như mở rộng về sau. Mọi tái cấu trúc sẽ nằm ở bên trong các thiết kế theo mẫu, ở các layer đằng sau trong các layer của phần mềm.


AUTUMN CODERETREAT 2020

(Sự kiện mang tính TOÀN CẦU, phi lợi nhuận và hoàn toàn MIỄN PHÍ)

“Autumn Coderetreat 2020” là sự kiện toàn cầu được tổ chức hàng năm. Nó được coi như “một ngày tu luyện” của cộng đồng tất cả những người đang học code và những người đang làm nghề lập trình viên.

Thông qua một hình thức làm việc mới mẻ, độc đáo với tên gọi là “coderetreat”, sự kiện giúp người tham gia nâng cao khả năng tư duy, kỹ năng giải quyết các vấn đề lập trình. Ở đó: Không có “áp lực phải xong”, không giới hạn trí tưởng tượng và óc sáng tạo. Chỉ có sự tập trung cao độ, thực hành liên tục, học hỏi và chuyển giao kiến thức trong bầu không khí chia sẻ, thoải mái.

THÔNG TIN SỰ KIỆN AUTUMN CODERETREAT 2020:

  1. Thời gian: 8:00 – 17:00 I Chủ Nhật, 27/09/2020
  2. Hình thức: Online
  3. Thông tin chi tiết và link đăng ký tham dự tại: AUTUMN CODERETREAT 2020

Download - Giáo trình thuật toán

2 + 12 =

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

12 + 2 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM