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