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

Задача на Go

Я Оно Ученик (129), на голосовании 1 месяц назад
Дан неотсортированный слайс целых чисел. Напишите функцию UnderLimit(nums []int, limit int, n int) ([]int, error), которая будет возвращать первые n (либо меньше, если остальные не подходят) элементов, которые меньше limit. В случае ошибки функция должна вернуть nil и описание ошибки.
Голосование за лучший ответ
Кирилл Васьковский Профи (971) 2 месяца назад
Для решения данной задачи мы должны написать функцию, которая будет принимать неотсортированный слайс целых чисел и возвращать первые n элементов, которые меньше заданного предела limit. Если таких элементов меньше n, то возвращается столько, сколько их есть. Если возникнет ошибка, функция должна вернуть nil и описание ошибки.

Давайте разберем шаги, необходимые для реализации этой функции:

Проверка входных данных: Убедимся, что переданный слайс не является nil и что n не отрицательное число.
Инициализация результирующего слайса: Создадим пустой слайс для хранения результатов.
Итерация по входным данным: Переберем каждый элемент в слайсе и проверим, меньше ли он limit.
Заполнение результата: Если элемент меньше limit, добавим его в результирующий слайс. Прекратим добавление, как только достигнем n элементов.
Возврат результата: Вернем результирующий слайс. Если произошла ошибка (например, n больше длины слайса), вернем ошибку.
Теперь перейдем к реализации функции на Go:

package main

import (
"errors"
"fmt"
)

func UnderLimit(nums []int, limit int, n int) ([]int, error) {
// Проверка на отрицательное значение n
if n < 0 {
return nil, errors.New ("n cannot be negative")
}

// Инициализация результирующего слайса
result := []int{}

// Перебор элементов в слайсе
for _, num := range nums {
if num < limit {
result = append(result, num)
if len(result) == n {
break
}
}
}

return result, nil
}

func main() {
nums := []int{5, 3, 10, 7, 2, 8}
limit := 6
n := 3

result, err := UnderLimit(nums, limit, n)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
Объяснение:
Проверка на отрицательное значение n: Поскольку n не может быть отрицательным, сразу возвращаем ошибку, если это условие нарушено.
Цикл: Проходим по каждому числу в слайсе и проверяем, меньше ли оно limit.
Добавление в результат: Добавляем число в результирующий слайс, если оно меньше limit. Прекращаем добавление, как только достигли n элементов.
Возврат результата: Если все прошло успешно, возвращаем результирующий слайс. Если обнаружена ошибка, возвращаем её описани Написала gpt 4o делац с этим что хочешь
Кучин Алексей Ученик (183) 2 месяца назад
Вот список тестов, на тесте номер два (nums: nil, два парамтра пропущены), программа падает. А должна передавать текст ошибки.

{
nums: []int{4, 7, 89, 3, 21, 2, 5, 7, 32, 4, 6, 8, 0, 3, 4, 6, 2, 115, 12},
n: 5,
limit: 3,
expected: []int{2, 0, 2},
wantError: false,
},
{
nums: nil,
wantError: true,
},
{
nums: []int{},
n: 5,
limit: 3,
expected: []int{},
wantError: false,
},
{
nums: []int{3, 5, 6},
n: 5,
limit: 10,
expected: []int{3, 5, 6},
wantError: false,
},
{
nums: []int{-13, 0, 6},
n: 1,
limit: -5,
expected: []int{-13},
wantError: false,
},
{
nums: []int{},
n: -1,
limit: 5,
wantError: true,
}
Alexey PavlovУченик (141) 2 месяца назад
Программа не падает, пропущенные параметры в тестах конвертируются в значения по-умолчанию (для int нули)
Мирослава Сирень Ученик (103) 2 месяца назад
package main

import (
"errors"
)

func UnderLimit(nums []int, limit int, n int) ([]int, error) {
if n <= 0 {
return nil, errors.New ("invalid n value")
}

if len(nums) == 0 {
return nums, nil
}

var result []int
counter := 0

for _, num := range nums {
if num < limit {
result = append(result, num)
counter++
if counter == n {
break
}
}
}

return result, nil
}
Похожие вопросы