Arrooow (iOS 게임) 솔버 만들기
총 40스테이지에 대해 각 스테이지 평균 0.6초로 풀 수 있었다.
작성한 프로그램은 여기 (github)
Arrooow란?
5x5의 화살표가 늘어서 있고, 화살표를 탭하면, 그 화살표를 선두로 해 가리키는 앞의 화살표가 순서대로 사라져 간다.
다만, 최소 2개 이상의 화살표가 사라져야 한다. 모든 화살표를 지우면 스테이지 클리어.
왜 할까
AppStore의 설명에 따르면,
too hard for the human race...
같다. 인간이 할 수 없다면 기계에 받을 수밖에 없다. .
구현
간단한 dfs로 구현. 계산량이 $25!!$ 정도가 될 생각도 하지만, 의외로 1s 이내에 제대로 끝난다.
github에 업로드했습니다. ( htps : // 기주 b. 코 m / f 베쵸 / 아로오 w w l / r / )
public class Solver
{
public List<Integer> solve(Board board)
{
if (board.isSolved())
return FastList.newList();
for (int i = 0; i < 25; i++) {
if (board.tappable(i)) {
List<Integer> tapSequence = solve(board.tap(i));
if (tapSequence != null) {
FastList<Integer> ans = FastList.newListWith(i);
ans.addAll(tapSequence);
return ans;
}
}
}
// unsolved
return null;
}
}
실험 예
스테이지 25(아래 그림)를 풀어 본다.
args에 보드 정보를 입력(위, 아래, 오른쪽, 왼쪽을 각각 t, b, r, l로 나타내고 모든 행을 일렬로 늘어놓고 있다).
실행 결과.
결과대로 매스를 탭합니다. 최상(하)단이 row=1(5), 최좌(우) 열이 column=1(5)가 된다.
풀렸다.
통계
Arrooow에 들어가 있던 전 40 스테이지를 풀어 본다.
Stage 5만 탐색이 계속되어 20초 이상 걸렸지만, 다른 스테이지에서는 0.2초 미만으로 탐색이 종료하고 있다.
----- Summary -----
Max: 20436ms
Min: 484μs
Ave: 525ms
Stage 1: 38.35 ms
Stage 2: 3.354 ms
Stage 3: 6.901 ms
Stage 4: 6.122 ms
Stage 5: 20.44 s
Stage 6: 1.150 ms
Stage 7: 1.391 ms
Stage 8: 1.010 ms
Stage 9: 1.031 ms
Stage 10: 1.423 ms
Stage 11: 1.368 ms
Stage 12: 2.237 ms
Stage 13: 5.031 ms
Stage 14: 1.726 ms
Stage 15: 1.464 ms
Stage 16: 987.7 μs
Stage 17: 513.4 μs
Stage 18: 1.616 ms
Stage 19: 5.323 ms
Stage 20: 25.62 ms
Stage 21: 3.364 ms
Stage 22: 2.190 ms
Stage 23: 11.07 ms
Stage 24: 2.044 ms
Stage 25: 2.191 ms
Stage 26: 1.910 ms
Stage 27: 80.72 ms
Stage 28: 766.2 μs
Stage 29: 1.197 ms
Stage 30: 484.1 μs
Stage 31: 103.2 ms
Stage 32: 1.949 ms
Stage 33: 33.97 ms
Stage 34: 2.068 ms
Stage 35: 5.251 ms
Stage 36: 1.970 ms
Stage 37: 2.361 ms
Stage 38: 3.066 ms
Stage 39: 125.4 ms
Stage 40: 90.62 ms
전망
AppStore의 설명에 따르면,
too hard for the human race...
같다. 인간이 할 수 없다면 기계에 받을 수밖에 없다. .
구현
간단한 dfs로 구현. 계산량이 $25!!$ 정도가 될 생각도 하지만, 의외로 1s 이내에 제대로 끝난다.
github에 업로드했습니다. ( htps : // 기주 b. 코 m / f 베쵸 / 아로오 w w l / r / )
public class Solver
{
public List<Integer> solve(Board board)
{
if (board.isSolved())
return FastList.newList();
for (int i = 0; i < 25; i++) {
if (board.tappable(i)) {
List<Integer> tapSequence = solve(board.tap(i));
if (tapSequence != null) {
FastList<Integer> ans = FastList.newListWith(i);
ans.addAll(tapSequence);
return ans;
}
}
}
// unsolved
return null;
}
}
실험 예
스테이지 25(아래 그림)를 풀어 본다.
args에 보드 정보를 입력(위, 아래, 오른쪽, 왼쪽을 각각 t, b, r, l로 나타내고 모든 행을 일렬로 늘어놓고 있다).
실행 결과.
결과대로 매스를 탭합니다. 최상(하)단이 row=1(5), 최좌(우) 열이 column=1(5)가 된다.
풀렸다.
통계
Arrooow에 들어가 있던 전 40 스테이지를 풀어 본다.
Stage 5만 탐색이 계속되어 20초 이상 걸렸지만, 다른 스테이지에서는 0.2초 미만으로 탐색이 종료하고 있다.
----- Summary -----
Max: 20436ms
Min: 484μs
Ave: 525ms
Stage 1: 38.35 ms
Stage 2: 3.354 ms
Stage 3: 6.901 ms
Stage 4: 6.122 ms
Stage 5: 20.44 s
Stage 6: 1.150 ms
Stage 7: 1.391 ms
Stage 8: 1.010 ms
Stage 9: 1.031 ms
Stage 10: 1.423 ms
Stage 11: 1.368 ms
Stage 12: 2.237 ms
Stage 13: 5.031 ms
Stage 14: 1.726 ms
Stage 15: 1.464 ms
Stage 16: 987.7 μs
Stage 17: 513.4 μs
Stage 18: 1.616 ms
Stage 19: 5.323 ms
Stage 20: 25.62 ms
Stage 21: 3.364 ms
Stage 22: 2.190 ms
Stage 23: 11.07 ms
Stage 24: 2.044 ms
Stage 25: 2.191 ms
Stage 26: 1.910 ms
Stage 27: 80.72 ms
Stage 28: 766.2 μs
Stage 29: 1.197 ms
Stage 30: 484.1 μs
Stage 31: 103.2 ms
Stage 32: 1.949 ms
Stage 33: 33.97 ms
Stage 34: 2.068 ms
Stage 35: 5.251 ms
Stage 36: 1.970 ms
Stage 37: 2.361 ms
Stage 38: 3.066 ms
Stage 39: 125.4 ms
Stage 40: 90.62 ms
전망
public class Solver
{
public List<Integer> solve(Board board)
{
if (board.isSolved())
return FastList.newList();
for (int i = 0; i < 25; i++) {
if (board.tappable(i)) {
List<Integer> tapSequence = solve(board.tap(i));
if (tapSequence != null) {
FastList<Integer> ans = FastList.newListWith(i);
ans.addAll(tapSequence);
return ans;
}
}
}
// unsolved
return null;
}
}
스테이지 25(아래 그림)를 풀어 본다.
args에 보드 정보를 입력(위, 아래, 오른쪽, 왼쪽을 각각 t, b, r, l로 나타내고 모든 행을 일렬로 늘어놓고 있다).
실행 결과.
결과대로 매스를 탭합니다. 최상(하)단이 row=1(5), 최좌(우) 열이 column=1(5)가 된다.
풀렸다.
통계
Arrooow에 들어가 있던 전 40 스테이지를 풀어 본다.
Stage 5만 탐색이 계속되어 20초 이상 걸렸지만, 다른 스테이지에서는 0.2초 미만으로 탐색이 종료하고 있다.
----- Summary -----
Max: 20436ms
Min: 484μs
Ave: 525ms
Stage 1: 38.35 ms
Stage 2: 3.354 ms
Stage 3: 6.901 ms
Stage 4: 6.122 ms
Stage 5: 20.44 s
Stage 6: 1.150 ms
Stage 7: 1.391 ms
Stage 8: 1.010 ms
Stage 9: 1.031 ms
Stage 10: 1.423 ms
Stage 11: 1.368 ms
Stage 12: 2.237 ms
Stage 13: 5.031 ms
Stage 14: 1.726 ms
Stage 15: 1.464 ms
Stage 16: 987.7 μs
Stage 17: 513.4 μs
Stage 18: 1.616 ms
Stage 19: 5.323 ms
Stage 20: 25.62 ms
Stage 21: 3.364 ms
Stage 22: 2.190 ms
Stage 23: 11.07 ms
Stage 24: 2.044 ms
Stage 25: 2.191 ms
Stage 26: 1.910 ms
Stage 27: 80.72 ms
Stage 28: 766.2 μs
Stage 29: 1.197 ms
Stage 30: 484.1 μs
Stage 31: 103.2 ms
Stage 32: 1.949 ms
Stage 33: 33.97 ms
Stage 34: 2.068 ms
Stage 35: 5.251 ms
Stage 36: 1.970 ms
Stage 37: 2.361 ms
Stage 38: 3.066 ms
Stage 39: 125.4 ms
Stage 40: 90.62 ms
전망
----- Summary -----
Max: 20436ms
Min: 484μs
Ave: 525ms
Stage 1: 38.35 ms
Stage 2: 3.354 ms
Stage 3: 6.901 ms
Stage 4: 6.122 ms
Stage 5: 20.44 s
Stage 6: 1.150 ms
Stage 7: 1.391 ms
Stage 8: 1.010 ms
Stage 9: 1.031 ms
Stage 10: 1.423 ms
Stage 11: 1.368 ms
Stage 12: 2.237 ms
Stage 13: 5.031 ms
Stage 14: 1.726 ms
Stage 15: 1.464 ms
Stage 16: 987.7 μs
Stage 17: 513.4 μs
Stage 18: 1.616 ms
Stage 19: 5.323 ms
Stage 20: 25.62 ms
Stage 21: 3.364 ms
Stage 22: 2.190 ms
Stage 23: 11.07 ms
Stage 24: 2.044 ms
Stage 25: 2.191 ms
Stage 26: 1.910 ms
Stage 27: 80.72 ms
Stage 28: 766.2 μs
Stage 29: 1.197 ms
Stage 30: 484.1 μs
Stage 31: 103.2 ms
Stage 32: 1.949 ms
Stage 33: 33.97 ms
Stage 34: 2.068 ms
Stage 35: 5.251 ms
Stage 36: 1.970 ms
Stage 37: 2.361 ms
Stage 38: 3.066 ms
Stage 39: 125.4 ms
Stage 40: 90.62 ms
Reference
이 문제에 관하여(Arrooow (iOS 게임) 솔버 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fbessho/items/5f64e1de2b38adfe55fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)