package main

import "fmt"

func main() {
	/*
		var a []int
		var b []int = []int{2, 4, 6}
		c := []int{2, 4, 5}
		d := []int{2: 10}

		fmt.Println(a)
		fmt.Println(b)
		fmt.Println(c)
		fmt.Println(d)
	*/
	// createSlice()
	// funcForSlice()
	// sliceCapacity()
	// mySlice()
	// deleteElement()
	// copySlice()
	// foo1()
	foo2()
}

func createSlice() {
	baseArray := [8]string{"Anna", "Max", "Eva", "Leo", "Nina", "Tom", "Sophie", "Chris"}

	slice1 := baseArray[1:5] // со 2 по 5 элемент
	slice2 := baseArray[:3]  // c 1 по 3 элемент
	slice3 := baseArray[4:]  // c 5 до конца

	fmt.Println(slice1)
	fmt.Println(slice2)
	fmt.Println(slice3)
}

func funcForSlice() {
	numbers := []int{10, 20, 30}
	numbers = append(numbers, 40, 50)

	fmt.Println(numbers)
}

func sliceCapacity() {
	baseArray := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
	fmt.Printf("Базовый массив: %v\n", baseArray)

	baseSlice := baseArray[5:8]
	fmt.Printf(
		"Срез, основанный на базовом массиве длиной %d и емкостью %d: %v\n",
		len(baseSlice), cap(baseSlice), baseSlice)

	pointer := fmt.Sprintf("%p", baseSlice)

	baseSlice = append(baseSlice, 10)

	fmt.Printf("Массив: %v\n", baseArray)
	fmt.Printf(
		"Срез, основанный на базовом массиве длиной %d и емкостью %d: %v\n",
		len(baseSlice), cap(baseSlice), baseSlice)
	fmt.Println(pointer == fmt.Sprintf("%p", baseSlice))

	baseSlice = append(baseSlice, 11, 12, 13)

	fmt.Printf("Массив: %v\n", baseArray)
	fmt.Printf(
		"Срез, основанный на базовом массиве длиной %d и емкостью %d: %v\n",
		len(baseSlice), cap(baseSlice), baseSlice)
	fmt.Println(pointer == fmt.Sprintf("%p", baseSlice))
	// fmt.Println(pointer)
}

func mySlice() {
	// var baseSlice []int
	baseSlice := []int{1, 2, 3}
	// var baseSlice []int = []int{1, 2, 3}
	fmt.Printf("Type %T\n", baseSlice)
	fmt.Printf("Len baseSlice: %d, capacity: %d\n", len(baseSlice), cap(baseSlice))
	fmt.Println(baseSlice)

	// firstSlice :=
}

func deleteElement() {
	a := []int{1, 2, 3, 4, 5, 6, 7}
	a = append(a[0:2], a[3:]...)
	fmt.Println(a)
}

func copySlice() {
	a := []int{1, 2, 3}
	b := make([]int, 3, 3)
	n := copy(b, a)

	fmt.Printf("a = %v\n", a)
	fmt.Printf("b = %v\n", b)
	fmt.Printf("Скопировано %d элементов\n", n)
	// fmt.Printf("%v", b)
	// fmt.Printf("%d %d\n", len(b), cap(b))
}

func foo1() {
	var n, val int
	fmt.Scan(&n)
	var mySlice []int
	for i := 0; i < n; i++ {
		fmt.Scan(&val)
		mySlice = append(mySlice, val)
	}
	fmt.Println(mySlice[3])
}

func foo2() {
	var n, max int
	fmt.Scan(&n)
	mySlice := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&mySlice[i])
	}

	for index, value := range mySlice {
		fmt.Printf("Index: %d, value: %d\n", index, value)
		if value > max {
			max = value
		}
	}

	for _, value := range mySlice {
		fmt.Println(value)
	}

	fmt.Println(max)
	fmt.Printf("Создан slice %v\n", mySlice)
	fmt.Printf("len: %d, cap: %d\n", len(mySlice), cap(mySlice))
}
