N, S, E 및 W의 문자열이 주어지면 소수 자릿수 5 자리까지 올바른 방위 (북에서 시계 방향 각도)를 출력합니다.
에서 기존의 나침반 표기법 , 문자열은 2 (북북서 또는 ESE 같은) 이러한 문자로 구성되어 있습니다. 여기에는 WNNNSE와 같이 4를 모두 포함하는 문자열도 허용해야합니다 . 인간은 2 개의 기호 만 사용하여 의미를 직관적으로 이해할 수 있습니다. 4 개의 기호를 허용하면 읽기가 끔찍하지만 주어진 정확도로 베어링을 설명하는 짧은 방법을 사용할 수 있습니다.
(AS는 지적 주석 에 의해 user2357112 , 내가 잘못된 가정에이 문제를 기반으로 한 있도록, 특정 방위를 들어, 4 기호 문자열이 두 기호 문자열과 정확히 같은 길이 될 것이라고 증명할 수 밝혀졌습니다. 이 실용적인 목적의 부족이 도전에 대한 즐거움을 방해하지 않기를 바랍니다 ...)
정확한 방법은 아래에 설명되어 있으며 기존 표기법과 동일합니다 (변경하지 않고 확장 함).
입력
- 입력은 문자 만 포함하는 단일 문자열입니다
NESW입니다. - 전처리를 포함하지 않는 경우 원하는 경우 입력이 일련의 문자 일 수 있습니다. 예를 들어 중첩 목록을 가져옵니다.
[N, [E, [S, [W]]]]처리 순서를 돕기 을 것은 허용되지 않습니다. - 다른 캐릭터를 사용할 수 없습니다.
1234대신에 문자열을 사용할 수 없습니다NESW.
산출
- 출력은 10 진수 또는 1의 문자열 표현이어야합니다 (이성 / 분수 아님).
- 후행 0을 표시 할 필요는 없습니다. 베어링이
9.00000인 경우 출력9도 소수점 5 자리까지 정확한 것으로 계산됩니다. - 출력 범위는 [0, 360)입니다. 즉, 0은 포함하고 360은 제외합니다.
- 출력은 소수점 다섯 자리로 반올림하여 확인합니다. 베어링이 0.000005 인 경우 0.00001로 반올림합니다. 출력 0.00001과 0.000005는 모두 정확합니다.
- 일부 입력에 대해서는 과학적 표기법으로 출력 할 수 있습니다. 예를 들어,
1e-5대신0.00001.
변환
- 단일 문자 나침반 점
N,E,S, 및W대응하여 0, 90, 180, 270도 각각. - 이 중 하나를 문자열에 추가하면 단일 문자의 베어링과 원래 문자열의 베어링을 이등분하는 베어링이 생성됩니다.
- NE가 225 도가 아닌 45도를 나타내도록 두 개의 가능한 이등분 베어링 중 가장 가까운 것이 선택됩니다.
- 이등분 될 각도가 180 도인 경우를 제외하고는 분명합니다. 따라서
NS,SN,WE, 및EW정의되지 않은 베어링에 해당하고, 입력은 이들의에 끝이 없을 것입니다. 그러나 입력 문자열의 다른 곳에 나타날 수 있습니다. 모호성이 없습니다. - 마지막 두 문자가 동일하면 이분법이 동일한 방위를 반환하므로 마지막 문자는 중복됩니다. 이것은 표기법에 아무것도 추가하지 않기 때문에 코드는 이것을 처리 할 필요가 없습니다. 따라서
NN,EE,SS, 그리고WW정의되지 않은 베어링에 해당하고, 입력은 이들의에 끝이 없을 것입니다. 그러나 입력 문자열의 다른 곳에 나타날 수 있습니다.
예
N: 0
E: 90
S: 180
SE: halfway between S and E: 135
NSE: halfway between N and SE: 67.5
NNSE: halfway between N and NSE: 33.75
NNNSE: halfway between N and NNSE: 16.875
NNNNSE: halfway between N and NNNSE: 8.4375
테스트 사례
제출은 모든 테스트 사례에 대해 올바른 결과를 제공하는 경우에만 유효합니다. 테스트 케이스는 배정 밀도로 처리 할 수있는 것의 한계까지 밀려납니다. 기본적으로 단 정밀도를 사용하는 언어의 경우 올바른 출력을 얻으려면 바이트를 사용하여 배정 밀도를 지정해야합니다.
테스트 케이스 출력은 소수점 5 자리로 반올림되며 임의의 정밀도로 표시됩니다. 둘 다 유효한 출력입니다.
WNE 337.5 337.5
WEN 337.5 337.5
WEWEWEWEWEWEWEWEWEWEWEN 330.00001 330.000007152557373046875
NESWNESWNESWNESWNESWNESWNESW 90 89.99999932944774627685546875
NNNNNNNNNNNNNNNNNNNNNNNE 0.00001 0.0000107288360595703125
NNNNNNNNNNNNNNNNNNNNNNNW 359.99999 359.9999892711639404296875
SNNNNNNNNNNNNNNNNNNNNNNNE 90.00001 90.00000536441802978515625
SNNNNNNNNNNNNNNNNNNNNNNNW 269.99999 269.99999463558197021484375
채점
이것은 code-golf 입니다. 점수는 소스 코드의 길이 (바이트)이며 가장 짧은 승입니다.
페단 트리
"North by North West"가 올바른 나침반 방향이라고 생각하는 실수를했습니다. 그것은 도전 생각을했다,하지만 난 다음에서 발견 된 이후 행복한 실수, 위키 백과 페이지 :
"알프레드 히치콕 1959 영화의 제목, 북북서로 진로를 돌려라는 실제로 32 바람 나침반 방향 지점이 아니라, 영화에는 노스 웨스트 항공에 대한 언급이 포함되어 있습니다. "
또한이 과제에 사용 된 방법은 16 포인트 나침반을 포함하여 기존 나침반 포인트와 만 일치한다는 것이 밝혀졌습니다. 해당 페이지에 설명 된 32- 바인 컴퍼스는 미묘하게 다르며이 과제에 대한 존재를 편리하게 간과했습니다. .
마지막으로 "South East"대신 "Southeast"를 사용해야한다고 생각하는 사람은
WNNNSE경우 출력은 다음과 같습니다 323.4375. 이 경우와 같은 방식으로 적용되는 연습은 예제 섹션을 참조하십시오.
f(N,N,N,S,E)괜찮습니까?
WNNNSE<= 게시물 시작시이 예제 항목의 결과는 무엇입니까? 그것은 나에게는 유효하지 않은 것처럼 들리지만 말하기 어렵다.