Golang. Exercises for slices


Let’s look at some examples of slice programs in Go.

First one… The user enters two rows of numbers. Our task is to collect them in one slice, removing duplicates. As an exercise, we will not use cards, but ordinary slices.

Code:

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func getInput(r *bufio.Reader) []int {
	input, _ := r.ReadString('\n')

	input = strings.TrimSpace(input)

	str2slice := strings.Split(input, " ")

	var nums []int

	for _, v := range str2slice {
		num, _ := strconv.Atoi(v)
		nums = append(nums, num)
	}

	return nums
}

func main() {
	r := bufio.NewReader(os.Stdin)

	line1 := getInput(r)
	line2 := getInput(r)

	var dupl bool // duplicates flag

	for _, v := range line2 {
		dupl = false
		for _, y := range line1 {
			if v == y {
				dupl = true
			}
		}
		if !dupl {
			line1 = append(line1, v)
		}
	}

	fmt.Println(line1)
}

Homework: use maps instead of slices – it will be easier and faster to check for duplicates.


The user enters two strings – a string and a filter. The task is to exclude the filter words from the first string. Example output:

cat dog a b c fox
a god fox c
[cat dog b]

Code:

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func getInput(r *bufio.Reader) []string {
	input, _ := r.ReadString('\n')

	input = strings.TrimSpace(input)

	str2slice := strings.Split(input, " ")

	return str2slice
}

func main() {
	r := bufio.NewReader(os.Stdin)

	line := getInput(r)
	filter := getInput(r)

	var exist bool
	var words []string

	for i := range line {
		exist = false
		for j := range filter {
			if line[i] == filter[j] {
				exist = true
				break
			}
		}
		if !exist {
			words = append(words, line[i])
		}
	}

	fmt.Println(words)
}

Find longest word in a sentence without len()

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func getInput(r *bufio.Reader) string {
	input, _ := r.ReadString('\n')

	return strings.ToLower(strings.TrimSpace(input))
}

func main() {
	r := bufio.NewReader(os.Stdin)

	line := getInput(r)

	slice := strings.Split(line, " ")

	var max int
	var current int
	var word string

	for _, v := range slice {
		current = 0
		for range v {
			current++
		}
		if current > max {
			max = current
			word = v
		}
	}

	fmt.Println(word)

}

 


This entry was posted in Go (en). Bookmark the permalink.

Leave a Reply

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.