fairland: Correct island placement bias

A sector is admissible for island placement when land can be grown in
every sector within a certain distance.

place_island() picks a random start sector, then searches linearly for
an admissible sector.  If it finds one, it places the island there.
Else, it reduces the distance by one and tries again.  It fails when
none is found even for distance zero.

Trying with extra distance is obviously meant to reduce the risk of
islands from running into each other without need.  Initial distance
is @di, the minimum distance between continents, which doesn't really
make sense, and is undocumented.

Bug: place_island() never tries the start sector.

Bias: placement probability is higher for sectors immediately
following inadmissible sectors.  Because of that, islands are more
often placed to the right of existing islands.  Players could exploit
that to guide their search for land.

Rewrite place_island() to pick sectors with equal probability,
dropping the undocumented extra distance feature.  If it's missed, we
can bring it back.

The new code visits each sector once.  The old code visits only one
sector in the best case, but each sector several times in the worst
case.  fairland performance improves measurably for crowded setups
with large @di, else it suffers.  For instance, Hvy Fever example
given in the commit before previous runs seven times faster for me.
With @di reduced to 2, its run time more than doubles.  Not that it
matters.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2020-08-09 17:38:36 +02:00
parent 001674e5c5
commit eecb9c9825
9 changed files with 3661 additions and 3658 deletions

View file

@ -766,6 +766,17 @@ can_grow_at(int c, int x, int y)
return own[x][y] == -1 && xzone_ok(c, x, y); return own[x][y] == -1 && xzone_ok(c, x, y);
} }
static void
add_sector(int c, int x, int y)
{
assert(own[x][y] == -1);
xzone_around_sector(c, x, y, c < nc ? di : DISTINCT_ISLANDS ? id : 0);
sectx[c][isecs[c]] = x;
secty[c][isecs[c]] = y;
isecs[c]++;
own[x][y] = c;
}
static int static int
try_to_grow(int c, int newx, int newy, int extra_dist) try_to_grow(int c, int newx, int newy, int extra_dist)
{ {
@ -786,12 +797,7 @@ try_to_grow(int c, int newx, int newy, int extra_dist)
} while (hexagon_next(&hexit, &px, &py)); } while (hexagon_next(&hexit, &px, &py));
} }
xzone_around_sector(c, newx, newy, add_sector(c, newx, newy);
c < nc ? di : DISTINCT_ISLANDS ? id : 0);
sectx[c][isecs[c]] = newx;
secty[c][isecs[c]] = newy;
isecs[c]++;
own[newx][newy] = c;
return 1; return 1;
} }
@ -943,28 +949,25 @@ grow_continents(void)
static int static int
place_island(int c) place_island(int c)
{ {
int d, sx, sy, x, y; int n, x, y, newx, newy;
int ssy = roll0(WORLD_Y);
int ssx = new_x(roll0(WORLD_X / 2) * 2 + ssy % 2);
if (ssx > WORLD_X - 2) n = 0;
ssx = new_x(ssx + 2);
for (d = di; d >= 0; --d) { for (y = 0; y < WORLD_Y; y++) {
sx = ssx; for (x = y % 2; x < WORLD_X; x += 2) {
sy = ssy; if (can_grow_at(c, x, y)) {
x = new_x(sx + 2); n++;
for (y = sy; x != sx || y != sy; x += 2) { if (!roll0(n)) {
if (x >= WORLD_X) { newx = x;
y = new_y(y + 1); newy = y;
x = y % 2;
if (x == sx && y == sy)
break;
}
if (try_to_grow(c, x, y, d))
return 1;
} }
} }
return 0; }
}
if (n)
add_sector(c, newx, newy);
return n;
} }
/* Grow all the islands /* Grow all the islands

View file

@ -15,41 +15,41 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(3) 2(8) 3(13) 4(7) 5(10) 6(10) 7(2) 8(8) 9(14) 10(17) 11(13) 12(15) 13(9) 14(8) 15(3) growing islands: 1(7) 2(14) 3(13) 4(3) 5(16) 6(4) 7(17) 8(9) 9(11) 10(12) 11(13) 12(14) 13(17) 14(11) 15(9)
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. . . % . . . % . . . . . . . . % % . % . . . . . . . . . . . . % % % % . . . . . . . . . . . . . . . . . . . . . . % % . . . .
. . . . . . . . . . . . . . . . . . % % . . . . . . . . . . . . % % % % . . . . . . . . . . . . . . . . . . . . . . % % . . . .
. . . . . . . # # . . . . . . . . . % % % . . . . % . . . . . . . % % % . . . # # . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . # # . # . . . . . . . % % % . . . . % % . . . . . . % % % . . . # # . # . . . . . . . . . . . . . . . % % % . . . .
. . . . . . # # c c # . . . % % % . . . . . . . % % % . . . . . . . . . . . # # c c # . . . . . . . . . % % % . . % % % % . % %
. . . . . # # # # # # . . . % % % . . . . . . . % % . . . . . . . . . . . # # # # # # . . . . . . . . . % % . . . . % % . . % %
. . . . . . . # # # # . . . % . % . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . % . . . % % % % . . . . . . . .
. . . . . # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # . . . . . % % . . . % % . . . . . . . . . .
. . . . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . % . . # # # . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . % % % % . # # . . . . . . . . . . . . . . . . . . . . . . . . %
. . . . . . . . % . . . . . . . . . . . . . . . . . . . . . . . . % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . % % % % . . . . . . . . . . . . . . . . . . . . . % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . % % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % % . . . . . . . . . . . . % . . . . .
. . . . . . . . % % . . . % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % % % . . . . . . . . . . % % . . . . .
. . . % . . . . . . . . . . % % . . # # # # . . . . . . . . . . . . % % . . . . . . . . % % % % % . # # # # . . % % . . . . . .
. . % % . . . . . . . . . % % % . . # # # # . . . . . . % . . . . % % . . . . . . . . . % % % % . . # # # # . % % % . . . . . .
. . . . . . . . . . . . . % % % % . . # # # # . . . . . % % . . . % % % . . . . . . . . . % % . . . . # # # # . % % % . . . . .
. . . . . # # # . . . . . % % % % . # a a # # . . . . % % % % . . % % . . # # # . . . . . . . . . . # a a # # . . . . % % % . .
. . . . # # # # # . . . % . % % % . # # # # # # . . . % % % . . . . . . # # # # # . . . . . . . . . # # # # # # . % % % % % % .
% . . # # # # # . . . % . . . . . # # # # # # . . . . . . . . . . . . # # # # # . . . . . . . . . # # # # # # . . . . % % % % .
% . . # b b # # # . . % . . % % . . . # . . . . . . . . . . % % . . . # b b # # # . % % % . . . . . . # . . . . . . . . . . % .
% . . # # # # # . . . . % % % % % . . . . . . . . . . . . . % % . . . # # # # # . % % % % % . . . . . . . . . . . . . . . . . .
. . . . # # # # . . . . . % % % % . . . . . . . . . . . . . % % . . . . # # # # . . % % % % % . . . . . . . . . . . . . . . . .
. . . . # # . . . . . . % % % . . . . . . . . . . . . . . . % % . . . . # # . . . . . % % % . % . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . . . . . . . . . . % . % % . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . % % . % . . . . . % % . . . . . . . . % % % . . % % % . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . % % % . . . . . % % % . . . . . . . % % % . . . . % % . . . . . . . . . .
. . % % . % . . . . . . . . . . . . . . . . . . . . . % % % . . . . . % % % . . . . . . % % % % . . . % % . . . . . . . . . . .
. . % % % . % . . . . . . . . . . . . . . . . . . . . . . . . . . . . % % % % . . . . . . . . . . . . . . . . . . . . . . . . .
. % % % % . % % % % . . . . . . . . . . . . . . . . . . . . . . . . . % % % % . . . . . . . . . . . . . . . . . . % % % . . . .
. . % % . . % % % % . . . . . % % % . . % % . . . . . . . . . . . . . % . . . . . . . . . . . . . . . . . . . . . % % % . . . .
. . % . . % % % % . . . . . . % % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % % % . . .
A script for adding all the countries can be found in "sandbox/no-spike-newcap_script". A script for adding all the countries can be found in "sandbox/no-spike-newcap_script".

File diff suppressed because it is too large Load diff

View file

@ -15,41 +15,41 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(15) 2(21) 3(11) 4(13) 5(9) growing islands: 1(13) 2(1) 3(10) 4(5) 5(23)
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . % . . . . . .
. . . # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # . . . . . . . . . . . . . . . . . . . . . . . % % .
. . # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # . . . . . . . . . . . . . . . . . . . . % % % % .
. . # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # . . . . . . . . . . . . . . . . . . . . . % % %
. . # # # e e # . . % % . . . . . . . . . . . . . . . . . . . . . . # # # e e # . . . . . . . . . . . . . . . . . . . . . . . %
. . . # # # # # . % % % % % . . . . . . . . . . . . . . . . . . . . . # # # # # . . . . . . . . . . . . . . . . . . . . . . . .
. . # # # # # . % % % . . . . . . . # . . . . . . . . . . . . . . . # # # # # . . . . . . . . . . . # . . . . . . . . . . . . .
. . . . . . . . . % % % . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # . . . . . . . . . . . .
. . . . . . . . . % % % . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . .
. . . . . . . . . % % % . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . .
. . . . . . . . % . % . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . .
. . . . . . . . . . . . . . . . # # c c # . . . . . . . . . . . . . . . . . . . . . . . . . . . # # c c # . . . . . . . . . . .
. . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . .
# . . . . . . . . . . . . % . . . # # # # . . . . . . . . . # . # . . . . . . . . . . . . . . . . # # # # . . . . . . . . . # .
# . . . . . . . . . . . % % . . . # # . . . . . . . . . # # # # # . . . . . . . . . . . . . . . . # # . . . . . . . . . # # # #
# # . . . . . . . . . . % % % . . . . . . . . . . . . . # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . # # # #
# # . . . . . . . . . % % % . . . . . . . . . . . . . . # a a # # # . . . . . . . . . . . . . . . . . . . . . . . . . . # a a #
# # # . . . . . . # . . . . . . . . . . . . . . . . . . # # # # # # # . . . . . . # . . . % % . . . . . . . . . . . . . # # # #
# . . . . . # . # # # # . . . . . . . . . . . . . . . . # . # # # . . . . . # . # # # # . % % . . . . . . . . . . . . . # . # #
. . . . . . . # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # . % % . . . . . . . . . . . . . . . .
. . . . . . # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # . % % . . . . . . . . % % % . . . . .
. . . . . . . # # d d # # . . . . . . . . . . . . . . . . . . . . . . . . . . # # d d # # . % % . . . . . . . . % % % % . . . .
. . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # . . . % % . . . . . . . . % % % % . . . . .
. . . . . . . . . # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # . % % % % . . . . . . . . . % % . . . . .
. . % % . . . . . # . . . . . . . . . # . . . . . . . . . % . . . . % . . . . . . # . % % % . . . . . # . . . . . . . . . . . .
. % % % . . . . . . . . . . . . . . . # # . . . . . . . . % % % . . . % . . . . . . . . % % . . . . . # # . . . . . . . . . . .
. . % % % . . . . . . . . . . . . # # # # . % % % % . . % % % % . . . % % . . . . . . . % . . . . # # # # . . . . . . . . . . .
% . . % % . . . . . . . . . . . . # # # # # . % % % . . . % % % . . . . % . . . . . . . . % . . . # # # # # . . . . . . . . . .
. . . % . . . . . . . . . . . . # # # # # # . % % % % . . % % . . . . . . . . . . . . . . . . . # # # # # # . . . . . . . . . .
. . . % % . . . . . . . . . . . . # # # b b . . . . . . . . . % . . . . . . . . . . . . . . . . . # # # b b . . . . . . . . . .
. . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . # # # # . . . . . . . . . . .
A script for adding all the countries can be found in "sandbox/plain-newcap_script". A script for adding all the countries can be found in "sandbox/plain-newcap_script".

File diff suppressed because it is too large Load diff

View file

@ -15,41 +15,41 @@ World dimensions: 64x32
seed is 1 seed is 1
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(30) 2(10) 3(26) 4(22) 5(20) 6(16) 7(29) 8(6) growing islands: 1(25) 2(22) 3(23) 4(23) 5(19) 6(20) 7(20) 8(13)
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. b b # # # . . . . % % . . . # . % % ^ % . . . . . . . . . . . . b b # # # . . . . . . . . . # . . . . . . . % % . . % . % % %
. # # # # . . . . . % % . . # . % % % % . . . . . . . . . . . . . ^ # # # . . . . . . . . . # . . . . . . . . . % % . . . % % .
# # ^ # . # . . . . . % ^ . . . . . . . . . . . . . . . . . . . # # ^ # . # . . . . . . . . . . . . . . . . . . . % % . . % % .
# # # # # . . . . . . % % % . . . . . . . . . . . . . . . . . . # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . % .
# . ^ # . . . # # . . . . % . . . . . . . . . . . . . . . . . . # . # # . . . # # . . . . . . . . . . . . . . . . . . . . % % .
# # ^ . . . # # . . . . . . . . . # . . . . . . . . . . . . . . # # # . . . # # . . . . . . . . . # . . . . . . . . . % % . . .
. . # # . . # . # # # . . . . . . # # # . . # . . . . . . . . . . . # ^ . . # . # # # . . . . . . ^ # # . . # . . . . . . . . .
% . . # . . # # ^ ^ # . # . . . . f f # # # . . . . . # # # . % . . . # . . ^ # # # # . # . . . . f f # # # . . . . . # # # . .
% % % . . . . e e ^ # # # . % . . . # # # # # . . . . # ^ # ^ . . % . . . . . e e ^ ^ # # . % . . . # ^ # # # . . . . # # # # .
% % % % . # # # # # # . . % % . # # ^ # # ^ # . . . # # ^ # # . % % % % . # # # # # # . . % % . # # ^ # # # # . . . # # # ^ # .
% % % % % . . # # # # . % % % . . # . # # # # . . # # # # # # . . % % % . . . # # # # . % % % . . # . # # # # . . # # ^ # # # .
^ % % % % . . . . . . % % % . . . . . # ^ . . . . # # # h h # . % % % % . . . . . . . % % % % % . . . # # . . . . # # # h h ^ .
% % % % % . . . . . . % ^ % % % . . . # . . . . . . # # # . . . . % % . . . . . . % . % % % . . % % . # . . . . . . # # # . . .
. % ^ % % . . . . % % ^ % % % . . . . . . . # . . # # . . % % % ^ % . . . . . . . % ^ ^ % . . . % . . . . . # . . # # . . . . .
. . % % % % . . . . % % % % . % . . . . . # # # . . . # . % % . . . % . . . . . . % % % . . . . % . . . . # # # . . . # . . . .
. . % . ^ . # . . . % ^ % . . . . . . . # # # . . . . . % % % % . . % . . . # . % . . . . . . . ^ . . . # # # . . . . . . . . .
. . . % % . . # . . . % . % . . . . . . ^ # # # . . . . % % % % . . . % . . . # . . . . . . % . . % . . # # # # . . . . . . . .
. . . % . . # . . . . . . . . . . . . ^ d d . . . . . . % % % % . . . . . . # . . . . % % % % % % . . # d d . . . . . . . . . .
^ . . . % . # . . # . . . . . . . . . # # # . . . . . . . % % % . . . . . . # . . # . . % . % . % . . # # ^ . . . . . . . . . .
. . . . . # # # # . . . . . . . . . # ^ # # # . . . . . % . % . . . . . . # ^ # ^ . . . . % % % . . # ^ # # # . . . . . . . . .
. . . . # # c c # # . . . . . . . . # # # # # . . . . . . . . . . . . . # # c c ^ # . . . . ^ . . . # # # # # . . . . . . . . .
# . . . . # # # ^ # . . . . . . . . # . # # . . . . . # ^ . . # # . . . . # # # # # . . . . . . . . ^ . # # . . . . . # # . . #
# . . # # # # # # ^ . . . # . # . . . . . . . . . . . . g g # # # . . # # # # # # # . % . # . # . % . . . . . . . . . . g g # #
# . . ^ . . . # # . . . . # # . . . . . . . . . . . . . # # # # # . . # . . . # # . % . . # # . . ^ . . . . . . . . . . # ^ ^ #
# . . . . % ^ . . . . . . . # # # . . . . . . . . . . . # # ^ # # . . . . . . . . . % % . . # # # . % . . . % % . . . . # # # #
# . . . % . % % % % . . ^ # ^ . # . . . . . . . . . . . # ^ # # # . . . . . . . % ^ % . # # # . ^ . % % % % ^ % . . . . # ^ # #
# . . . . . . . % % . . . . . # # . . . . . . . . . . . . # # # # . . . . . . . % . % % . . . # # . . % % % % % % . % % . # # #
. . . . . . % % % % . . . . . # . # . % . . . . . . . . . . # . . . . . . . . % % % . . . . . # . # . % % % % % % % % % . . # .
. . . . . . % % % % % . . # # # a a . % % . . . . . . . . . . # . . . . . . . . . . . . . # ^ # a a . % ^ % . % . % ^ % % % . #
. . . . . % % % % % % % . # ^ # # . % ^ % % . . . . . . . . . . % . . . . . . . . . . . . ^ # # # . % % % % % . . % % % % % . .
. . . . . . . % % % % ^ % . # # . . % % % . . . . . . . . . . . % . . . . . . . . . . . . . # # . . . % % ^ % % % % ^ % % ^ % %
. # . . . # . % ^ % % % . # # . % % % % . . . . . . . . . . . . . # . . . # . . . . . . . # # . . . . . . . % . % % % ^ % % % %
A script for adding all the countries can be found in "sandbox/spike-newcap_script". A script for adding all the countries can be found in "sandbox/spike-newcap_script".

File diff suppressed because it is too large Load diff

View file

@ -25,43 +25,43 @@ Only managed to grow 30 out of 37 sectors.
try #3 (out of 10)... try #3 (out of 10)...
placing capitals... placing capitals...
growing continents... growing continents...
growing islands: 1(14) 2(20) 3(11) 4(16) 5(14) 6(8) 7(2) 8(3) 9(4) 10(5) 11(14) 12(3) growing islands: 1(5) 2(9) 3(11) 4(7) 5(11) 6(18) 7(17) 8(7) 9(10) 10(8) 11(6) 12(18) 13(7) 14(9) 15(1) 16(2) 17(2) 18(1)
No room for island #13 No room for island #19
6 stunted islands 8 stunted islands
elevating land... elevating land...
writing to sectors file... writing to sectors file...
. . # # # # . . % . . . . % % % % . . . . . . # # # # # # . . % . . # # # # . . . . . . . . . . % % % % . . . # # # # # # . . .
. . # # # # . . % . . . % % % . . . % % . . # # e e # # . . % % . . # # # # . . . . . . . . . % % % % . . . # # e e # # . . % %
. . . f f # # . . . . . % % . . . . % % . . # # # # # # . . % % . . . f f # # . . % % % % . . . . . % % . . # # # # # # . . % %
. # # # # # # . . . . . % . . . . . % . . # # # # # # . . % % . . # # # # # # . . . % % % % . . . . % . . # # # # # # . . % % .
. . . # # # # # . . . . . . . . # . . % . . . # # # # . . % % . . . . # # # # # . . . % % . . . # . . . . . . # # # # . . % . .
. . . # # # # # # . . . . . . # # . . % . . . . . . . . % % . . . . . # # # # # # . . . . . . # # . . . . . . . . . . . . . . .
% % . . # # # # . . . % . . # # # # . . % . . . . . . . % % . . % % . . # # # # . . . . . . # # # # . . % % . . . . . . . . . %
. % . . # # . . . . % . . # # # # # . . . . % . . % % % . . . . . % . . # # . . . . % . . # # # # # . . . % % % % . . % . . . .
. . % . . . . . . . % . . # # g g # # . . . % % . . . . . . . . . . % . . . . . . % % . . # # g g # # . . . % . . . . . . . . .
. . . . . . . . . . . . . # # # # # # # . . % . . . . . . # # # . . % . . . . % % % % . . # # # # # # # . . % . . . . . . # # #
# . . . . . . . . . . . . . # # # # . # . . % . . # # . . # # # # . . . . % . . . . . . . . # # # # . # . . % . . # # . . # # #
# . . . . . . . . . . . . . # # # # . . . . . . # # . # # # # # # . . . . . . . . . . . . . # # # # . . . . . . # # . # # # # #
# . . . . . . . . # . . . . . # # # . . . . . . . # # # h h # # # . . % . . . . . # . . . . . # # # . . . . . . . # # # h h # #
. . . . . # # # # # . . . . . . . . . . . . . . . # # # # # # # . . % . . # # # # # . . % . . . . . . . % % . . . # # # # # # #
. . . . . # # # # # # . . . . . . . . . . . . . . . # # # # . . . . % . . # # # # # # . . % . . . . . . . % % % . . # # # # . .
. . . . # # b b # # # . . . . . . . . . . . . % . . # . . . . . . % . . # # b b # # # . . % % % % % % . . . . . . . # . . . . .
. . . . . # # # # # # # . . % % . . . . . . . . % . . . . . . % % % % . . # # # # # # # . . % % . . . . . . . . . . . . . . . %
. . . . . . # # # # # # . . % . . . . . # # . . % . . . % % % . . . % . . . # # # # # # . . % . . . . . # # . . % . . . . % % .
. . . . . . . # # # # # . . % . . # # # # # # . . % % % % . . . . . . . . . . # # # # # . . . . . # # # # # # . . % % % . . . .
# . . % % . . . . . . . . % % . . # # # # # # . . % % % . . . . # . . . % . . . . . . . . . . . . # # # # # # . . % % . . . . .
# # . . . % . . . . . . . % % % . . # # c c # # . . % % . . # # # # . . . % . . . . . . . % . . . . # # c c # # . . % % . . # #
# # . . . % % % . . . % % % % % . . # # # # # # . . % . . # # # # # . . . . . . % % % % % % . . . . # # # # # # . . % . . # # #
# # # # . . % % . . . . . . . . . . . # # # # # . . % . . # # # # # # # . . . . . . . . . . . . % . . # # # # # . . . . . # # #
# # # # . . % . . . . . . . . . . . . # # # # # . . % . . # d d # # # # . . % . . . . . . . . . % . . # # # # # . . . . . # d d
# # # # . . % . . # # . . # # . . . . . . . # . . . . % . . # # # # # # . . % . . # # . . # # . . % . . . . # . . . % . . . # #
# # # . . % . . # # # # # # # . . . . . . . . . . . . . . # # # # # # . . % . . # # # # # # # . . % . . . . . . . % % . . # # #
. . . . . % . . # # # # # # # # . . % % % . . . % % . . . . . # . . . . . % . . # # # # # # # # . . % % % . . . . % % % . . . #
. . . . % % . . # # a a # # . . . . % % % . . % . . . . . . . . . . . . % % . . # # a a # # . . . % % % % % % . . . . % . . . .
. . . . . . . . . # # # # # # . . % % % % . . . . . . . . . . . . % % % % % . . . # # # # # # . . . % % % % % . . . . . % . . .
. . . . . . . . . # # # . # . . . . % % % . . . . # . . . . . . % % . . . . . . . # # # . # . . . . . . . . . . . # . . . . % %
. . . . . . . . . . . # . . . . . . . % . . . . # # # . . . . . % . . . . . . % . . . # . . . . % . . . . . . . # # # . . . . %
. . . # # . . . . . # . . . . % . . . . . . . # # # # # . . . . . . . # # . . % . . # . . . . % % % % % % . . # # # # # . . . .
A script for adding all the countries can be found in "sandbox/stunted-newcap_script". A script for adding all the countries can be found in "sandbox/stunted-newcap_script".

File diff suppressed because it is too large Load diff