작업
교통 교차로 구조를 취하고 차량이 통과 할 순서를 출력하는 프로그램 또는 기능을 작성하십시오.
출력은 다음과 같은 형식으로 많아야 네 줄 함유한다 #. x->y\n
, #
도트 다음 시퀀스 번호 번호를 .
, x
그리고 y
문자이다 ["N", "E", "S", "W"]
. 문자로 구분해야합니다 ->
. 문자열 배열을 반환하지 않으면 각 줄은 \n
(새 줄 문자)로 끝나 거나 시스템과 동일해야합니다.
입력은 다음과 같은 형식이어야합니다.
- 1 부 : 4 개의 문자, 각각 N, E, S, W 순서로 소스 도로의 목적지 도로 (시계 방향). 허용되는 문자는
N
,S
,W
,E
또는. 공간은 특정 도로에 차량이 없음을 의미합니다. 예를 들어 문자열
S WE
은 N 차량이 남쪽으로 가고 싶다는 것을 의미하고, 공간은 E 차량이 없음을W
의미합니다E
. - 파트 2-비상 차량의 공간 또는 단일 문자 의미.
- 파트 3-두 도로의 우선 순위를 결정하는 두 문자 (예 :
NE
북쪽과 동쪽 모두 남쪽과 서쪽보다 우선 순위가 높음) 더 편한 경우 우선 순위가 낮은 도로를 이용할 수 있습니다 (이 경우SW
).
해결 못하는 상황에서 당신은 같은 사용자에게 분명하다 한 줄의 문자열을 반환 할 수 있습니다 unsolvable
, no solution
및 유사한. JavaScript 사용자는 내장 undefined
상수를 사용할 수 있습니다 .
이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다.
교통 규칙
일부 규칙은 국가 교통 규칙을 따르지 않을 수 있습니다. 도전 과제를보다 쉽게하기 위해 일부는 단순화되었습니다. 실제 교통 시스템을위한 안내서로이 질문을 사용하지 마십시오.
- 이 문제를 해결하려면 오른쪽 트래픽 만 사용할 수 있습니다.
- 교통 교차로는 정확히 한 지점에서 만나는 4 개의 도로로 구성됩니다. 그들은 표시됩니다
N
( "북한"에 대한 등),S
,W
,E
. 이 문자가 대신 사용되어야x
하고y
상기 출력 예이다.
- 각 도로에는 최대 하나의 차량이 있습니다. 각 도로에 차량이있는 것은 아닙니다. 각 차량은 4 가지 방향 중 하나로 운전할 수 있습니다. 좌회전, 우회전, 직진 또는 U 턴 .
- 두 차량의 경로가 서로 겹치지 않으면 (충돌하지 않으면), 같은 순간에 갈 수 있습니다. 두 대의 차량이 있으면 경로가 충돌하지 않습니다 (목록이 완전하지는 않지만 의도적 인 것이며 단서가 될 수 있습니다).
- 반대 방향에서오고 둘 다 똑바로 가거나 둘 중 적어도 하나가 우회전합니다.
- 반대 방향에서오고 둘 다 좌회전합니다.
- 반대 방향에서 오면 그중 하나가 어떤 방향으로 회전하거나 U 턴을하는 반면 다른 하나는 U 턴을합니다.
- 직교 방향에서 오면 왼쪽에서 오른쪽으로 회전하고 다른 방향으로 U 턴을하지 않습니다
아래 경로가 충돌하지 않는 몇 가지 예입니다. 세 번째 그림에서 N이 U 턴을하더라도 N의 경로는 E의 경로와 충돌합니다.
- 두 경로가 충돌하면 다른 규칙을 사용해야합니다. 두 대의 차량이 동일한 우선 순위 도로에있는 경우 (아래 참조) 다음과 같은 차량에 대한 권리 가 부여됩니다.
- 직교 방향에서 오는 경우 오른쪽 도로에서 나옵니다.
- 다른 쪽이 좌회전하면 우회전
- 상대방이 U 턴을하면 직진하거나 우회전합니다.
아래의 두 가지 예에서, E 차량은 차량 (S)에 대한 권리를 가진다.
아래 예제에서 먼저 W, N, E, 마지막 S가됩니다.
이 특별한 경우 프로그램의 출력은 다음과 같아야합니다.
1. W->S
2. N->S
3. E->S
4. S->S
모든 운전자는 회전 신호를 사용 하고 다른 모든 운전자 가 가고 싶어하는 곳을 알고 있습니다 (간단하게하기 위해 왼쪽 회전과 U 회전을 구별 할 수 있다고 가정합니다).
때때로 도로에는 우선 순위 표시가 주어지며, 이는 위의 규칙보다 더 중요합니다. 우선 순위가 높은 도로에는 우선 순위 표시 ( 우선 순위 표시 이미지 )가 있습니다. 우선 도로는 직진하지 않는 경우, 추가적인 징후처럼 사용 이 하나 . 우선 순위가 낮은 도로에는 양보 표지판 또는 정지 표지판이 있습니다 (동일 함). 전혀 또는 정확히 두 개의 다른 도로가 우선 순위를 갖습니다. 프로그램 사용자는 우선 순위가 더 높거나 낮은 도로를 입력 할 수 있어야합니다.
- 우선 순위가 높은 도로에서 오는 차량은 왼쪽에 있더라도 우선 순위가 낮은 도로에서 오는 차량보다 우선합니다.
- 우선 순위가 동일한 도로에서 오는 두 차량의 경로가 충돌하면 위의 오른쪽 규칙이 활성화됩니다.
아래 예에서 도로 S와 W에 우선 순위 표시가 있으므로 N과 E의 차량이 길을 제시해야합니다. S 차량은 오른쪽에 있기 때문에 W 차량보다 우선 순위가 높습니다. 그런 다음 W보다 우선 순위가 높은 도로에 있기 때문에 W로갑니다. 차량 N은 오른쪽에 있기 때문에 E와 맞습니다. 마지막으로 E.
이 특별한 경우 프로그램의 출력은 다음과 같아야합니다.
1. S->W
2. W->N
3. N->S
4. E->W
- 하나 이상의 차량이 비상 차량 일 수 있으며,이 차량은 어느 방향에서 오는지, 어떤 방향으로 있는지에 관계없이 우선 순위를 갖습니다 (항상 가장 먼저갑니다). 이 프로그램은 사용자가 비상 차량 인 차량에 출입 할 수 있도록해야합니다. 마지막 예에서 N은 긴급 차량이라는 점을 고려하면 N이 먼저 가고 S, W가 마지막 E가됩니다.
N에 비상 차량이있는이 특별한 경우 프로그램의 출력은 다음과 같아야합니다.
1. N->S
2. S->W
3. W->N
4. E->W
- 두 대의 차량이 같은 순간에 이동할 수있는 경우 (경로가 충돌하지 않고 다른 차량으로 이동할 필요가없는 경우) 프로그램에서이를 찾아서 동일한 시퀀스 번호를 갖는 것으로 반환해야합니다.
아래 예에서 N 및 E 경로와 E 및 S 또는 W 및 E 경로가 충돌하지 않습니다. S는 N에, W는 S에 줘야하므로 S는 E 등과 동시에 갈 수 없습니다. N과 E는 할 수 있습니다. 따라서 처음에는 N과 E가 함께 가고 S와 W가 마지막보다갑니다.
프로그램의 올바른 결과는 다음과 같아야합니다.
1. N->W
1. E->E
2. S->W
3. W->N
당신은 라인의 순서를 자유롭게 선택할 수 있습니다
1
(N->W / E->E
에 해당합니다E->E / N->W
)
- 때로는 교통량이 해결 불가능한 상황으로 이어질 수 있으며, 이로 인해 어떤 차량도 갈 수 없습니다. 실제로는 운전자 중 한 사람이 자발적으로 자신의 권리에서 사임하면 해결됩니다. 여기서
unsolvable
질문의 첫 부분에서 언급 한 것처럼 프로그램이 출력되어야합니다 .아래는 해결할 수없는 상황의 예입니다. E는 W에게, W는 S에게, S는 E에게