diff --git a/README.md b/README.md index 714ee32..f2a1420 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Вот сюда нужно будет в первой работе с гитом добавит свое ФИО -## ФИО +## Иванова Мария Алексеевна ## Работа с репозиторием diff --git a/golang/internal/module2/bubblesort.go b/golang/internal/module2/bubblesort.go new file mode 100644 index 0000000..a7b0ea1 --- /dev/null +++ b/golang/internal/module2/bubblesort.go @@ -0,0 +1,44 @@ +package module2 + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +func BubbleSort() { + var n int + fmt.Scanln(&n) + reader := bufio.NewReader(os.Stdin) + line, err := reader.ReadString('\n') + if err != nil { + panic(err) + } + line = strings.TrimSuffix(line, "\n") + line = strings.TrimSuffix(line, "\r") + str_arr := strings.Split(line, " ") + arr := make([]int, n) + for idx, val := range str_arr { + arr[idx], err = strconv.Atoi(val) + if err != nil { + panic(err) + } + } + num_swaps := 0 + for i := 0; i <= n-1; i++ { + for j := 0; j < n-1-i; j++ { + if arr[j] > arr[j+1] { + tmp := arr[j+1] + arr[j+1] = arr[j] + arr[j] = tmp + num_swaps += 1 + fmt.Println(strings.Trim(fmt.Sprint(arr), "[]")) + } + } + } + if num_swaps == 0 { + fmt.Println("0") + } +} diff --git a/golang/internal/module2/differentcount.go b/golang/internal/module2/differentcount.go new file mode 100644 index 0000000..4e42790 --- /dev/null +++ b/golang/internal/module2/differentcount.go @@ -0,0 +1,37 @@ +package module2 + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +func DifferentCount() { + var n int + fmt.Scanln(&n) + reader := bufio.NewReader(os.Stdin) + line, err := reader.ReadString('\n') + if err != nil { + panic(err) + } + line = strings.TrimSuffix(line, "\n") + line = strings.TrimSuffix(line, "\r") + str_arr := strings.Split(line, " ") + arr := make([]int, n) + for idx, val := range str_arr { + arr[idx], err = strconv.Atoi(val) + if err != nil { + panic(err) + } + } + arr1 := MergeSort(arr, 0, n) + counter := 1 + for i := 0; i < n-1; i++ { + if arr1[i] != arr1[i+1] { + counter++ + } + } + fmt.Println(counter) +} diff --git a/golang/internal/module2/inversioncount.go b/golang/internal/module2/inversioncount.go new file mode 100644 index 0000000..08b2598 --- /dev/null +++ b/golang/internal/module2/inversioncount.go @@ -0,0 +1,39 @@ +package module2 + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +func InversionCount() { + var n int + fmt.Scanln(&n) + reader := bufio.NewReader(os.Stdin) + line, err := reader.ReadString('\n') + if err != nil { + panic(err) + } + line = strings.TrimSuffix(line, "\n") + line = strings.TrimSuffix(line, "\r") + str_arr := strings.Split(line, " ") + arr := make([]int, n) + for idx, val := range str_arr { + arr[idx], err = strconv.Atoi(val) + if err != nil { + panic(err) + } + } + count := 0 + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + if arr[i] > arr[j] { + count++ + } + } + } + fmt.Println(count) + +} diff --git a/golang/internal/module2/mergesort.go b/golang/internal/module2/mergesort.go new file mode 100644 index 0000000..fd1a4ad --- /dev/null +++ b/golang/internal/module2/mergesort.go @@ -0,0 +1,39 @@ +package module2 + +//"fmt" + +func merge(left []int, right []int) []int { + lst := make([]int, 0) + for len(left) > 0 && len(right) > 0 { + if left[0] < right[0] { + lst = append(lst, left[0]) + left = left[1:] + } else { + lst = append(lst, right[0]) + right = right[1:] + } + } + if len(left) > 0 { + lst = append(lst, left...) + } + if len(right) > 0 { + lst = append(lst, right...) + } + + return lst +} + +func MergeSort(arr []int, left int, right int) []int { + var res []int + if right-left == 1 { + res = make([]int, 1) + res[0] = arr[left] + return res + } + middle := (left + right) / 2 + leftPart := MergeSort(arr, left, middle) + rightPart := MergeSort(arr, middle, right) + res = merge(leftPart, rightPart) + //fmt.Println(left+1, right, res[0], res[len(res)-1]) + return res +} diff --git a/golang/internal/module2/pairsort.go b/golang/internal/module2/pairsort.go new file mode 100644 index 0000000..0a88ce5 --- /dev/null +++ b/golang/internal/module2/pairsort.go @@ -0,0 +1,55 @@ +package module2 + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +func PairSort() { + var n int + fmt.Scanln(&n) + reader := bufio.NewReader(os.Stdin) + massiv := make([][]int, 0) + for i := 0; i < n; i++ { + line, err := reader.ReadString('\n') + if err != nil { + panic(err) + } + line = strings.TrimSuffix(line, "\n") + line = strings.TrimSuffix(line, "\r") + string_arr := strings.Split(line, " ") + int_arr := make([]int, 0) + for _, val := range string_arr { + intVal, _ := strconv.Atoi(val) + int_arr = append(int_arr, intVal) + } + massiv = append(massiv, int_arr) + + } + for i := 0; i <= n-1; i++ { + for j := 0; j < n-1-i; j++ { + if massiv[j+1][1] > massiv[j][1] { + point := massiv[j+1] + massiv[j+1] = massiv[j] + massiv[j] = point + } else if massiv[j][1] == massiv[j+1][1] { + if massiv[j+1][0] < massiv[j][0] { + point := massiv[j+1] + massiv[j+1] = massiv[j] + massiv[j] = point + } + } + } + } + for _, a := range massiv { + for _, b := range a { + string_b := strconv.Itoa(b) + fmt.Printf(string_b) + fmt.Printf(" ") + } + fmt.Println() + } +} diff --git a/golang/internal/module2/stock.go b/golang/internal/module2/stock.go new file mode 100644 index 0000000..b4527ab --- /dev/null +++ b/golang/internal/module2/stock.go @@ -0,0 +1,30 @@ +package module2 + +import ( + "fmt" + "os" +) + +func Stock() { + var n, m int + fmt.Fscan(os.Stdin, &n) + kind := make([]int, n) + for i := 0; i < n; i++ { + fmt.Fscan(os.Stdin, &kind[i]) + } + + fmt.Fscan(os.Stdin, &m) + for i := 0; i < m; i++ { + var b int + fmt.Fscan(os.Stdin, &b) + kind[b-1]-- + } + + for i := 0; i < n; i++ { + if kind[i] < 0 { + fmt.Println("yes") + } else { + fmt.Println("no") + } + } +} diff --git a/golang/main.go b/golang/main.go index 8d32ddc..e098dd2 100644 --- a/golang/main.go +++ b/golang/main.go @@ -1,12 +1,45 @@ package main import ( + "bufio" "fmt" + "os" + "strconv" + "strings" "isuct.ru/informatics2022/internal/module1" + "isuct.ru/informatics2022/internal/module2" ) func main() { fmt.Println("Hello world") module1.Summ() + module2.BubbleSort() + module2.PairSort() + var n int + fmt.Scanln(&n) + reader := bufio.NewReader(os.Stdin) + line, err := reader.ReadString('\n') + if err != nil { + panic(err) + } + line = strings.TrimSuffix(line, "\n") + line = strings.TrimSuffix(line, "\r") + str_arr := strings.Split(line, " ") + arr := make([]int, n) + for idx, val := range str_arr { + arr[idx], err = strconv.Atoi(val) + if err != nil { + panic(err) + } + } + arr = module2.MergeSort(arr, 0, n) + for i := 0; i < n; i++ { + fmt.Print(arr[i], " ") + } + + module2.DifferentCount() + module2.InversionCount() + module2.Stock() + }