이 도전은 Zachtronics 게임 Infinifactory 에서 느슨하게 영감을 얻었습니다 .
로 표시된 직사각형 컨베이어 그리드의 하향식보기가 제공됩니다 >v<^
. 공간이없는 컨베이어가없는 셀이있을 수 있습니다. 예를 들면 다음과 같습니다.
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
이 설정은 무한한 수의 공백으로 암시 적으로 둘러싸여 있습니다.
또한 그리드 왼쪽 상단 모서리에있는 컨베이어에 놓인 직사각형화물 조각의 치수가 제공됩니다. 당신의 임무는화물이 이제까지 멈춰 질 것인지 또는 루프에서 움직일 것인지를 알아내는 것입니다.
물론,화물은 한 번에 여러 컨베이어를 덮을 가능성이 높으므로 각 단계에서화물의 방향을 알아내는 규칙은 다음과 같습니다.
반대 컨베이어는 서로를 취소합니다. 따라서 3x2화물이 다음 패치 (명확하게하기 위해 하이픈과 파이프로 요약)를 덮으면 결과는 동일합니다.
+---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+
이것들도 마찬가지입니다.
+---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+
화물 아래 컨베이어의 정확한 위치는 관련이 없으므로 어느 쌍을 취소하든 상관 없습니다.
이 취소는 다른 규칙보다 먼저 적용됩니다. 따라서 다른 규칙의 경우 최대 두 방향으로 만 컨베이어가 있습니다.
- 화물이 컨베이어를 전혀 덮지 않는 경우 (모든 컨베이어가 취소되기 때문에 공간 만 덮거나 그리드에서 완전히 움직여서 취소됨) 정지하게됩니다.
화물이 다른 쪽보다 한 방향으로 더 많은 컨베이어를 덮으면, 그 방향으로화물이 움직입니다. 예를 들어, 3x2화물이 다음 패치를 포함하는 경우
>> ^>^
개
>
이상 이 있으므로 오른쪽으로 이동합니다^
. 반면에, 그것이 덮여 있다면>>^ ^
>
와 (과) 의 관계가 있기 때문에이 규칙은 적용되지 않습니다^
.이것은 인접한 방향 사이에 타이가있는 경우에만 남습니다 (반대 방향 사이의 타이는 취소되었을 것임). 이 경우화물은 이미 이동 축을 따라 움직이는 유지한다.이 예에서 오른쪽으로 이동하는 경우 또는 왼쪽으로 이동 3 ×화물 현재 패치를 덮고
>>^ ^
오른쪽으로 이동합니다. 패치가 위 또는 아래로 이동 한 경우에는 그 대신 위로 이동합니다. 이러한 종류의 충돌이 시뮬레이션의 첫 번째 단계에서 발생하면화물이 오른쪽으로 이동했다고 가정하십시오.
자세한 예
상단의 컨베이어 그리드와 3x2 카고를 고려하십시오. 다음은 프로세스의 단계별 시각화입니다. 각 단계는화물로 표시된 그리드가있는 그리드,화물로 #
덮여있는 컨베이어를 표시하는 작은 상자, 취소 후 컨베이어가있는 다른 상자 및화물이 이동하는 위치를 결정하는 규칙으로 구성됩니다.
###vv < > <vv < > <vv < > <vv < > <vv < > <vv <
###^ >v v ###^ >v v v ^ >v v v ^ >v v v ^ >v v v ^ >v v
>v^^>vv^ ###v^^>vv^ ###v^^>vv^ ###^^>vv^ ###^>vv^ >###>vv^
^>^ v ^>^ v ### ^>^ v ###^>^ v ###>^ v ###^ v
> v<v >> > v<v >> > v<v >> > v<v >> > v<v >> > v<v >>
>v v<^ >v v<^ >v v<^ >v v<^ >v v<^ >v v<^
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
|> <| | | | v | | v | | >| | >| | >v| | >v| |>v^| |> ^| |v^^| | ^^|
| v | | v | | >| | >| | | | | | | | | | ^| | | | ^>| | >|
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
Rule 3 Rule 4 Rule 3 Rule 4 Rule 4 Rule 3
================================================================================
> <vv < > <### < > <vv <
v ###v v v ###v v v ###v v
>###>vv^ >v^^>vv^ >###>vv^
^>^ v ^>^ v ^>^ v
> v<v >> > v<v >> > v<v >>
>v v<^ >v v<^ >v v<^
+---+ +---+ +---+ +---+ +---+ +---+
|^ >| | >| |vv | | v | |^ >| | >|
|v^^| | ^^| |^ >| | >| |v^^| | ^^|
+---+ +---+ +---+ +---+ +---+ +---+
Rule 3 Rule 4 Rule 3
이 시점에서화물은 마지막 두 프레임 사이의 루프로 들어갑니다.
이제 2x3화물을 대신 고려하십시오.
##<vv < >##vv < > <vv < > <vv < > <vv < > <vv <
## ^ >v v ##^ >v v ##^ >v v v ^ >v v v ^ >v v v ^ >v v
##>v^^>vv^ ##v^^>vv^ ##v^^>vv^ ##v^^>vv^ ##^^>vv^ >v^^>vv^
^>^ v ^>^ v ## ^>^ v ## ^>^ v ##^>^ v ##^>^ v
> v<v >> > v<v >> > v<v >> >##v<v >> > ##<v >> > ##<v >>
>v v<^ >v v<^ >v v<^ >v v<^ >v v<^ ## v<^
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
|> | |> | | <| | | |v | |v | | >| | >| |>v| |>v| | | | |
| v| | v| |v | |v | | >| | >| | | | | | | | | | v| | v|
| | | | | >| | | | | | | | | | | | v| | v| |>v| |>v|
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
Rule 4 Rule 3 Rule 4 Rule 3 Rule 3 Rule 3
================================================================================
> <vv < > <vv < > <vv <
v ^ >v v v ^ >v v v ^ >v v
>v^^>vv^ >v^^>vv^ >v^^>vv^
^>^ v ^>^ v ^>^ v
> ##<v >> > v<v >> > v<v >>
## v<^ ## v<^ >v v<^
## ## ##
## ##
##
+--+ +--+ +--+ +--+ +--+ +--+
| v| | v| |>v| |>v| | | | |
|>v| |>v| | | | | | | | |
| | | | | | | | | | | |
+--+ +--+ +--+ +--+ +--+ +--+
Rule 3 Rule 4 Rule 2
마지막 단계에서,화물이 그리드 밖으로 이동했기 때문에 규칙 2가 적용되므로화물이 정지되고 루프가 발생하지 않습니다.
규칙과 가정
화물의 너비와 높이와 함께 위에서 설명한 컨베이어 그리드가 입력됩니다. 편리한 순서와 형식으로이 세 가지 매개 변수를 사용할 수 있습니다. 그리드를 들어, 선 하나의 문자열을 읽을 수있는이 수단은 각각의 그리드 셀이 여전히 문자로 표현되는만큼, 줄 바꿈 또는 다른 문자 또는 문자열의 배열, 또는 문자의 배열의 배열로 분리 >v<^
하고 공백.
당신은 출력 A는해야 truthy의 적어도 두 개의 프레임 또는의 루프에서 설치 결과 경우 값을 falsy 값이화물은 휴식을 제공됩니다.
그리드가 공백이있는 사각형으로 채워지고화물이 처음 그리드에 맞춰 진다고 가정 할 수 있습니다.
STDIN (또는 가장 가까운 대안), 명령 행 인수 또는 함수 인수를 통해 입력을 받고 STDOUT (또는 가장 가까운 대안), 함수 리턴 값 또는 함수 (out) 매개 변수를 통해 결과를 출력하는 프로그램 또는 함수를 작성할 수 있습니다.
이것은 코드 골프이므로 가장 짧은 대답 (바이트)이 이깁니다.
테스트 사례
테스트 사례는 그리드로 그룹화됩니다.
Grid (2x2):
>v
^<
Width Height Loop?
1 1 True
1 2 True
2 1 True
2 2 False
Grid (3x3):
> v
^ <
Width Height Loop?
1 1 False
1 2 False
1 3 False
2 1 False
2 2 True
2 3 True
3 1 False
3 2 True
3 3 False
Grid (4x3):
>^>v
v^v
^ <<
Width Height Loop?
2 2 False
Grid (6x5):
>v>v>v
^v^v^v
^v^v^v
^>^>^v
^<<<<<
Width Height Loop?
1 1 True
1 2 False
2 1 True
2 2 True
2 4 True
2 5 False
3 1 False
3 2 True
3 3 True
3 5 True
6 2 False
6 3 True
6 5 False
Grid (10x6):
> <vv <
v ^ >v v
>v^^>vv^
^>^ v
> v<v >>
>v v<^
Width Height Loop?
1 1 False
2 3 False
2 6 False
3 2 True
5 4 False
6 1 True
10 6 False
추가 테스트 사례 집합으로 그리드가 공백으로 만 구성된 입력은 잘못된 결과를 가져와야합니다.
모든 테스트 사례를 수동으로 확인 했으므로 실수했다고 생각되면 알려주십시오.
[^^/v<]
는 [[0,1] [0,1];[0,-1] [-1,0]]
? 또는 STDIN, 문자열 입력, 문자 배열 입력 등인지 여부는 우리에게 달려 있지만 여전히 ^, v,> 및 <형식이어야합니까?
><^v
나 공백 으로 표시되어야 합니다. 나는 그것을 명확히 할 것이다.