Menu
Coddy logo textTech

Benzersiz Öge Toplayıcı

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

challenge icon

Görev

Kolay

Dizelerden oluşan koleksiyonlardaki benzersiz öğeleri filtrelemek için Go'nun deyimsel (idiomatic) küme desenini kullanan bir kopya kaldırma sistemi oluşturun. Bu zorluk, görülen öğeleri izlemek ve yalnızca benzersiz öğeleri içeren koleksiyonlar oluşturmak için map[string]struct{} deyimini kullanma yeteneğinizi test edecektir.

İki girdi alacaksınız:

  • Virgülle ayrılmış öğeler içeren bir dize (örneğin, "apple,banana,apple,orange,banana,grape,apple")
  • Birleştirilecek ek öğeleri içeren ve yine virgülle ayrılmış bir dize (örneğin, "kiwi,apple,mango,banana,kiwi")

Göreviniz şunları yapmaktır:

  1. Bir dize dilimi (slice) alan ve yalnızca benzersiz dizeleri içeren yeni bir dilim döndüren getUniqueItems adında bir fonksiyon oluşturun
  2. Bu fonksiyonun içinde, hangi öğelerin görüldüğünü izlemek için map[string]struct{} deyimini kullanın
  3. Girdi dilimi boyunca döngü kurun ve her öğe için:
    • "comma ok" deyimini kullanarak öğenin kümenizde mevcut olup olmadığını kontrol edin
    • Öğe daha önce görülmemişse, onu hem kümeye hem de sonuç dilimine ekleyin
  4. Başlangıç öğe listesini elde etmek için ilk girdiyi virgüllere göre ayırarak ayrıştırın
  5. Ek öğeleri elde etmek için ikinci girdiyi virgüllere göre ayırarak ayrıştırın
  6. Sistem başlığını görüntüleyin: "=== UNIQUE ITEM COLLECTOR ==="
  7. Orijinal öğeleri görüntüleyin: "Original items: [tüm orijinal öğelerin virgülle ayrılmış listesi]"
  8. Ek öğeleri görüntüleyin: "Additional items: [tüm ek öğelerin virgülle ayrılmış listesi]"
  9. Orijinal listedeki benzersiz öğeleri elde etmek için getUniqueItems fonksiyonunuzu kullanın
  10. Benzersiz orijinal öğeleri görüntüleyin: "Unique original items: [orijinal listedeki benzersiz öğelerin virgülle ayrılmış listesi]"
  11. Her iki girdi dilimini tüm öğeleri içeren tek bir dilimde birleştirin
  12. Birleştirilmiş listedeki benzersiz öğeleri elde etmek için getUniqueItems fonksiyonunuzu kullanın
  13. Nihai benzersiz öğeleri görüntüleyin: "Final unique items: [tüm benzersiz öğelerin virgülle ayrılmış listesi]"
  14. Koleksiyon istatistiklerini görüntüleyin:
    • "=== COLLECTION STATISTICS ==="
    • "Total original items: [orijinal öğelerin sayısı]"
    • "Total additional items: [ek öğelerin sayısı]"
    • "Total combined items: [birleştirilmiş tüm öğelerin sayısı]"
    • "Unique items found: [benzersiz öğelerin sayısı]"
    • "Duplicates removed: [toplam birleştirilmiş öğe sayısı eksi benzersiz öğe sayısı]"
  15. Tamamlanma mesajını görüntüleyin: "Unique item collection completed successfully"

Girdi dizelerini bölmek için strings paketini ve çıktı için fmt paketini kullanın. Öğeleri görüntülemek için birleştirirken, virgül ayırıcı ile strings.Join kullanın. Bu zorluk, Go'nun küme deyiminin, veri işleme uygulamalarında sıkça kullanacağınız bir desen olan koleksiyonlardan kopyaları kaldırma sorununu ne kadar verimli bir şekilde çözdüğünü göstermektedir.

Kendin dene

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Girdiyi oku
	var input1 string
	var input2 string
	fmt.Scanln(&input1)
	fmt.Scanln(&input2)
	
	// Girdi dizelerini dilimlere (slice) ayır
	originalItems := strings.Split(input1, ",")
	additionalItems := strings.Split(input2, ",")
	
	// TODO: Kodunuzu buraya yazın
	// 1. map[string]struct{} yapısını kullanan getUniqueItems fonksiyonunu oluşturun
	// 2. Benzersiz öğeleri elde etmek için orijinal öğeleri işleyin
	// 3. Her iki dilimi birleştirin ve birleşik listeden benzersiz öğeleri alın
	// 4. İstatistikleri hesaplayın
	
	// Sistem başlığını görüntüle
	fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
	
	// Orijinal ve ek öğeleri görüntüle
	fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
	fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
	
	// TODO: Benzersiz orijinal öğeleri, nihai benzersiz öğeleri ve istatistikleri görüntüleyin
	// Çıktı biçimlendirmesi için fmt.Printf ve strings.Join kullanın
}

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