From 393dc3e035b5bb0a9132ca4fa2db770b996aab30 Mon Sep 17 00:00:00 2001 From: Holger Segnitz Date: Tue, 24 Dec 2019 12:49:30 +0100 Subject: [PATCH 1/3] ADD: correct GoL implementation for demo content --- java/src/main/java/y2019/d24/Part1.java | 99 +++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 java/src/main/java/y2019/d24/Part1.java diff --git a/java/src/main/java/y2019/d24/Part1.java b/java/src/main/java/y2019/d24/Part1.java new file mode 100644 index 0000000..fbfde54 --- /dev/null +++ b/java/src/main/java/y2019/d24/Part1.java @@ -0,0 +1,99 @@ +package y2019.d24; + +import java.util.HashSet; + +public class Part1 { + + /** demo content */ + private static boolean[][] map = { + { false, false, false, false, true }, + { true, false, false, true, false }, + { true, false, false, true, true }, + { false, false, true, false, false }, + { true, false, false, false, false } + }; + /* */ + + /** real content * / + private static boolean[][] map = { + { false, false, false, false, true }, + { true, false, false, true, false }, + { true, false, false, true, true }, + { false, false, true, false, false }, + { true, false, false, false, false } + }; + /* */ + + private static HashSet seen = new HashSet<>(); + + public static void main(String[] args) { + + String mapString = mapToString(map); + seen.add(mapString); + + System.out.println(mapString); + + // System.out.println(mapToString(map)); + while (true) { + boolean[][] newMap = new boolean[5][5]; + for (int y = 0; y < 5; y++) { + for (int x = 0; x < 5; x++) { + newMap[y][x] = willLive(x, y); + } + } + + mapString = mapToString(newMap); + + if (!seen.add(mapString)) { + break; + } + //System.out.println(mapString); + map = newMap; + } + + System.out.println(mapString); + } + + private static boolean willLive(int x, int y) { + int neighbors = countNeighbors(x, y); + + if (map[y][x]) { + if (neighbors == 1) { + return true; + } + return false; + } + + if (!map[y][x]) { + if (neighbors == 1 || neighbors == 2) { + return true; + } + return false; + } + return false; + } + + private static int countNeighbors(int x, int y) { + int neighbors = 0; + + if (x > 0 && map[y][x-1]) neighbors++; + if (x < 4 && map[y][x+1]) neighbors++; + if (y > 0 && map[y-1][x]) neighbors++; + if (y < 4 && map[y+1][x]) neighbors++; + + return neighbors; + } + + private static String mapToString(boolean[][] map) { + StringBuilder out = new StringBuilder(); + for (boolean[] line: map) { + for (boolean field: line) { + out.append(field ? "#" : "."); + } + out.append("\n"); + } + return out.toString(); + } + + +} From baf6d9e3d2f85853aa3c1fa21bbfbd94ecdfff75 Mon Sep 17 00:00:00 2001 From: Holger Segnitz Date: Tue, 24 Dec 2019 12:59:55 +0100 Subject: [PATCH 2/3] 2019.24.1 calc biodiversity for demo content --- java/src/main/java/y2019/d24/Part1.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/java/src/main/java/y2019/d24/Part1.java b/java/src/main/java/y2019/d24/Part1.java index fbfde54..999a1df 100644 --- a/java/src/main/java/y2019/d24/Part1.java +++ b/java/src/main/java/y2019/d24/Part1.java @@ -43,15 +43,30 @@ public static void main(String[] args) { } mapString = mapToString(newMap); + map = newMap; if (!seen.add(mapString)) { break; } //System.out.println(mapString); - map = newMap; } System.out.println(mapString); + System.out.println(biodiversityRating(map)); + } + + private static int biodiversityRating(boolean[][] inMap) { + int exponent = -1; + int biodiversityRating = 0; + for (boolean[] line: inMap) { + for (boolean field: line) { + exponent++; + if (field) { + biodiversityRating += Math.pow(2, exponent); + } + } + } + return biodiversityRating; } private static boolean willLive(int x, int y) { From 61d066007867c8dbb50e01a4f4247a8bd50b4918 Mon Sep 17 00:00:00 2001 From: Holger Segnitz Date: Tue, 24 Dec 2019 13:04:37 +0100 Subject: [PATCH 3/3] 2019.24.1 - solved --- java/src/main/java/y2019/d24/Part1.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/src/main/java/y2019/d24/Part1.java b/java/src/main/java/y2019/d24/Part1.java index 999a1df..9cd9dc0 100644 --- a/java/src/main/java/y2019/d24/Part1.java +++ b/java/src/main/java/y2019/d24/Part1.java @@ -4,7 +4,7 @@ public class Part1 { - /** demo content */ + /** demo content * / private static boolean[][] map = { { false, false, false, false, true }, { true, false, false, true, false }, @@ -14,13 +14,13 @@ public class Part1 { }; /* */ - /** real content * / + /** real content */ private static boolean[][] map = { - { false, false, false, false, true }, - { true, false, false, true, false }, - { true, false, false, true, true }, - { false, false, true, false, false }, - { true, false, false, false, false } + { false, true, true, true, false }, + { true, true, false, false, false }, + { false, false, false, true, true }, + { false, true, false, true, false }, + { true, false, true, false, true } }; /* */