Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

حذف مهمة

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 24 من 68.

challenge icon

التحدي

سهل

في هذا الجزء من نظام إدارة المهام الخاص بك، ستقوم بتنفيذ القدرة على إزالة المهام من قائمتك. يركز هذا التحدي على معالجة الشرائح (slices) باستخدام دالة append لإعادة بناء شريحة بدون عنصر معين، مما يوضح كيفية إزالة العناصر نهائياً من هيكل البيانات الخاص بك.

ستتلقى ثلاثة مدخلات:

  • سلسلة نصية تمثل عدد المهام (مثلاً، "4")
  • سلسلة نصية تحتوي على بيانات المهام بالتنسيق التالي: "name1:status1,name2:status2,name3:status3" حيث تكون الحالة إما "true" أو "false" (مثلاً، "Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
  • سلسلة نصية تمثل فهرس (index) المهمة المراد إزالتها (مثلاً، "1" للمهمة الثانية، باستخدام الفهرسة التي تبدأ من الصفر)

مهمتك هي:

  1. تعريف نفس هيكل Task من التحديات السابقة مع حقول Name (string) و Completed (bool)
  2. إنشاء دالة تسمى removeTask تأخذ شريحة من هياكل Task وفهرساً (int) كمعاملات
  3. داخل دالة removeTask، قم بإرجاع شريحة جديدة مع إزالة المهمة الموجودة عند الفهرس المعطى باستخدام append لدمج العناصر التي تسبق الفهرس المستهدف والتي تليه
  4. تحليل بيانات المهام من المدخل الثاني لإنشاء شريحة المهام الخاصة بك:
    • تقسيم المدخل بواسطة الفواصل للحصول على إدخالات المهام الفردية
    • لكل إدخال، قم بالتقسيم بواسطة النقطتين الرأسيتين لفصل الاسم والحالة
    • تحويل سلسلة الحالة النصية إلى قيمة منطقية ("true" تصبح true، و "false" تصبح false)
  5. تحويل سلسلة المدخل الثالث النصية إلى عدد صحيح للحصول على فهرس المهمة
  6. تخزين اسم المهمة المراد إزالتها قبل استدعاء دالة removeTask
  7. استدعاء دالة removeTask مع الشريحة والفهرس الخاصين بك، وتخزين الشريحة المرتجعة
  8. بعد إزالة المهمة، قم بعرض جميع المهام المتبقية باستخدام نفس التنسيق من التحديات السابقة:
    • للمهام المكتملة: "[x] [task_name]"
    • للمهام غير المكتملة: "[ ] [task_name]"
  9. طباعة رسالة تأكيد: "Task '[task_name]' removed successfully!"
  10. طباعة الملخص المحدث: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

استخدم حزمة strconv لتحويل سلسلة الفهرس النصية إلى عدد صحيح. يوضح هذا التحدي كيفية استخدام append لإعادة بناء الشرائح عن طريق دمج الأجزاء قبل وبعد العنصر المستهدف، مما يؤدي بفعالية إلى إزالة العناصر من مجموعتك مع الحفاظ على ترتيب العناصر المتبقية.

جرّب بنفسك

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

جميع دروس Logic & Flow