package main

import "fmt"

func main() {
	// foo1()
	// foo2()
	cities()
}

func work(x int) int {
	return x
}

func foo1() {
	myMap := make(map[int]int)
	input := [10]int{}
	for i := 0; i < 10; i++ {
		fmt.Scan(&input[i])
		if value, ok := myMap[input[i]]; ok {
			// fmt.Println("Value from cache: ", value)
			fmt.Printf("%d ", value)
		} else {
			myMap[input[i]] = work(input[i])
			// fmt.Println(myMap[input[i]])
			fmt.Printf("%d ", myMap[input[i]])
		}
	}
}

func foo2() {
	cache := make(map[int]int, 10)
	for n, i := 0, 0; i < 10; i++ {
		fmt.Scan(&n)
		if _, exists := cache[n]; !exists {
			cache[n] = work(n)
		}
		fmt.Print(cache[n], " ")
	}
}

func cities() {
	groupCity := map[int][]string{
		10:   []string{"Ивановка", "Грязь"},
		100:  []string{"Королев", "Электроугли"},
		1000: []string{"Москва"},
	}

	cityPopulation := map[string]int{
		"Королев": 30,
		"Москва":  200,
	}

	// fmt.Println(groupCity)
	// fmt.Println(cityPopulation)

	for pKey, _ := range cityPopulation {
		//fmt.Println("Searching key", pKey)
		for cKey, _ := range groupCity {
			//fmt.Println(cKey, cValue)
			if cKey != 100 {
				for _, sValue := range groupCity[cKey] {
					//fmt.Println(sValue)
					if sValue == pKey {
						delete(cityPopulation, pKey)
					}
				}
			}
		}
	}
	fmt.Println("...")
	fmt.Println(cityPopulation)
}
