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 zorluk, belirli bir öğe olmadan bir dilimi (slice) yeniden oluşturmak için append fonksiyonunu kullanarak dilim manipülasyonuna odaklanır ve veri yapınızdan öğeleri kalıcı olarak nasıl kaldıracağınızı gösterir.

Üç girdi alacaksınız:

  • Görev sayısını temsil eden bir dize (örneğin, "4")
  • Şu formatta görev verilerini içeren bir dize: "name1:status1,name2:status2,name3:status3"; burada durum (status) "true" veya "false" değeridir (örneğin, "Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
  • Kaldırılacak görevin dizinini (index) temsil eden bir dize (örneğin, ikinci görev için 0 tabanlı dizin kullanarak "1")

Göreviniz şunları yapmaktır:

  1. Önceki zorluklardaki Name (string) ve Completed (bool) alanlarına sahip aynı Task yapısını (struct) tanımlayın
  2. Parametre olarak bir Task yapısı dilimi ve bir dizin (int) alan removeTask adında bir fonksiyon oluşturun
  3. removeTask fonksiyonu 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:
    • Bireysel görev girişlerini almak için girdiyi virgüllere göre bölün
    • Her giriş için, isim ve durumu ayırmak üzere iki noktaya göre bölün
    • Durum dizesini bir boolean değerine dönüştürün ("true" değeri true, "false" değeri false olur)
  5. Görev dizinini elde etmek için üçüncü girdi dizesini bir tam sayıya dönüştürün
  6. removeTask fonksiyonunu çağırmadan önce kaldırılacak görevin adını saklayın
  7. Diliminiz ve dizininizle removeTask fonksiyonunuzu çağırın ve dönen dilimi saklayın
  8. Görevi kaldırdıktan sonra, kalan tüm görevleri önceki zorluklarla aynı formatı kullanarak 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 zorluk, hedef bir öğeden önceki ve sonraki kısımları birleştirerek dilimleri yeniden oluşturmak için append fonksiyonunun nasıl kullanılacağını, koleksiyonunuzdaki öğeleri etkili bir şekilde kaldırırken kalan öğelerin sırasını nasıl koruyacağınızı 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