세 개의 정수, 너비 w
, 높이 h
및 걸음 수 를 취하는 프로그램이나 함수를 작성하십시오 s
. 당신은 비 자기 교차 그리기됩니다 랜덤 워크 (random walk)의 s
A의 긴 단계 5*w
로 5*h
픽셀마다 5 × 5 픽셀 셀 중 하나를 빈 (순수한 베이지)는 이미지 또는 이들 열두 간단한 "파이프"중 하나를
위 이미지는 확대하여 자세히 보여줍니다. 실제 크기의 파이프는 다음과 같습니다.
회색 선은 파이프 유형을 구분하기위한 것입니다.
랜덤 보행은 하나의 파이프 끝점 (하단 4 개 파이프 유형 중 하나)에서 시작하여 다른 파이프 끝점에서 끝나는 단일 연속 파이프 경로입니다.
빈 시작 w
으로 h
그리드 무작위 출발점으로 하나 개의 셀을 선택합니다. 그런 다음 시작하는 네 방향 중 하나를 임의로 선택하고 해당 파이프 끝점을 그립니다. 이 시작 셀은 보행의 첫 번째 단계이며 새 셀을 그리거나 기존 셀을 덮어 쓸 때마다 다른 단계로 계산됩니다.
이제 반복적으로 선택한 방향이 유효한 경우 적절한 파이프 셀을 그려 오른쪽, 왼쪽 또는 직선으로 임의로 선택하십시오. 전체 s
단계 경로가 형성 될 때까지 방향이 유효하지 않은 경우 역 추적하고 다시 선택하십시오 . 경로는 파이프 끝점으로 끝나야합니다. 파이프 끝점은 경로의 경로에 따라 그리드의 어느 곳에 나있을 수 있습니다.
두 개의 직선 파이프 셀만 덮어 쓸 수 있으며 반대 방향의 직선 파이프 셀만 결과를 교차 셀로 만들 수 있습니다. 그렇지 않으면 모든 파이프를 빈 셀에 배치해야합니다.
교차점이 그려 질 때 시작 셀에서 더 나아간 경로 부분이 맨 위에 그려 져야합니다.
그리드에 주기적 경계 조건 (PBC)이 있는지 여부, 즉 그리드의 한 쪽에서 나가는 파이프가 다른 쪽에서 나올지 여부는 사용자에게 달려 있습니다. PBC가 없으면 그리드 경계는 다른 파이프와 마찬가지로 실행할 수있는 장벽으로 계산됩니다.
특수한 상황들
- 경우
s
0 아니 파이프 그려지지되어야하며, 출력은 비어 있어야5*w
의한5*h
화상 (즉, 모든 베이지). 경우
s
단일 관 스터브 1임의로 선택된 시작 셀에 그려 져야합니다.
그 외 세부 사항
s
최대 라고 가정 할 수 있으므로w*h
항상 경로가 가능합니다. 교차로로 인해 더 긴 경로가 가능합니다.w
그리고h
항상 긍정적 인 것입니다.- 모든 무작위 선택은 균일하게 무작위 이어야합니다 . 예를 들어, 문제가 더 쉬워 지더라도 가능할 때 교차로를 만들지 마십시오. 의사 난수 생성기가 허용됩니다.
- 검은 색, 파란색 및 베이지 색 대신 시각적으로 다른 3 가지 색상을 사용할 수 있습니다.
- 귀하의 출력 이미지는 진짜 너무 확대 될 수 있습니다
5*w*k
에 의해5*h*k
픽셀k
양의 정수이다. (k
1 이더라도 게시 한 예제를 확대하는 것이 좋습니다 .) - 일반적인 무손실 이미지 파일 형식을 사용할 수 있으며 이미지를 파일에 저장하거나 표시하거나 stdout으로 뿌릴 수 있습니다.
바이트 단위의 가장 짧은 코드가 이깁니다.
예
(모두 500 % 확대)
입력이 있으면 w=2, h=1, s=0
출력은 항상 다음과 같습니다.
입력이 입력 w=2, h=1, s=1
되면 출력은 동일한 기회로 다음 이미지 중 하나가됩니다.
입력이 입력 w=2, h=1, s=2
되면 출력은
또는 가능
그리드에 PBC가 있다고 가정합니다.
w=3, h=2, s=6
PBC를 가정 할 때 가능한 몇 가지 출력은 다음과 같습니다 .
w=3, h=3, s=9
PBC를 가정하면 가능한 결과는 다음과 같습니다 .
교차로가 두 단계로 계산되어 경로가 모든 셀을 포함 할 필요는 없습니다. 또한 교차로 육교가 이후에 그려 졌으므로 코너 끝 점이 시작 셀이라고 추론 할 수 있습니다. 따라서 우리는 무작위로 선택된 순서를 추론 할 수 있습니다.
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
마지막으로 w=4, h=5, s=20
와의 예는 다음 과 w=4, h=5, s=16
같습니다.
You will be drawing a non-self-intersecting random walk
... 자체 교차 여부입니까?