Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по 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
}

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