레이서가 커브 트랙의 적어도 한 턴을 돌고있는 레이스에서는 각 레이서의 시작 위치가 엇갈리게되므로 각 레이서가 트랙 주위에서 동일한 거리를 이동합니다 (그렇지 않으면 가장 안쪽 차선의 레이서가 큰 이점을 갖습니다) ).
타원형 트랙의 장축과 부축의 길이 (또는 원한다면 반 장점과 반 원점)와 트랙의 차선 수를 고려하여 각 차선이 가장 안쪽 차선의 시작점으로부터의 거리를 출력하십시오 비틀 거려야합니다.
명세서
- 각 차선은 가장 짧은 차선보다 5 단위 더 긴 반장 축을 가진 타원입니다. 간단히하기 위해 레인의 너비가 0이라고 가정합니다.
- 가장 안쪽 차선은 항상 0에서 시작하며 다른 모든 시작 지점은 이전 시작 지점보다 크거나 같은 양의 정수입니다.
- 입력 및 출력은 편리하고 합리적인 형식 일 수 있습니다.
- 입력은 항상 정수입니다.
- 트랙의 둘레를 실제 값의 0.01 단위 이내로 계산해야합니다.
- 출력은 가장 가까운 정수 (마루)로 내림됩니다.
- 결승선은 가장 안쪽 경주자의 출발점입니다. 레이스에는 랩이 하나만 있습니다.
- 축의 길이는 트랙의 가장 안쪽 차선을 사용하여 측정됩니다.
- 가장 안쪽 레인의 오프셋에 0을 출력하는 것은 선택 사항입니다.
테스트 사례
체재: a, b, n -> <list of offsets, excluding innermost lane>
20, 10, 5 -> 30, 61, 92, 124
5, 5, 2 -> 31
15, 40, 7 -> 29, 60, 91, 121, 152, 183
35, 40, 4 -> 31, 62, 94
이 테스트 케이스는 Ramanujan이 고안 한 타원 둘레의 근사치를 사용하는 다음 Python 3 스크립트로 생성되었습니다.
#!/usr/bin/env python3
import math
a = 35 # semi-major axis
b = 40 # semi-minor axis
n = 4 # number of lanes
w = 5 # spacing between lanes (constant)
h = lambda a,b:(a-b)**2/(a+b)**2
lane_lengths = [math.pi*(a+b+w*i*2)*(1+3*h(a+w*i,b+w*i)/(10+math.sqrt(4-3*h(a+w*i,b+w*i)))) for i in range(n)]
print("{}, {}, {} -> {}".format(a, b, n, ', '.join([str(int(x-lane_lengths[0])) for x in lane_lengths[1:]])))
사용 된 근사값은 다음과 같습니다.
마지막으로 오프셋 계산을 이해하는 데 유용한 다이어그램이 있습니다.
h**5
잘 받고, 0.01
값 광범위한.