Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите сдать задания Golang

Alexei Antipiev Ученик (196), на голосовании 3 дня назад
Напишите функцию

Contains(ctx context.Context, r io.Reader, seq []byte) (bool, error)

которая должна найти первое вхождение байт seq в данных, доступных через Reader r. Если последовательность найдена - верните true, nil, иначе false, nil. В случае возникновения ошибки - false и возникшую ошибку. В случае отмены контекста - функция должна вернуть false и ошибку - причину отмены контекста.
Голосование за лучший ответ
S.H.I. Оракул (72748) 1 месяц назад
 package main 

import (
"bytes"
"context"
"io"
)

func Contains(ctx context.Context, r io.Reader, seq []byte) (bool, error) {
if len(seq) == 0 {
return true, nil
}
bufSize := 4096
buf := make([]byte, bufSize)
var prev []byte
for {
select {
case <-ctx.Done():
return false, ctx.Err()
default:
}
n, err := r.Read(buf)
if n > 0 {
data := append(prev, buf[:n]...)
if bytes.Index(data, seq) >= 0 {
return true, nil
}
if len(data) >= len(seq)-1 {
prev = data[len(data)-len(seq)+1:]
} else {
prev = data
}
}
if err != nil {
if err == io.EOF {
break
}
return false, err
}
}
return false, nil
}
больше не чат гпт ???? Мыслитель (9295) 1 месяц назад
 func Contains(ctx context.Context,r io.Reader,s []byte)(bool,error){ 
if len(s)==0{return true,nil}
c:=make(chan struct{d []byte;e error},1)
go func(){c<-struct{d []byte;e error}{io.ReadAll(r)}}()
select{
case <-ctx.Done():return false,ctx.Err()
case r:=<-c:return r.e==nil&&bytes.Contains(r.d,s),r.e
}
}
Похожие вопросы