Menu
Coddy logo textTech

Görev Silme

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 24 / 68.

challenge icon

Görev

Kolay

Görev yönetim sisteminizin bu bölümünde, listenizden görevleri kaldırma özelliğini uygulayacaksınız. Bu görev, belirli bir öğeyi içermeyecek şekilde bir dilimi yeniden oluşturmak için append işlevini kullanarak dilimlerin nasıl değiştirileceğine odaklanır ve veri yapınızdan öğelerin kalıcı olarak nasıl kaldırılacağını gösterir.

Üç girdi alacaksınız:

  • Görevlerin sayısını temsil eden bir dize (ör. "4")
  • Görev verilerini şu biçimde içeren bir dize: Durumun "true" veya "false" olduğu "name1:status1,name2:status2,name3:status3" (ör. "Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
  • Kaldırılacak görevin dizinini temsil eden bir dize (ör. 0 tabanlı dizinleme kullanılarak ikinci görev için "1")

Göreviniz:

  1. Önceki görevlerdeki aynı Task yapısını, Name (string) ve Completed (bool) alanlarıyla tanımlayın
  2. Parametre olarak bir Task dilimi ve bir dizin (int) alan removeTask adlı bir işlev oluşturun
  3. removeTask işlevinin içinde, hedef dizinden önceki ve sonraki öğeleri birleştirmek için append kullanarak, verilen dizindeki görevin kaldırıldığı yeni bir dilim döndürün
  4. Görev diliminizi oluşturmak için ikinci girdideki görev verilerini ayrıştırın:
    • Tek tek görev girdilerini elde etmek için girdiyi virgüllere göre ayırın
    • Adı ve durumu ayırmak için her girdiyi iki nokta üst üste işaretine göre ayırın
    • Durum dizesini bir boolean değere dönüştürün ("true", true değerine; "false", false değerine dönüşür)
  5. Görev dizinini elde etmek için üçüncü girdi dizesini bir tam sayıya dönüştürün
  6. removeTask işlevini çağırmadan önce kaldırılacak görevin adını saklayın
  7. Dilim ve dizinle removeTask işlevinizi çağırın ve döndürülen dilimi saklayın
  8. Görevi kaldırdıktan sonra, önceki görevlerdekiyle aynı biçimi kullanarak kalan tüm görevleri görüntüleyin:
    • Tamamlanan görevler için: "[x] [task_name]"
    • Tamamlanmamış görevler için: "[ ] [task_name]"
  9. Bir onay mesajı yazdırın: "Task '[task_name]' removed successfully!"
  10. Güncellenmiş özeti yazdırın: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Dizin dizesini bir tam sayıya dönüştürmek için strconv paketini kullanın. Bu görev, hedef öğeden önceki ve sonraki bölümleri birleştirerek dilimleri yeniden oluşturmak ve böylece kalan öğelerin sırasını korurken koleksiyonunuzdan öğeleri etkili bir şekilde kaldırmak için append işlevinin nasıl kullanılacağını gösterir.

Kendin dene

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)
}

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi