요약
이 과제의 목표는 프랑스어로 taquin 이라고도 하는 15 퍼즐 / 슬라이딩 퍼즐 의 실행 취소 된 이미지 버전을 만드는 것 입니다.
세부:
다음과 같이 구성된 입력이 제공됩니다.
- 이미지,
- 정수
n
, - 타 정수
r
,
프로그램 또는 기능 또는 기타 적합한 것은 입력과 동일한 이미지 ( 예 : 동일한 크기 및 형식)를 출력해야 하지만 다음과 같은 프로세스를 거쳤습니다.
- 이미지를
n²
사각형 으로 나누고 - 그 직사각형 중 하나를 무작위로 제거하십시오.
- 점 (2.)의 영향을받는 선 / 열 에서 임의의 수의 인접한 직사각형을 이동하여 생성 된 구멍이 채워지고이 선 / 열에서 다른 구멍이 생성됩니다.
0
블랭크가 모서리 또는 모서리에있는 경우이 숫자가 될 수 있습니다 .
(3) r
번 반복하십시오 .
설명 :
- 3 단계에서 선에서 사각형을 이동 한 경우 다음 반복에서 열의 사각형을 이동해야합니다.
- 직사각형을 한 단계 씩 왼쪽에서 오른쪽으로 이동 한 경우 다음 행 단계에서 오른쪽에서 왼쪽으로 이동해야합니다 (열과 관련하여 위에서 아래로, 아래에서 위로).
n
사진 측면의 길이를 나누도록 선택되어 있다고 가정 할 수 있습니다 .
마지막 요점 :
.gif
전체 과정을 보여주는 애니메이션 은 매우 환영합니다.
다음 그림 ( 1024x768
)을 모델 과 함께 사용 n=16
하고 r=100
모델로 사용 하는 것이 좋습니다. 물론 관련성이 있고 SE의 규칙을 준수 하는 한 다른 그림을 사용할 수 있습니다 .
하는 것으로 표준 허점 정책이 적용됩니다.
이것은 code-golf 이므로 짧은 제출이 승리합니다!
일례가 요청되었으므로, 여기에, “손”만든 하나 n=4
및r=1
1 단계와 2 단계
3 단계 : 왼쪽 방향으로 두 개의 직사각형
답변
수학, 246 바이트
ImageAssemble@(n=Nest)[k=RandomInteger;q=Reverse;({t,r}=1~k~2;q[o=n[q/@#&,#,r]&@*(n[#&,#,t]&)])[o@#/.{a___,b:_~RepeatedNull~k[Position[o@#,i][[1,2]]-1],i,c___}:>{a,i,b,c}]&,MapAt[(i=#~ImageAdd~1)&,#~ImagePartition~Scaled[1/#2],{1,#2}~k~2],#3]&
익명의 기능. Mathematica의 Transpose
연산자에 해당하는 U + F3C7을 포함 합니다. 이 함수는 Image
객체를 가져 와서 객체를 반환 Image
합니다.
5000 회 반복 후 :
설명
초기화
n=Nest
에 Nest
기능 (반복 작업)을 저장하십시오 n
.
k=RandomInteger;q=Reverse;
가게 RandomInteger
의 기능 k
및 Reverse
함수를 q
.
이미지 나누기
#~ImagePartition~Scaled[1/#2]
입력 이미지를 (두 번째 입력) ^ 2 타일로 분할하십시오.
{1,#2}~k~2
RandomInteger
1과 두 번째 입력 사이에 두 개의을 생성하십시오 . 이것은 임의의 타일을 선택합니다.
MapAt[(i=#~ImageAdd~1)&, ..., {1,#2}~k~2]
타일을 흰색으로 만듭니다. 에 저장하십시오 i
.
타일 이동
{t,r}=1~k~2
0에서 1까지의 두 개의 임의 정수를 생성 t
하고 r
각각 및에 저장합니다 . 방향을 임의로 선택합니다.
o=n[q/@#&,#,r]&@*(n[#&,#,t]&)
기능 정의 o
:의 구성
- 입력
t
시간을 바꾸는 함수 . - 각 행을 반전시키는 함수
r
.
영형@#
o
입력에 적용하십시오 .
Position[o@#,i][[1,2]]
i
(흰색 이미지) 의 열을 찾습니다 .
k[ ... -1]
1을 빼고 0과 그 숫자 사이의 임의의 정수를 찾으십시오. 이것은 움직일 타일 수를 무작위로 선택합니다.
o@#/.{a___,b:_~RepeatedNull~ ... ,i,c___}:>{a,i,b,c}
상기 타일 수가 i
(흰색 이미지) 이전에 나타나면 , 그 장소를 바꾸십시오.
(... q[o= ... ])[ ... ]
o
기능을 반대로하여 위의 작업 결과에 적용하십시오. 이미지를 반전 시키거나 바꿉니다.
루핑 및 이미지 어셈블리
(n=Nest)[ ... ,#3]
위 과정 (세번째 입력)을 반복하십시오.
ImageAssemble@
이미지를 정리하십시오.