Menu
CoddyTech

Thêm một việc cần làm

Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 21 trên 68.

challenge icon

Thử thách

Dễ

Dựa trên nền tảng quản lý tác vụ bạn đã xây dựng, giờ bạn sẽ triển khai chức năng cốt lõi để thêm tác vụ mới vào hệ thống. Thử thách này tập trung vào việc tạo một hàm giúp mở rộng danh sách tác vụ bằng cách thêm tác vụ mới vào slice hiện có.

Lưu ý quan trọng: Vì tên tác vụ có thể chứa dấu cách (như "Buy groceries"), bạn cần dùng bufio.Scanner để đọc toàn bộ dòng đầu vào. Hàm fmt.Scanln dừng đọc ở dấu cách đầu tiên, khiến tên tác vụ có dấu cách bị lỗi. Hãy dùng bufio.NewScanner(os.Stdin) rồi gọi scanner.Scan() và tiếp theo là scanner.Text() để đọc đầy đủ từng dòng.

Bạn sẽ nhận được hai đầu vào:

  • Một chuỗi biểu thị số lượng tác vụ hiện có (ví dụ: "2")
  • Một chuỗi chứa tên các tác vụ, được phân tách bằng dấu phẩy (ví dụ: "Buy groceries,Call dentist,Finish project")

Nhiệm vụ của bạn là:

  1. Định nghĩa struct Task giống như trong thử thách trước, với các trường Name (string) và Completed (bool)
  2. Tạo hàm có tên addTask, nhận một slice các struct Task và tên tác vụ (string) làm tham số
  3. Hàm addTask cần trả về một slice mới có thêm tác vụ (tác vụ mới cần có Completed được đặt thành false)
  4. Dùng bufio.Scanner để đọc đúng các dòng đầu vào, nhằm xử lý tên tác vụ có dấu cách
  5. Tạo một slice tác vụ ban đầu dựa trên số lượng tác vụ hiện có được chỉ định trong đầu vào thứ nhất:
    • Nếu số lượng là "0", hãy bắt đầu bằng một slice rỗng
    • Nếu số lượng lớn hơn "0", hãy tạo số tác vụ giữ chỗ tương ứng, với các tên như "Existing Task 1", "Existing Task 2", v.v., tất cả đều được đánh dấu là chưa hoàn thành
  6. Phân tích tên các tác vụ được phân tách bằng dấu phẩy từ đầu vào thứ hai
  7. Dùng hàm addTask để thêm từng tác vụ mới vào slice
  8. In từng tác vụ trong slice cuối cùng theo định dạng: "Task: [name], Completed: [true/false]"
  9. In tổng số tác vụ theo định dạng: "Total tasks: [count]"

Ví dụ, nếu bạn có 1 tác vụ hiện có và muốn thêm "Buy groceries,Call dentist", kết quả cần hiển thị tác vụ hiện có trước, tiếp theo là hai tác vụ mới, rồi đến tổng số lượng. Thử thách này giúp bạn luyện tập thao tác với slice bằng hàm append và cho thấy cách xây dựng chức năng mở rộng cấu trúc dữ liệu.

Tự làm thử

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

type Task struct {
	Name      string
	Completed bool
}

// TODO: Tạo hàm addTask tại đây

func main() {
	// Tạo scanner để đọc các dòng đầu vào
	scanner := bufio.NewScanner(os.Stdin)
	
	// Đọc số lượng tác vụ hiện có
	scanner.Scan()
	existingTasksStr := scanner.Text()
	
	// Đọc tên các tác vụ
	scanner.Scan()
	taskNamesStr := scanner.Text()
	
	// TODO: Hoàn thiện phần triển khai
	// 1. Chuyển existingTasksStr thành số nguyên
	// 2. Tạo slice ban đầu chứa các tác vụ hiện có
	// 3. Phân tích taskNamesStr và thêm các tác vụ mới
	// 4. In ra tất cả tác vụ và tổng số tác vụ
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online