Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 25, 2022 12:21:40

VladimirDeg
Зарегистрирован: 2022-06-16
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение ближайщего числа

Привет! Помогите справится с одним из условий задачи:
Вам даны список значений в виде множества (Set) и значение, относительно которого, надо найти ближайшее.

Например, мы имеем следующий ряд чисел: 4, 7, 10, 11, 12, 17. И нам нужно найти ближайшее значение к цифре 9. Если отсортировать этот ряд по возрастанию, то слева от 9 будет 7, а справа 10. Но 10 - находится ближе, чем 7, значит правильный ответ 10.

Несколько уточнений:

Если 2 числа находятся на одинаковом расстоянии - необходимо выбрать наименьшее из них;
Ряд чисел всегда не пустой, т.е. размер >= 1;
Переданное значение может быть в этом ряде, а значит оно и является ответом;
В ряде могут быть как положительные, так и отрицательные числа, но они всегда целые;
Ряд не отсортирован и состоит из уникальных чисел.

Написал такой код:

 def nearest_value(values: set, one: int) -> int:
    res = sorted(list(values), key=lambda x: abs(x-one))
    return res[0]
print(nearest_value({4, 7, 10, 11, 12, 17}, 9))
Проходят варианты:
assert nearest_value({4, 7, 10, 11, 12, 17}, 9) == 10
assert nearest_value({4, 7, 10, 11, 12, 17}, 8) == 7
assert nearest_value({4, 8, 10, 11, 12, 17}, 9) == 8
assert nearest_value({4, 9, 10, 11, 12, 17}, 9) == 9
assert nearest_value({4, 7, 10, 11, 12, 17}, 0) == 4
assert nearest_value({-6, -2, 4, 7, 12, 17}, -4) == -6
assert nearest_value({4, 7, 10, 11, 12, 17}, 100) == 17
assert nearest_value({5, 10, 8, 12, 89, 100}, 7) == 8
assert nearest_value({5}, 5) == 5
assert nearest_value({5}, 7) == 5

Ошибка с таким вариантом:
nearest_value({0, -2}, -1)
Your result:0
Right result:-2

Отредактировано VladimirDeg (Сен. 25, 2022 12:23:44)

Офлайн

#2 Сен. 25, 2022 12:47:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9891
Репутация: +  854  -
Профиль   Отправить e-mail  

Нахождение ближайщего числа

  
>>> def nearest_value(values: set, one: int) -> int:
...     res = sorted(list(values), key=lambda x: (abs(x-one), x))
...     return res[0]
... 
>>> nearest_value({0, -2}, -1)
-2
>>> 
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 9) == 10
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 8) == 7
>>> assert nearest_value({4, 8, 10, 11, 12, 17}, 9) == 8
>>> assert nearest_value({4, 9, 10, 11, 12, 17}, 9) == 9
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 0) == 4
>>> assert nearest_value({-6, -2, 4, 7, 12, 17}, -4) == -6
>>> assert nearest_value({4, 7, 10, 11, 12, 17}, 100) == 17
>>> assert nearest_value({5, 10, 8, 12, 89, 100}, 7) == 8
>>> assert nearest_value({5}, 5) == 5
>>> assert nearest_value({5}, 7) == 5
>>>



Офлайн

#3 Сен. 25, 2022 14:39:04

VladimirDeg
Зарегистрирован: 2022-06-16
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Нахождение ближайщего числа

Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version