Параллелизм ч.1: Напишите программу 3

Сообщения
1 471
Реакции
271
Сайт
tehadm.ru
Напишите элемент конвейера (функцию), что запоминает предыдущее значение и отправляет значения на следующий этап конвейера только если оно отличается от того, что пришло ранее.

Ваша функция должна принимать два канала - inputStream и outputStream, в первый вы будете получать строки, во второй вы должны отправлять значения без повторов. В итоге в outputStream должны остаться значения, которые не повторяются подряд. Не забудьте закрыть канал ;)

Функция должна называться removeDuplicates()

Выводить или вводить ничего не нужно!
 
C-подобный:
package main

import (
    "fmt"
)

func removeDuplicates(inputStream, outputStream chan string) {
    var previousValue string
    for v := range inputStream {
        if previousValue != v {
            outputStream <- v
            previousValue = v
        }
    }
    close(outputStream)
}

func main() {
    inputStream := make(chan string)
    outputStream := make(chan string)
    go removeDuplicates(inputStream, outputStream)

    var input string
    fmt.Printf("Enter some text with duplicates: ")
    fmt.Scanln(&input)

    go func() {
        defer close(inputStream)

        for _, v := range input {
            inputStream <- string(v)
        }
    }()

    fmt.Printf("Output without duplicates: ")
    for v := range outputStream {
        fmt.Printf("%s", v)
    }
    fmt.Printf("\n")
}
 
Назад
Верх Низ