Menu
CoddyTech

Menghapus Tugas

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 24 dari 68.

challenge icon

Tantangan

Mudah

Di bagian sistem manajemen tugas ini, kamu akan menerapkan kemampuan untuk menghapus tugas dari list-mu. Tantangan ini berfokus pada manipulasi slice menggunakan fungsi append untuk menyusun ulang slice tanpa elemen tertentu, sekaligus menunjukkan cara menghapus item secara permanen dari struktur datamu.

Kamu akan menerima tiga input:

  • String yang menunjukkan jumlah tugas (misalnya, "4")
  • String berisi data tugas dengan format: "name1:status1,name2:status2,name3:status3", dengan status berupa "true" atau "false" (misalnya, "Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
  • String yang menunjukkan indeks tugas yang akan dihapus (misalnya, "1" untuk tugas kedua, menggunakan indeks berbasis 0)

Tugasmu adalah:

  1. Definisikan struct Task yang sama seperti pada tantangan sebelumnya, dengan field Name (string) dan Completed (bool)
  2. Buat fungsi bernama removeTask yang menerima slice struct Task dan indeks (int) sebagai parameter
  3. Di dalam fungsi removeTask, kembalikan slice baru dengan menghapus tugas pada indeks yang diberikan. Gunakan append untuk menggabungkan elemen sebelum dan sesudah indeks sasaran
  4. Uraikan data tugas dari input kedua untuk membuat slice tugas:
    • Pisahkan input dengan koma untuk mendapatkan setiap entri tugas
    • Untuk setiap entri, pisahkan dengan titik dua untuk memisahkan nama dan status
    • Ubah string status menjadi boolean ("true" menjadi true, "false" menjadi false)
  5. Ubah string input ketiga menjadi bilangan bulat untuk mendapatkan indeks tugas
  6. Simpan nama tugas yang akan dihapus sebelum memanggil fungsi removeTask
  7. Panggil fungsi removeTask dengan slice dan indeksmu, lalu simpan slice yang dikembalikan
  8. Setelah menghapus tugas, tampilkan semua tugas yang tersisa dengan format yang sama seperti pada tantangan sebelumnya:
    • Untuk tugas yang selesai: "[x] [task_name]"
    • Untuk tugas yang belum selesai: "[ ] [task_name]"
  9. Cetak pesan konfirmasi: "Task '[task_name]' removed successfully!"
  10. Cetak ringkasan yang diperbarui: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Gunakan package strconv untuk mengubah string indeks menjadi bilangan bulat. Tantangan ini menunjukkan cara menggunakan append untuk menyusun ulang slice dengan menggabungkan bagian sebelum dan sesudah elemen sasaran. Dengan begitu, kamu dapat menghapus item dari koleksimu sekaligus mempertahankan urutan elemen yang tersisa.

Coba sendiri

package main

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

type Task struct {
	Name      string
	Completed bool
}

func completeTask(tasks *[]Task, index int) {
	(*tasks)[index].Completed = true
}

func main() {
	// Read input using bufio.Scanner to handle spaces properly
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	_ = scanner.Text() // Read but don't use the number of tasks
	
	scanner.Scan()
	taskDataStr := scanner.Text()
	
	scanner.Scan()
	indexStr := scanner.Text()
	
	// Parse task data
	taskEntries := strings.Split(taskDataStr, ",")
	tasks := make([]Task, len(taskEntries))
	
	for i, entry := range taskEntries {
		parts := strings.Split(entry, ":")
		if len(parts) >= 2 {
			name := parts[0]
			status := parts[1] == "true"
			tasks[i] = Task{Name: name, Completed: status}
		}
	}
	
	// Convert index string to integer
	index, _ := strconv.Atoi(indexStr)
	
	// Complete the task
	taskName := tasks[index].Name
	completeTask(&tasks, index)
	
	// Display all tasks
	for _, task := range tasks {
		if task.Completed {
			fmt.Printf("[x] %s\n", task.Name)
		} else {
			fmt.Printf("[ ] %s\n", task.Name)
		}
	}
	
	// Print confirmation message
	fmt.Printf("Task '%s' marked as completed!\n", taskName)
	
	// Count completed and incomplete tasks
	completedCount := 0
	for _, task := range tasks {
		if task.Completed {
			completedCount++
		}
	}
	incompleteCount := len(tasks) - completedCount
	
	// Print summary
	fmt.Printf("Total: %d tasks (%d completed, %d remaining)\n", len(tasks), completedCount, incompleteCount)
}

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online