फ्लड पेंट के खेल में, पूरे बोर्ड को संभव के रूप में कुछ ही मोड़ में एक ही रंग होने के लिए खेल का लक्ष्य है।
खेल एक बोर्ड के साथ शुरू होता है जो कुछ इस तरह दिखता है:
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 के बाईं ओर था वह भी रंग बदल देगा। अब केंद्र से एक के कुल सात 5 पहुंच रहे हैं, और इसलिए यदि हम रंग 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
चाल के प्रत्येक अनुक्रम के अंत में, 19-बाय -19 ग्रिड में वर्गों को सभी समान रंग होना चाहिए।
आपका कार्यक्रम पूरी तरह से निर्धारक होना चाहिए; छद्म आयामी समाधान की अनुमति है, लेकिन कार्यक्रम को हर बार एक ही परीक्षण मामले के लिए एक ही आउटपुट उत्पन्न करना चाहिए।
जीतने वाला कार्यक्रम इस फ़ाइल में पाए गए सभी 100,000 परीक्षण मामलों को हल करने के लिए कम से कम कुल कदम उठाएगा (ज़िप्ड पाठ फ़ाइल, 14.25 एमबी)। यदि दो समाधान समान संख्या में कदम उठाते हैं (जैसे कि यदि वे दोनों इष्टतम रणनीति पाते हैं), तो छोटा कार्यक्रम जीत जाएगा।
BurntPizza ने परीक्षण परिणामों को सत्यापित करने के लिए जावा में एक कार्यक्रम लिखा है। इस कार्यक्रम का उपयोग करने के लिए, अपना सबमिशन चलाएं और आउटपुट को एक फ़ाइल में पाइप करें 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 - स्मैक 42, जावा
- 2,075,452 - user1502040, सी
- 2,098,382 - बाघ, सी #
- 2,155,834 - कोडरताओ, सी #
- 2,201,995 - MrBackend, जावा
- 2,383,569 - कोडरताओ, सी #
- 2,384,020 - हर्जन, सी
- 2,403,189 - ओरिजिनिल, जावा
- 2,445,761 - हर्जन, सी
- 2,475,056 - जेरेमी सूची, हास्केल
- 2,480,714 - स्टीलटाइट, सी (2,395 बाइट्स)
- 2,480,714 - हर्जन, जावा (4,702 बाइट्स)
- 2,588,847 - बर्नटपज़ीज़ा, जावा (2,748 बाइट्स)
- 2,588,847 - गेरो 3, नोड.जेएस (4,641 बाइट्स)
- 2,979,145 - टेउन प्रैंक , डेल्फी एक्सई 3
- 4,780,841 - बर्नटपज़ीज़ा, जावा
- 10,800,000 - जो जेड, पायथन