Flood Paint 게임에서 게임의 목표는 가능한 한 적은 회전으로 전체 보드를 동일한 색상으로 만드는 것입니다.
게임은 다음과 같은 보드로 시작됩니다.
3 3 5 4 1 3 4 1 5
5 1 3 4 1 1 5 2 1
6 5 2 3 4 3 3 4 3
4 4 4 5 5 5 4 1 4
6 2 5 3[3]1 1 6 6
5 5 1 2 5 2 6 6 3
6 1 1 5 3 6 2 3 6
1 2 2 4 5 3 5 1 2
3 6 6 1 5 1 3 2 4
현재 보드 중앙의 숫자 (컬러를 나타냄)는 3입니다. 각 턴, 중앙의 정사각형은 색상을 변경하며, 수평 또는 수직으로 이동하여 중앙에서 도달 할 수있는 동일한 색상의 모든 정사각형 ( 즉, 중앙 정사각형의 홍수 지역)에서 색상이 변경됩니다. 따라서 가운데 사각형이 색상을 5로 변경하면 :
3 3 5 4 1 3 4 1 5
5 1 3 4 1 1 5 2 1
6 5 2 3 4 3 3 4 3
4 4 4 5 5 5 4 1 4
6 2 5 5[5]1 1 6 6
5 5 1 2 5 2 6 6 3
6 1 1 5 3 6 2 3 6
1 2 2 4 5 3 5 1 2
3 6 6 1 5 1 3 2 4
중앙 3의 왼쪽에있는 3도 색상이 변경됩니다. 이제 중심점에서 총 7 개의 도달 가능한 숫자가 있으므로 색상을 4로 변경하십시오.
3 3 5 4 1 3 4 1 5
5 1 3 4 1 1 5 2 1
6 5 2 3 4 3 3 4 3
4 4 4 4 4 4 4 1 4
6 2 4 4[4]1 1 6 6
5 5 1 2 4 2 6 6 3
6 1 1 5 3 6 2 3 6
1 2 2 4 5 3 5 1 2
3 6 6 1 5 1 3 2 4
페인트 된 영역의 크기가 다시 급격히 증가합니다.
당신의 임무는 1에서 6까지 19에서 19까지의 색 격자를 입력으로 선택하는 프로그램을 만드는 것입니다.
4 5 1 1 2 2 1 6 2 6 3 4 2 3 2 3 1 6 3
4 2 6 3 4 4 5 6 4 4 5 3 3 3 3 5 4 3 4
2 3 5 2 2 5 5 1 2 6 2 6 6 2 1 6 6 1 2
4 6 5 5 5 5 4 1 6 6 3 2 6 4 2 6 3 6 6
1 6 4 4 4 4 6 4 2 5 5 3 2 2 4 1 5 2 5
1 6 2 1 5 1 6 4 4 1 5 1 3 4 5 2 3 4 1
3 3 5 3 2 2 2 4 2 1 6 6 6 6 1 4 5 2 5
1 6 1 3 2 4 1 3 3 4 6 5 1 5 5 3 4 3 3
4 4 1 5 5 1 4 6 3 3 4 5 5 6 1 6 2 6 4
1 4 2 5 6 5 5 3 2 5 5 5 3 6 1 4 4 6 6
4 6 6 2 6 6 2 4 2 6 1 5 6 2 3 3 4 3 6
6 1 3 6 3 5 5 3 6 1 3 4 4 5 1 2 6 4 3
2 6 1 3 2 4 2 6 1 1 5 2 6 6 6 6 3 3 3
3 4 5 4 6 6 3 3 4 1 1 6 4 5 1 3 4 1 2
4 2 6 4 1 5 3 6 4 3 4 5 4 2 1 1 4 1 1
4 2 4 1 5 2 2 3 6 6 6 5 2 5 4 5 4 5 1
5 6 2 3 4 6 5 4 1 3 2 3 2 1 3 6 2 2 4
6 5 4 1 3 2 2 1 1 1 6 1 2 6 2 5 6 4 5
5 1 1 4 2 6 2 5 6 1 3 3 4 1 6 1 2 1 2
중앙 사각형이 각 차례마다 바뀌는 일련의 색상을 다시 선택한 형식으로 반환하십시오.
263142421236425431645152623645465646213545631465
각 이동 순서의 끝에서 19x19 격자의 사각형은 모두 같은 색이어야합니다.
귀하의 프로그램은 전적으로 결정 론적이어야합니다. 의사 난수 솔루션은 허용되지만 프로그램은 매번 동일한 테스트 케이스에 대해 동일한 출력을 생성해야합니다.
이기는 프로그램은 이 파일 에서 발견 된 100,000 개의 모든 테스트 사례를 해결하는 데 필요한 총 단계 수가 가장 적습니다 (Zip 텍스트 파일, 14.23MB). 두 솔루션이 같은 수의 단계를 거치면 (예 : 둘 다 최적의 전략을 찾은 경우) 더 짧은 프로그램이 승리합니다.
BurntPizza는 테스트 결과를 확인하기 위해 Java로 프로그램을 작성했습니다. 이 프로그램을 사용하려면 제출을 실행하고 출력을이라는 파일로 파이프하십시오 steps.txt. 그런 다음,이 프로그램 실행 steps.txt과 floodtest같은 디렉토리에 파일을. 항목이 유효하고 모든 파일에 대해 올바른 솔루션을 생성하는 경우 모든 테스트를 통과하고 반환해야합니다.All boards solved successfully.
import java.io.*;
import java.util.*;
public class PainterVerifier {
public static void main(String[] args) throws FileNotFoundException {
char[] board = new char[361];
Scanner s = new Scanner(new File("steps.txt"));
Scanner b = new Scanner(new File("floodtest"));
int lineNum = 0;
caseloop: while (b.hasNextLine()) {
for (int l = 0; l < 19; l++) {
String lineb = b.nextLine();
if (lineb.isEmpty())
continue caseloop;
System.arraycopy(lineb.toCharArray(), 0, board, l * 19, 19);
}
String line = s.nextLine();
if (line.isEmpty())
continue;
char[] steps = line.toCharArray();
Stack<Integer> nodes = new Stack<Integer>();
for (char c : steps) {
char targetColor = board[180];
char replacementColor = c;
nodes.push(180);
while (!nodes.empty()) {
int n = nodes.pop();
if (n < 0 || n > 360)
continue;
if (board[n] == targetColor) {
board[n] = replacementColor;
if (n % 19 > 0)
nodes.push(n - 1);
if (n % 19 < 18)
nodes.push(n + 1);
if (n / 19 > 0)
nodes.push(n - 19);
if (n / 19 < 18)
nodes.push(n + 19);
}
}
}
char center = board[180];
for (char c : board)
if (c != center) {
s.close();
b.close();
System.out.println("\nIncomplete board found!\n\tOn line " + lineNum + " of steps.txt");
System.exit(0);
}
if (lineNum % 5000 == 0)
System.out.printf("Verification %d%c complete...\n", lineNum * 100 / 100000, '%');
lineNum++;
}
s.close();
b.close();
System.out.println("All boards solved successfully.");
}
}
또한 점수 판은 결과가 실제로 점수별로 정렬되지 않기 때문에 실제로 중요합니다.
- 1,985,078 -smack42, 자바
- 2,075,452-사용자 1502040, C
- 2,098,382 -tigrou, C #
- 2,155,834-코더 타오 , C #
- 2,201,995 -MrBackend, 자바
- 2,383,569-코더 타오 , C #
- 2,384,020- 허잔, C
- 2,403,189- 오리진, 자바
- 2,445,761- 허잔, C
- 2,475,056- 제레미리스트, 하스켈
- 2,480,714 -SteelTermite, C (2,395 바이트)
- 2,480,714 -Herjan, Java (4,702 바이트)
- 2,588,847 -BurntPizza, Java (2,748 바이트)
- 2,588,847 -Gero3, node.js (4,641 바이트)
- 2,979,145-텐 프롱 , 델파이 XE3
- 4,780,841-번트 피자, 자바
- 10,800,000 -Joe Z., Python