Menu
CoddyTech

Просмотр всех задач

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 22 из 68.

challenge icon

Задание

Легко

Продолжая работу над системой управления задачами, теперь реализуй функцию отображения всех задач в удобном для пользователя формате. В этом задании нужно пройти по коллекции задач и показать каждую задачу с указанием её статуса выполнения с помощью понятных визуальных индикаторов.

На вход будут переданы два значения:

  • Строка, представляющая количество задач (например, "4")
  • Строка с данными задач в формате: "name1:status1,name2:status2,name3:status3", где статус — это либо "true", либо "false" (например, "Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")

Твоя задача:

  1. Определить ту же структуру Task, что и в предыдущих заданиях, с полями Name (string) и Completed (bool)
  2. Создать функцию с именем viewAllTasks, которая принимает срез структур Task в качестве параметра
  3. Внутри функции viewAllTasks пройти по срезу и вывести каждую задачу в следующем формате:
    • Для выполненных задач: "[x] [task_name]"
    • Для невыполненных задач: "[ ] [task_name]"
  4. Разобрать данные задач из второго входного значения, чтобы создать срез задач:
    • Разделить входную строку по запятым, чтобы получить отдельные записи задач
    • Для каждой записи разделить её по двоеточию, чтобы отделить имя от статуса
    • Преобразовать строку статуса в логическое значение ("true" становится true, "false" становится false)
  5. Вызвать функцию viewAllTasks, передав ей созданный срез
  6. После отображения всех задач вывести сводку в формате: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Например, если у тебя есть задачи "Buy groceries:false,Call dentist:true,Finish project:false", в выводе должна отображаться каждая задача с соответствующим флажком, а затем сводка с общим количеством задач и статистикой выполнения. Это задание поможет попрактиковаться в переборе среза и условном форматировании с помощью операторов if, а также позволит пользователям наглядно отслеживать ход выполнения задач.

Попробуйте сами

package main

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

type Task struct {
	Name      string
	Completed bool
}

func viewAllTasks(tasks []Task) {
	// TODO: Реализовать функцию для отображения всех задач
	// Для выполненных задач: "[x] [task_name]"
	// Для невыполненных задач: "[ ] [task_name]"
}

func main() {
	var numTasksStr string
	fmt.Scanln(&numTasksStr)
	numTasks, _ := strconv.Atoi(numTasksStr)

	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	taskData := scanner.Text()

	var tasks []Task

	// TODO: Разобрать данные о задачах из строки taskData
	// Разделить по запятым, чтобы получить отдельные записи о задачах
	taskEntries := strings.Split(taskData, ",")
	_ = taskEntries

	// Каждую запись разделить по двоеточию, чтобы отделить название от статуса
	// Преобразовать строку статуса в логическое значение и создать структуры Task

	// TODO: Вызвать функцию viewAllTasks с созданным срезом

	// TODO: Подсчитать и вывести сводку
	// Формат: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
	_ = tasks
	_ = numTasks
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go