Skip to content

Commit a0a4173

Browse files
committedDec 11, 2020
[AOC-11] Day 11 code. Looking for neighbours.
1 parent 6278af6 commit a0a4173

File tree

3 files changed

+293
-0
lines changed

3 files changed

+293
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.nbrevu.advent2020;
2+
3+
import java.io.IOException;
4+
import java.net.URL;
5+
import java.util.List;
6+
7+
import com.google.common.base.Charsets;
8+
import com.google.common.io.Resources;
9+
import com.koloboke.collect.map.CharObjMap;
10+
import com.koloboke.collect.map.hash.HashCharObjMaps;
11+
12+
public class Advent11_1 {
13+
private final static String IN_FILE="Advent11.txt";
14+
15+
private static enum Seat {
16+
FLOOR,EMPTY,OCCUPIED;
17+
18+
private final static CharObjMap<Seat> CHAR_IDS=getCharIds();
19+
private static CharObjMap<Seat> getCharIds() {
20+
CharObjMap<Seat> result=HashCharObjMaps.newMutableMap();
21+
result.put('.',FLOOR);
22+
result.put('L',EMPTY);
23+
result.put('#',OCCUPIED);
24+
return result;
25+
}
26+
public static Seat parse(char c) {
27+
Seat result=CHAR_IDS.get(c);
28+
if (result==null) throw new IllegalArgumentException("Was ist das?");
29+
return result;
30+
}
31+
}
32+
33+
private static Seat[] parseString(String in) {
34+
Seat[] result=new Seat[in.length()];
35+
for (int i=0;i<in.length();++i) result[i]=Seat.parse(in.charAt(i));
36+
return result;
37+
}
38+
39+
private static Seat nextState(Seat currentState,int occupiedNeighbours) {
40+
if (currentState==Seat.FLOOR) return currentState;
41+
if (occupiedNeighbours==0) return Seat.OCCUPIED;
42+
if (occupiedNeighbours>=4) return Seat.EMPTY;
43+
return currentState;
44+
}
45+
46+
private static int countNeighbours(Seat[][] state,int baseI,int baseJ) {
47+
int i0=baseI-1;
48+
int iF=baseI+1;
49+
int j0=baseJ-1;
50+
int jF=baseJ+1;
51+
if (i0<0) i0=0;
52+
if (iF>=state.length) iF=state.length-1;
53+
if (j0<0) j0=0;
54+
if (jF>=state[baseI].length) jF=state[baseI].length-1;
55+
int result=0;
56+
for (int i=i0;i<=iF;++i) for (int j=j0;j<=jF;++j) if (((i!=baseI)||(j!=baseJ))&&state[i][j]==Seat.OCCUPIED) ++result;
57+
return result;
58+
}
59+
60+
private static Seat[][] iterate(Seat[][] currentState) {
61+
Seat[][] result=new Seat[currentState.length][];
62+
for (int i=0;i<currentState.length;++i) {
63+
result[i]=new Seat[currentState[i].length];
64+
for (int j=0;j<currentState[i].length;++j) result[i][j]=nextState(currentState[i][j],countNeighbours(currentState,i,j));
65+
}
66+
return result;
67+
}
68+
69+
private static boolean equals(Seat[][] array1,Seat[][] array2) {
70+
if (array1.length!=array2.length) return false;
71+
for (int i=0;i<array1.length;++i) if (array1[i].length!=array2[i].length) return false;
72+
else for (int j=0;j<array1[i].length;++j) if (array1[i][j]!=array2[i][j]) return false;
73+
return true;
74+
}
75+
76+
private static int countOccupied(Seat[][] array) {
77+
int result=0;
78+
for (Seat[] subArray:array) for (Seat s:subArray) if (s==Seat.OCCUPIED) ++result;
79+
return result;
80+
}
81+
82+
public static void main(String[] args) throws IOException {
83+
URL file=Resources.getResource(IN_FILE);
84+
List<String> contents=Resources.readLines(file,Charsets.UTF_8);
85+
Seat[][] basePositions=new Seat[contents.size()][];
86+
for (int i=0;i<contents.size();++i) basePositions[i]=parseString(contents.get(i));
87+
for (;;) {
88+
Seat[][] nextStep=iterate(basePositions);
89+
if (equals(basePositions,nextStep)) {
90+
System.out.println(countOccupied(nextStep));
91+
return;
92+
}
93+
basePositions=nextStep;
94+
}
95+
}
96+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.nbrevu.advent2020;
2+
3+
import java.io.IOException;
4+
import java.net.URL;
5+
import java.util.List;
6+
7+
import com.google.common.base.Charsets;
8+
import com.google.common.io.Resources;
9+
import com.koloboke.collect.map.CharObjMap;
10+
import com.koloboke.collect.map.hash.HashCharObjMaps;
11+
12+
public class Advent11_2 {
13+
private final static String IN_FILE="Advent11.txt";
14+
15+
private static enum Seat {
16+
FLOOR,EMPTY,OCCUPIED;
17+
18+
private final static CharObjMap<Seat> CHAR_IDS=getCharIds();
19+
private static CharObjMap<Seat> getCharIds() {
20+
CharObjMap<Seat> result=HashCharObjMaps.newMutableMap();
21+
result.put('.',FLOOR);
22+
result.put('L',EMPTY);
23+
result.put('#',OCCUPIED);
24+
return result;
25+
}
26+
public static Seat parse(char c) {
27+
Seat result=CHAR_IDS.get(c);
28+
if (result==null) throw new IllegalArgumentException("Was ist das?");
29+
return result;
30+
}
31+
}
32+
33+
private static Seat[] parseString(String in) {
34+
Seat[] result=new Seat[in.length()];
35+
for (int i=0;i<in.length();++i) result[i]=Seat.parse(in.charAt(i));
36+
return result;
37+
}
38+
39+
private static Seat nextState(Seat currentState,int occupiedNeighbours) {
40+
if (currentState==Seat.FLOOR) return currentState;
41+
if (occupiedNeighbours==0) return Seat.OCCUPIED;
42+
if (occupiedNeighbours>=5) return Seat.EMPTY;
43+
return currentState;
44+
}
45+
46+
private final static int[][] DIRECTIONS=new int[][] {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
47+
48+
private static boolean isFirstNeighbourOccupied(Seat[][] state,int i,int j,int dirI,int dirJ) {
49+
for (;;) {
50+
i+=dirI;
51+
j+=dirJ;
52+
if ((i<0)||(i>=state.length)||(j<0)||(j>=state[i].length)) return false; // No neighbours in line of sight.
53+
else if (state[i][j]==Seat.EMPTY) return false;
54+
else if (state[i][j]==Seat.OCCUPIED) return true;
55+
}
56+
}
57+
58+
private static int countNeighbours(Seat[][] state,int baseI,int baseJ) {
59+
int result=0;
60+
for (int[] dir:DIRECTIONS) if (isFirstNeighbourOccupied(state,baseI,baseJ,dir[0],dir[1])) ++result;
61+
return result;
62+
}
63+
64+
private static Seat[][] iterate(Seat[][] currentState) {
65+
Seat[][] result=new Seat[currentState.length][];
66+
for (int i=0;i<currentState.length;++i) {
67+
result[i]=new Seat[currentState[i].length];
68+
for (int j=0;j<currentState[i].length;++j) result[i][j]=nextState(currentState[i][j],countNeighbours(currentState,i,j));
69+
}
70+
return result;
71+
}
72+
73+
private static boolean equals(Seat[][] array1,Seat[][] array2) {
74+
if (array1.length!=array2.length) return false;
75+
for (int i=0;i<array1.length;++i) if (array1[i].length!=array2[i].length) return false;
76+
else for (int j=0;j<array1[i].length;++j) if (array1[i][j]!=array2[i][j]) return false;
77+
return true;
78+
}
79+
80+
private static int countOccupied(Seat[][] array) {
81+
int result=0;
82+
for (Seat[] subArray:array) for (Seat s:subArray) if (s==Seat.OCCUPIED) ++result;
83+
return result;
84+
}
85+
86+
public static void main(String[] args) throws IOException {
87+
URL file=Resources.getResource(IN_FILE);
88+
List<String> contents=Resources.readLines(file,Charsets.UTF_8);
89+
Seat[][] basePositions=new Seat[contents.size()][];
90+
for (int i=0;i<contents.size();++i) basePositions[i]=parseString(contents.get(i));
91+
for (;;) {
92+
Seat[][] nextStep=iterate(basePositions);
93+
if (equals(basePositions,nextStep)) {
94+
System.out.println(countOccupied(nextStep));
95+
return;
96+
}
97+
basePositions=nextStep;
98+
}
99+
}
100+
}

‎2020/src/main/resources/Advent11.txt

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLL.LL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLL.LLLLL
2+
LLLLLLLLL.LLLLL.LLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLL
3+
LLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLL..LLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
4+
LLLLLLLLL.LLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
5+
LLLLLLLLL.LLLLLLLLLLL..LLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLL.L.LL.L..LLLLL.LLLLLLLL
6+
LLLLLLLLL.LLLLLLLLLLL.LLLL.LLL.LLLLL.LLLLLLLL.LL.L.LLLLLL..LL.LLLLLL.LLLL..LLL.LLLLLL.LLLLLL.L
7+
LLLLLLLL..LLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLL.LL.LLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
8+
LLLLLLLLLLLLLLLLLLLLL.LLL..LLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
9+
.LLL..L..........L.LL.LL..L..L.....L.....L.....L..L..L....L..L..LL..L.L..L..LLL..LL...L.LLLLL.
10+
.LLLLLLLL.LL.L.LLLLLL.LLL..LLLLLLLLL.LLLLLLLLL.LLL.LLLLLLLLLL.L.L.LLLLLLLLLLLL.LLLLLLLLLLLLLLL
11+
LLL.LLLLL.LLL.L.L.LLLLLLLL.LLLL.LLLL.LLLLLLLL...LL.LLLLLLLLLLLLLL.LLLLLLLLLL.L..LLL..LLLLLLLLL
12+
LLLLLLLLLLLLLLLLLLLLL.L.LL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL
13+
LLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.
14+
LLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.L.LLLL.LLLL.LLLLLLLLLL
15+
...LL.L......LL.......LLL...L.LL.LLL.L..L...L.L.LL...L.LLL.....L...L..L......L..LLLL........L.
16+
LLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLL.L.LLLL.LL.LL..LLLL.LL.LLLLLLL.LLLL.LLLL..LLLL.LLLL
17+
LLLLLLL.L.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLL
18+
.LL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLL.LLLL.LLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
19+
LLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLL..LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLL
20+
LLLLLLLLLLLLLLLLLLLLL..LLL.LLLLLLLLL.L.LLLLLL.LLLL.LLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLL.LL
21+
LLLLLLLLL.LLLL..LLLLL.LLLL.LLLLLLLLLLLLLLL.LL.LLLL.LLLLLL.LL..LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
22+
LL...L.L.LL.L....LL..L..L.L.LL.L..L.L...L.LL..L.L..L....L.....L.L.L.L.......L....L.....L..LLLL
23+
LLLLLLLLL..LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.L.LLLLL.LLLLLL..L.LLLLLLLLLLLLLLLLLL
24+
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLL
25+
LLLLLLLLL.LLL.LLLLLL..LLLL.LLLLLLLLL.L.LLLLLL...LL.L.LLL..LLLLLLL.LLLLL.L.LLL.LLLLLLLLLLL.LLLL
26+
LLLLLLLLLLLLLLL.LLLLL.LL.LLLLLLLLLLL.LLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLLL
27+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
28+
.L..LL.L.L......LL..L..L....LL.LLLLL.L.L.L.....L.L...LLL.LL...LL..L......L....L.LL..L...L.L...
29+
LLLLLLLLL.LLLLL.LLLLL..LLL.LLLLLLLLL.LLLLLLLL.L.LL.LLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
30+
LLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLL.LLLLL.LL.LLLL.LLLLLLLLLLLLLL.LLL.LLL.LLLL.LLLL.LLLLLLLLLL
31+
.LLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LL..LLLLLLL.LLLLLLL.LLLLLLL.LLL..LLLL.L.LLLLLLLL
32+
L.LLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLLL.LLLL.LLL.LL.L.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LL
33+
LLLL.LLLLLLLLLL.LLLLL.LLLL.LLLLLLLL..LLLLLLLLLLLLL.LLLLLL.LLL.LLL.L.LLLLLLLLLL.LLLL.LLLLLLLLLL
34+
LLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLL.LLL.LL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
35+
L.LLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLL.LLLL.L
36+
LLLLLLLLL.LL.LL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLL.L.LLLLLLLLLLLL.LLLL.LLLLLLLLLL
37+
LL..L.L.LL..L..L.LLLLL.L.L......L..L.....L..LLL.L...LL.........L...L.........LL...LL...L..L...
38+
L.LLLLLLLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLL
39+
LLLLLLLLL..LLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLL.LL.LLLLLLL.LLLLL
40+
LLLLLLL.L.LLLLLLLLLLL.LLLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLLLLL.LLLLLLL.LLLL
41+
LLLLLLLLL.LLLLL..LLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLL.LLLL
42+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLL.LLLLLLL.L.LL.LLLL.LL.LLLLLLL
43+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLLLLLL.LLLL.LLLL.LLLL.LLLLLLLLLL
44+
LLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLL
45+
...L......L.L...L...L...LL..LL..LLLL..L....LLLL....L...L.L.....LL..LL...LL........LL..L.L...LL
46+
LLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLL.LL.LLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLLL
47+
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL..LLL.LLLL.L
48+
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.LL
49+
LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LL.LLL.L.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL
50+
..L.L..LL.....L....LL.L.L.L..LLL......L..LLL..L..L....LL..L.LLL..L.....LL.L.L...........L..L..
51+
LLLLLLLLLLLLLL.L.LLLL.LLLL.LL.LLLLLL.LLLLLLL..LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.L.L
52+
.LLLLLLLL.L.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
53+
LLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLL.LLLLLLLLL.LL.LLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLL.
54+
..LLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLLL
55+
.L..L..LL..L.L.L.L...L..LL............L..LL..LL.L.L.........LL.....L...L.L.LLL.L.L..........L.
56+
LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL..LLLL.LLLLLL.L.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLL
57+
LLLLLLLLL.LLLLL.L.LLL.LLLL.LLLLLLLLLLLLLLLL.L.LLLL..LLLLLLLLLLLLL.LLLLLLL.LLLL.LL.L.LLLLLL.LLL
58+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLL.L.LLLLLL.LLLL.LLLL.L.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLL
59+
LLLLLLLLL.LLLLL.LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLL.LL.LLLLLLL.LLLLLLL.LLLL.LLLL.L.LLLLLLLL
60+
LLLLLLLLLLLLLLLLLLLLL.LLLL..LL.LLLLLLL.LLLLLL.LLLLLLLLLLL.LL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
61+
LLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLL.L.LLLLLL.LLLLLLL.LLL.L.LLLLLL.LLLL.LLLLLLLLLL
62+
LLL.LLL.LLLLLLL.LLLLL..LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LL.LLLLLLL.LLLLLL..LLLLLLLLL.LLLLLLLLLL
63+
....L.L..L.L..L....L.L..L............LL.............L......L.L....L....L..L.LL.........LLL..L.
64+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLL.L.LLLLLLLLLL.LLLL.LLLLLLLLLL
65+
LLLLLLLLL.LLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL..LLL.LLLL.LLLLLL.LLL
66+
LLLLLLLLL.LLLLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.L.LLLLLLL.LLLL.LLLLLLLLLLLLLLL
67+
LLLLLLLLL.LL..LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLL..LLLLLLL.LLLLLLLLL.LLLLLLL.LL
68+
.LL..L..L..LLL...L..LL.L...LL..L.....L.L...L.L...L.L..L.L........L.L..L.L..L....L.....L..L..LL
69+
LLLLLLLLL.LLLLLLLLLL..LLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLL.LL.L.LL.LLLLLLL
70+
LLLLLLLLL.LLL.L.LLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLL.LL.LLL.LLLLLLL.LLLLL.LLL.LL.LLLL.LLLLLLLLLL
71+
LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLL..LL.LLLLLLLLLLLLL.LLLLLLLLLL
72+
LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLL
73+
LLL.LLLLLLLL.LL.LLLLL.LLLL.LLLLLLLL.LLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLLL
74+
LLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLLL
75+
..L....L........L....LL..L...LL.L.....L.LL.L..L....L....LL......L.L.....L.L..LL..L.....L.LLL.L
76+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
77+
LLLLL.LLLL.LLLLLLLLLL.LLLL.L.LLLLLLL.LLLLLLLL.LLLL.L.LLLL.LLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLL
78+
LL.LLLLLL.LLLLL.LLL.LL.LLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLL.LLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.L
79+
LLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLL.L.LLLLLL.LLLL.LLLL.LLLLLLL.LL
80+
LLL.LLLL..LLLLLLLLLLL.LLLL.LLLLLLLLL..LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
81+
LLLLLLLLLLLLLLL.LLLLL..LLLLLLLLLLLLL.LLLLLLLLL.LLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLL..LLLLLLLLLL
82+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLL
83+
LLLLLLLLL.LLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLL.L.LL.LLLLL.LL.LLLLLLL.LLLLLLLL
84+
LLLLLLLLLLL.LLL.LLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLL.L
85+
...LL.L..L...LL...LLL.........L.L.L..L.....LLLL.LL....L..L...L...LL..L..L......L..LLLL....L..L
86+
LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLL.L.LLLLLL.LLLL.LLLL.L.LLL.LLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
87+
LLLLL.LLL.LLL.L.LL.LL.LLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLL.L.LLLLLLL..LLL.LLLL.L.LLLLLLLL
88+
LLLLLLLLLLLLL.L.LLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLL..LL.L..LLLLLLL.LLLL.LL.LLLL.LLLL.LLLLLLLLLL
89+
LLLLLLLL..LLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL..LL.LLLLLL.L..LLL.LLLLLLLLLL
90+
LLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLL.L.LLLLLLLL
91+
.L....L.LL...L...LL......LL..........L.LLL...L...L..........L.........LL..L.L.L...L..L........
92+
LLLLLLLLL.LLLLLLLLL.L.LLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL..LLLLLLLLL
93+
LLLLLLLLL.LLLLL.LL.LL.LLLL.LLLL.LLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLLLLLLLLL
94+
LL.LLLLLL.LLLLL.LLLLL.LLLL.LL.LLLLLL.LLLLL.LL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLLL
95+
LLLLLLLLL.LLLLL.LLLLL.LLLL.LLLLLLLLL.LL.LLLLL.LLLL.LL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LL
96+
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLL..LLL.LLLLLL.LLLLLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLL
97+
LLLLLLLLLL.L.LL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.L.LLLLL.LLLL.LLLLLLLLLLLLLLL

0 commit comments

Comments
 (0)
Please sign in to comment.