0%

[學習] Check.io - Nearest Value

check.io 上的題目:求出與指定數字最接近之值
此系列文章主要是自己在解題時覺得有趣的題目,記錄下來讓自己以後好複習,有興趣的人可以參考看看

lamdba 的用法

語法: lambda parameters: expression

  • parameters (參數) 可以是多個參數,參數間要由 “ , ” 作間隔
  • expression (運算式)

example_1 input:

example_1
1
2
a = lambda x: x**2
print(a(10))

output:

1
100

example_2 input:

example_2
1
2
a = lambda x, y: x * y
print(a(10, 11))

output:

1
110

以 example_1 為例 lambda 也等於

1
2
3
def example(x):
return x**2
print(example(10))

以 example_2 為例 example_2 也可以寫成

1
print((lambda x, y: x * y)(10, 11))

min/max 的用法

語法: max(parameters, key=expression)

  • expression (運算式) 返回要執行比較的值 (滿抽象的QQ

example_1 input:

1
2
list = [(1, 'a'), (6, 'd'), (4, 'e'), (-2, 'y')]
max(list)

output:

1
(6, 'd')

example_2 input:

tuple 型態,比較的話會先看第一個位置的值,一樣的話看第二個位置的值

1
2
list = [(1, 'a'), (6, 'd'), (6, 'e'), (-2, 'y')]
max(list)

output:

1
(6, 'e')

example_3 input:

tuple 型態,指定要比較的為每個 tuple 裡 index=1 的值

1
2
list = [(1, 'a'), (6, 'd'), (4, 'e'), (-2, 'y')]
max(list, key=lambda l: l[1])

output:

1
(-2, 'y')

解答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def nearest_value(values: set, one: int) -> int:
# your code here
return min(values, key=lambda x: (abs(one - x), x))


if __name__ == '__main__':
print("Example:")
print(nearest_value({4, 7, 10, 11, 12, 17}, 9))

# These "asserts" are used for self-checking and not for an auto-testing
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({4, 7, 10, 11, 12, 17}, 100) == 17
assert nearest_value({5, 10, 8, 12, 89, 100}, 7) == 8
assert nearest_value({-1, 2, 3}, 0) == -1
print("Coding complete? Click 'Check' to earn cool rewards!")


參考網站