- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathodometer.py
More file actions
Latest commit
39 lines (27 loc) · 1.27 KB
/
Copy pathodometer.py
File metadata and controls
39 lines (27 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
defconvertToList(num: int) ->list:
return [int(x) forxinstr(num)]
defisValid(numberList: list) ->bool:
returnsorted(numberList) ==numberListandlist(sorted(set(numberList))) ==numberList
defcheckBorderConditions(currIndex: int, length: int) ->int:
returnlength-abs(currIndex) iflen(odometer) ==currIndexorcurrIndex<0elsecurrIndex
deffindReadings(num: int, readings: int, direction: int, odometer: list) ->int:
currIndex=odometer.index(num)
readingsList= []
whilereadings>0:
currIndex+=1*direction
readings-=1
currIndex=checkBorderConditions(currIndex, len(odometer))
readingsList.append(odometer[currIndex])
returnreadingsList
defgenerateOdometer(size: int) ->list:
return [int(x) forxinrange(10**(size-1), 10**size) ifisValid(convertToList(x))]
defcalDistance(num1: int, num2: int, odometer: list):
returnodometer.index(num2)-odometer.index(num1) ifnum2>num1elselen(odometer) -odometer.index(num2)-odometer.index(num1)
size=4
firstNum=6789
nextNum=1234
readings=10
direction=1
odometer=generateOdometer(size)
print(findReadings(5789, readings, direction, odometer))
print(calDistance(firstNum, nextNum, odometer))