Перейти к содержимому

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.WaitGroup
m:=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)
}