Tinkoff / Тинькофф (T-Bank / Т-Банк) - Платформа
Актуальность: 1 кв 2025
Задача: Реализовать корректную функцию double (которой нет в коде), чтобы операция *2 выполнялась один раз для каждого значения. Также нужно объяснить, почему текущий код работает таким образом и исправить его. go/basics
Заголовок раздела «Задача: Реализовать корректную функцию double (которой нет в коде), чтобы операция *2 выполнялась один раз для каждого значения. Также нужно объяснить, почему текущий код работает таким образом и исправить его. go/basics»func appendLenWrong(numbers []*int) { size := len(numbers) // 3 numbers = append(numbers, &size)}
func appendLenGoodFirst(numbers []*int) { size := len(*numbers) *numbers = append(*numbers, &size)}
func appendLenGoodSecond(numbers []*int) []*int { size := len(numbers) numbers = append(numbers, &size) return numbers}
func main() { numbers := make([]*int, 0, 5) var number int for range 3 { number++ numbers = append(numbers, &number) }
for _, number := range numbers { fmt.Printf("%d ", *number) }}Задача: Что выведет программа и почему? Также нужно пофиксить код. go/puzzles
Заголовок раздела «Задача: Что выведет программа и почему? Также нужно пофиксить код. go/puzzles»func RunWriter() <-chan map[string]int { var prices = make(chan map[string]int)
go func() { var currentPrice = map[string]int{ "AAPL ": 163, "USD ": 117, "EUR ": 124, "NVDA ": 234, }
for i := 1; i < 5; i++ { for key, value := range currentPrice { currentPrice[key] = int(float64(value) * 1.3) }
prices <- currentPrice time.Sleep(100 * time.Millisecond) }
}()
return prices}
func RunProcessor(wg *sync.WaitGroup, prices []map[string]int) { go func() { defer wg.Done()
for _, price := range prices { for key, value := range price { price[key] = value + 1 }
fmt.Println(price) } }()}
func main() { p := RunWriter()
for price := range p { fmt.Println(price) }
var prices []map[string]int
for { value, ok := <-p if !ok { break }
prices = append(prices, value) }
for _, price := range prices { fmt.Println(price) }
wg := &sync.WaitGroup{}
for i := 0; i < 10; i++ { wg.Add(1) RunProcessor(wg, prices) }
wg.Wait()}Задача: Что выведет программа и почему? Также нужно пофиксить код. go/puzzles
Заголовок раздела «Задача: Что выведет программа и почему? Также нужно пофиксить код. go/puzzles»func main() {var wc sync.WaitGroupm:=make(chan string, 3)mu:=sync.Mutex{}for i:=0; i<5; i++{wc.Add(1)go func(ch chan<-string, i int, group*sync.WaitGroup) {defer wc.Done()mu.Lock()mchm<-fmt.Sprintf("Goroutine %s ", strconv.Itoa(i))mu.Unlock()}(m, i, &wc)}
go func() {wc.Wait()close(m)}()
for v:=range m{fmt.Println(v)}
Deadlock из-за бесконечного циклаfor{select{case q:=<-m:fmt.Println(q)}}
wc.Wait()close(m)}