1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-06 00:23:49 +02:00
ComfyFactorio/maps/pirates/math.lua
Piratux b5e61d577b Elite biter changes
Changes:
- Elite biters now appear from league 800 in Easy and Normal difficulties (In Hard and Nightmare difficulties, elite biters appear from league 40). Previously, in Easy and Normal difficulties elite biters never appeared at all.
- Elite biters now also explode and spawn 4 non-elite biters.
2023-06-30 00:47:50 +03:00

191 lines
22 KiB
Lua

-- This file is part of thesixthroc's Pirate Ship softmod, licensed under GPLv3 and stored at https://github.com/danielmartin0/ComfyFactorio-Pirates.
local Public = {}
Public.random = math.random
Public.randomseed = math.randomseed
Public.sqrt = math.sqrt
Public.min = math.min
Public.max = math.max
Public.rad = math.rad
Public.floor = math.floor
Public.abs = math.abs
Public.ceil = math.ceil
Public.log = math.log
Public.atan = math.atan
Public.sin = math.sin
Public.cos = math.cos
Public.pi = math.pi
Public.deg = math.deg
Public.round = math.round
--- SCALING CURVES ---
function Public.sloped(x, slope)
return 1 + ((x - 1) * slope)
end
-- SLOPE GUIDE
-- slope 1 -> {0.25, 0.50, 0.75, 1.00, 1.50, 3.00, 5.00}
-- slope 4/5 -> {0.40, 0.60, 0.80, 1.00, 1.40, 2.60, 4.20}
-- slope 3/5 -> {0.55, 0.70, 0.85, 1.00, 1.30, 2.20, 3.40}
-- slope 2/5 -> {0.70, 0.80, 0.90, 1.00, 1.20, 1.80, 2.40}
-- EXPONENT GUIDE
-- exponent 1 -> {0.25, 0.50, 0.75, 1.00, 1.50, 3.00, 5.00}
-- exponent 1.5 -> {0.13, 0.35, 0.65, 1.00, 1.84, 5.20, 11.18}
-- exponent 2 -> {0.06, 0.25, 0.56, 1.00, 2.25, 9.00, 25.00}
-- exponent -1.2 -> {5.28, 2.30, 1.41, 1.00, 0.61, 0.27, 0.14}
function Public.clamp(min, max, number)
return Public.min(max, Public.max(min, number))
end
function Public.sgn(number)
return number > 0 and 1 or (number == 0 and 0 or -1)
end
function Public.length(vec)
return Public.sqrt(vec.x * vec.x + vec.y * vec.y)
end
function Public.slopefromto(x, from, to)
return Public.clamp(0, 1,
(x - from) / (to - from)
)
end
function Public.distance(vec1, vec2)
local vecx = vec2.x - vec1.x
local vecy = vec2.y - vec1.y
return Public.sqrt(vecx * vecx + vecy * vecy)
end
function Public.vector_sum(vec1, vec2)
return {x = vec1.x + vec2.x, y = vec1.y + vec2.y}
end
-- normalises vector to unit vector (length 1)
-- if vector length is 0, returns {x = 0, y = 1} vector
function Public.vector_norm(vec)
local vec_copy = { x = vec.x, y = vec.y}
local vec_length = Public.sqrt(vec_copy.x^2 + vec_copy.y^2)
if(vec_length == 0) then
vec_copy.x = 0
vec_copy.y = 1
else
vec_copy.x = vec_copy.x / vec_length
vec_copy.y = vec_copy.y / vec_length
end
return {x = vec_copy.x, y = vec_copy.y}
end
-- multiplies vec coordinates by scalar
function Public.vector_scale(vec, scalar)
return {x = vec.x * scalar, y = vec.y * scalar}
end
-- returns vector which points from position to target
function Public.vector_dir(pos_from, pos_target)
return {x = pos_target.x - pos_from.x, y = pos_target.y - pos_from.y}
end
function Public.random_float_in_range(from, to)
return Public.random() * (to - from) + from
end
-- Returns vector in random direction.
-- scalar: returned vector length. If nil, 1 will be chosen.
function Public.random_vec(scalar)
scalar = scalar or 1
local random_angle = Public.random_float_in_range(0, 2 * Public.pi)
return {
x = Public.cos(random_angle) * scalar,
y = Public.sin(random_angle) * scalar
}
end
-- Returns vector in random direction in arc: [arc_offset, arc_offset + arc_size], starting at {x=1, y=1} and going anti-clockwise.
-- scalar: returned vector length. If nil, 1 will be chosen.
-- arc_offset: offset of arc in radians.
-- arc_size: size of arc in radians. Result is undefined with negative arc_size
function Public.random_vec_in_arc(scalar, arc_offset, arc_size)
scalar = scalar or 1
local random_angle = Public.random_float_in_range(arc_offset, arc_offset + arc_size)
return {
x = Public.cos(random_angle) * scalar,
y = Public.sin(random_angle) * scalar
}
end
-- Returns unique contiguous array indices.
-- array_size: size of contiguous array.
-- count: amount of unique indices to take from the array (elements are taken in range [1, array_size]).
--
-- Example with {array_size = 5, count = 3}:
-- - Possible return value: {4, 1, 5}
--
-- Idea taken from this big brained stranger https://stackoverflow.com/a/2380705
function Public.random_unique_array_indices(array_size, count)
if count > array_size then
return nil
end
local modified_indices = {}
local result_indices = {}
for i = 0, count - 1 do
local curr_array_size = array_size - i
local num = Public.random(curr_array_size)
if modified_indices[num] == nil then
result_indices[#result_indices + 1] = num
else
result_indices[#result_indices + 1] = modified_indices[num]
end
if modified_indices[curr_array_size] == nil then
modified_indices[num] = curr_array_size
else
modified_indices[num] = modified_indices[curr_array_size]
end
end
return result_indices
end
function Public.snap_to_grid(point)
return {x = Public.ceil(point.x), y = Public.ceil(point.x)}
end
function Public.shuffle(tbl)
local size = #tbl
for i = size, 2, -1 do
local rand = Public.random(size)
tbl[i], tbl[rand] = tbl[rand], tbl[i]
end
return tbl
end
local function is_closer(pos1, pos2, pos)
return ((pos1.x - pos.x) ^ 2 + (pos1.y - pos.y) ^ 2) < ((pos2.x - pos.x) ^ 2 + (pos2.y - pos.y) ^ 2)
end
function Public.shuffle_distancebiased(tbl, position)
local size = #tbl
for i = size, 1, -1 do
local rand = Public.random(i)
if is_closer(tbl[i].position, tbl[rand].position, position) and i > rand then
tbl[i], tbl[rand] = tbl[rand], tbl[i]
end
end
return tbl
end
Public.points_in_m20t20_squared_sorted_by_distance_to_origin = {{0, 0}, {1, 0}, {0, 1}, {0, -1}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}, {2, 0}, {0, 2}, {0, -2}, {-2, 0}, {2, 1}, {2, -1}, {1, 2}, {1, -2}, {-1, 2}, {-1, -2}, {-2, 1}, {-2, -1}, {2, 2}, {2, -2}, {-2, 2}, {-2, -2}, {3, 0}, {0, 3}, {0, -3}, {-3, 0}, {3, 1}, {3, -1}, {1, 3}, {1, -3}, {-1, 3}, {-1, -3}, {-3, 1}, {-3, -1}, {3, 2}, {3, -2}, {2, 3}, {2, -3}, {-2, 3}, {-2, -3}, {-3, 2}, {-3, -2}, {4, 0}, {0, 4}, {0, -4}, {-4, 0}, {4, 1}, {4, -1}, {1, 4}, {1, -4}, {-1, 4}, {-1, -4}, {-4, 1}, {-4, -1}, {3, 3}, {3, -3}, {-3, 3}, {-3, -3}, {4, 2}, {4, -2}, {2, 4}, {2, -4}, {-2, 4}, {-2, -4}, {-4, 2}, {-4, -2}, {5, 0}, {4, 3}, {4, -3}, {3, 4}, {3, -4}, {0, 5}, {0, -5}, {-3, 4}, {-3, -4}, {-4, 3}, {-4, -3}, {-5, 0}, {5, 1}, {5, -1}, {1, 5}, {1, -5}, {-1, 5}, {-1, -5}, {-5, 1}, {-5, -1}, {5, 2}, {5, -2}, {2, 5}, {2, -5}, {-2, 5}, {-2, -5}, {-5, 2}, {-5, -2}, {4, 4}, {4, -4}, {-4, 4}, {-4, -4}, {5, 3}, {5, -3}, {3, 5}, {3, -5}, {-3, 5}, {-3, -5}, {-5, 3}, {-5, -3}, {6, 0}, {0, 6}, {0, -6}, {-6, 0}, {6, 1}, {6, -1}, {1, 6}, {1, -6}, {-1, 6}, {-1, -6}, {-6, 1}, {-6, -1}, {6, 2}, {6, -2}, {2, 6}, {2, -6}, {-2, 6}, {-2, -6}, {-6, 2}, {-6, -2}, {5, 4}, {5, -4}, {4, 5}, {4, -5}, {-4, 5}, {-4, -5}, {-5, 4}, {-5, -4}, {6, 3}, {6, -3}, {3, 6}, {3, -6}, {-3, 6}, {-3, -6}, {-6, 3}, {-6, -3}, {7, 0}, {0, 7}, {0, -7}, {-7, 0}, {7, 1}, {7, -1}, {5, 5}, {5, -5}, {1, 7}, {1, -7}, {-1, 7}, {-1, -7}, {-5, 5}, {-5, -5}, {-7, 1}, {-7, -1}, {6, 4}, {6, -4}, {4, 6}, {4, -6}, {-4, 6}, {-4, -6}, {-6, 4}, {-6, -4}, {7, 2}, {7, -2}, {2, 7}, {2, -7}, {-2, 7}, {-2, -7}, {-7, 2}, {-7, -2}, {7, 3}, {7, -3}, {3, 7}, {3, -7}, {-3, 7}, {-3, -7}, {-7, 3}, {-7, -3}, {6, 5}, {6, -5}, {5, 6}, {5, -6}, {-5, 6}, {-5, -6}, {-6, 5}, {-6, -5}, {8, 0}, {0, 8}, {0, -8}, {-8, 0}, {8, 1}, {8, -1}, {7, 4}, {7, -4}, {4, 7}, {4, -7}, {1, 8}, {1, -8}, {-1, 8}, {-1, -8}, {-4, 7}, {-4, -7}, {-7, 4}, {-7, -4}, {-8, 1}, {-8, -1}, {8, 2}, {8, -2}, {2, 8}, {2, -8}, {-2, 8}, {-2, -8}, {-8, 2}, {-8, -2}, {6, 6}, {6, -6}, {-6, 6}, {-6, -6}, {8, 3}, {8, -3}, {3, 8}, {3, -8}, {-3, 8}, {-3, -8}, {-8, 3}, {-8, -3}, {7, 5}, {7, -5}, {5, 7}, {5, -7}, {-5, 7}, {-5, -7}, {-7, 5}, {-7, -5}, {8, 4}, {8, -4}, {4, 8}, {4, -8}, {-4, 8}, {-4, -8}, {-8, 4}, {-8, -4}, {9, 0}, {0, 9}, {0, -9}, {-9, 0}, {9, 1}, {9, -1}, {1, 9}, {1, -9}, {-1, 9}, {-1, -9}, {-9, 1}, {-9, -1}, {9, 2}, {9, -2}, {7, 6}, {7, -6}, {6, 7}, {6, -7}, {2, 9}, {2, -9}, {-2, 9}, {-2, -9}, {-6, 7}, {-6, -7}, {-7, 6}, {-7, -6}, {-9, 2}, {-9, -2}, {8, 5}, {8, -5}, {5, 8}, {5, -8}, {-5, 8}, {-5, -8}, {-8, 5}, {-8, -5}, {9, 3}, {9, -3}, {3, 9}, {3, -9}, {-3, 9}, {-3, -9}, {-9, 3}, {-9, -3}, {9, 4}, {9, -4}, {4, 9}, {4, -9}, {-4, 9}, {-4, -9}, {-9, 4}, {-9, -4}, {7, 7}, {7, -7}, {-7, 7}, {-7, -7}, {10, 0}, {8, 6}, {8, -6}, {6, 8}, {6, -8}, {0, 10}, {0, -10}, {-6, 8}, {-6, -8}, {-8, 6}, {-8, -6}, {-10, 0}, {10, 1}, {10, -1}, {1, 10}, {1, -10}, {-1, 10}, {-1, -10}, {-10, 1}, {-10, -1}, {10, 2}, {10, -2}, {2, 10}, {2, -10}, {-2, 10}, {-2, -10}, {-10, 2}, {-10, -2}, {9, 5}, {9, -5}, {5, 9}, {5, -9}, {-5, 9}, {-5, -9}, {-9, 5}, {-9, -5}, {10, 3}, {10, -3}, {3, 10}, {3, -10}, {-3, 10}, {-3, -10}, {-10, 3}, {-10, -3}, {8, 7}, {8, -7}, {7, 8}, {7, -8}, {-7, 8}, {-7, -8}, {-8, 7}, {-8, -7}, {10, 4}, {10, -4}, {4, 10}, {4, -10}, {-4, 10}, {-4, -10}, {-10, 4}, {-10, -4}, {9, 6}, {9, -6}, {6, 9}, {6, -9}, {-6, 9}, {-6, -9}, {-9, 6}, {-9, -6}, {11, 0}, {0, 11}, {0, -11}, {-11, 0}, {11, 1}, {11, -1}, {1, 11}, {1, -11}, {-1, 11}, {-1, -11}, {-11, 1}, {-11, -1}, {11, 2}, {11, -2}, {10, 5}, {10, -5}, {5, 10}, {5, -10}, {2, 11}, {2, -11}, {-2, 11}, {-2, -11}, {-5, 10}, {-5, -10}, {-10, 5}, {-10, -5}, {-11, 2}, {-11, -2}, {8, 8}, {8, -8}, {-8, 8}, {-8, -8}, {11, 3}, {11, -3}, {9, 7}, {9, -7}, {7, 9}, {7, -9}, {3, 11}, {3, -11}, {-3, 11}, {-3, -11}, {-7, 9}, {-7, -9}, {-9, 7}, {-9, -7}, {-11, 3}, {-11, -3}, {10, 6}, {10, -6}, {6, 10}, {6, -10}, {-6, 10}, {-6, -10}, {-10, 6}, {-10, -6}, {11, 4}, {11, -4}, {4, 11}, {4, -11}, {-4, 11}, {-4, -11}, {-11, 4}, {-11, -4}, {12, 0}, {0, 12}, {0, -12}, {-12, 0}, {12, 1}, {12, -1}, {9, 8}, {9, -8}, {8, 9}, {8, -9}, {1, 12}, {1, -12}, {-1, 12}, {-1, -12}, {-8, 9}, {-8, -9}, {-9, 8}, {-9, -8}, {-12, 1}, {-12, -1}, {11, 5}, {11, -5}, {5, 11}, {5, -11}, {-5, 11}, {-5, -11}, {-11, 5}, {-11, -5}, {12, 2}, {12, -2}, {2, 12}, {2, -12}, {-2, 12}, {-2, -12}, {-12, 2}, {-12, -2}, {10, 7}, {10, -7}, {7, 10}, {7, -10}, {-7, 10}, {-7, -10}, {-10, 7}, {-10, -7}, {12, 3}, {12, -3}, {3, 12}, {3, -12}, {-3, 12}, {-3, -12}, {-12, 3}, {-12, -3}, {11, 6}, {11, -6}, {6, 11}, {6, -11}, {-6, 11}, {-6, -11}, {-11, 6}, {-11, -6}, {12, 4}, {12, -4}, {4, 12}, {4, -12}, {-4, 12}, {-4, -12}, {-12, 4}, {-12, -4}, {9, 9}, {9, -9}, {-9, 9}, {-9, -9}, {10, 8}, {10, -8}, {8, 10}, {8, -10}, {-8, 10}, {-8, -10}, {-10, 8}, {-10, -8}, {13, 0}, {12, 5}, {12, -5}, {5, 12}, {5, -12}, {0, 13}, {0, -13}, {-5, 12}, {-5, -12}, {-12, 5}, {-12, -5}, {-13, 0}, {13, 1}, {13, -1}, {11, 7}, {11, -7}, {7, 11}, {7, -11}, {1, 13}, {1, -13}, {-1, 13}, {-1, -13}, {-7, 11}, {-7, -11}, {-11, 7}, {-11, -7}, {-13, 1}, {-13, -1}, {13, 2}, {13, -2}, {2, 13}, {2, -13}, {-2, 13}, {-2, -13}, {-13, 2}, {-13, -2}, {13, 3}, {13, -3}, {3, 13}, {3, -13}, {-3, 13}, {-3, -13}, {-13, 3}, {-13, -3}, {12, 6}, {12, -6}, {6, 12}, {6, -12}, {-6, 12}, {-6, -12}, {-12, 6}, {-12, -6}, {10, 9}, {10, -9}, {9, 10}, {9, -10}, {-9, 10}, {-9, -10}, {-10, 9}, {-10, -9}, {13, 4}, {13, -4}, {11, 8}, {11, -8}, {8, 11}, {8, -11}, {4, 13}, {4, -13}, {-4, 13}, {-4, -13}, {-8, 11}, {-8, -11}, {-11, 8}, {-11, -8}, {-13, 4}, {-13, -4}, {12, 7}, {12, -7}, {7, 12}, {7, -12}, {-7, 12}, {-7, -12}, {-12, 7}, {-12, -7}, {13, 5}, {13, -5}, {5, 13}, {5, -13}, {-5, 13}, {-5, -13}, {-13, 5}, {-13, -5}, {14, 0}, {0, 14}, {0, -14}, {-14, 0}, {14, 1}, {14, -1}, {1, 14}, {1, -14}, {-1, 14}, {-1, -14}, {-14, 1}, {-14, -1}, {14, 2}, {14, -2}, {10, 10}, {10, -10}, {2, 14}, {2, -14}, {-2, 14}, {-2, -14}, {-10, 10}, {-10, -10}, {-14, 2}, {-14, -2}, {11, 9}, {11, -9}, {9, 11}, {9, -11}, {-9, 11}, {-9, -11}, {-11, 9}, {-11, -9}, {14, 3}, {14, -3}, {13, 6}, {13, -6}, {6, 13}, {6, -13}, {3, 14}, {3, -14}, {-3, 14}, {-3, -14}, {-6, 13}, {-6, -13}, {-13, 6}, {-13, -6}, {-14, 3}, {-14, -3}, {12, 8}, {12, -8}, {8, 12}, {8, -12}, {-8, 12}, {-8, -12}, {-12, 8}, {-12, -8}, {14, 4}, {14, -4}, {4, 14}, {4, -14}, {-4, 14}, {-4, -14}, {-14, 4}, {-14, -4}, {13, 7}, {13, -7}, {7, 13}, {7, -13}, {-7, 13}, {-7, -13}, {-13, 7}, {-13, -7}, {14, 5}, {14, -5}, {11, 10}, {11, -10}, {10, 11}, {10, -11}, {5, 14}, {5, -14}, {-5, 14}, {-5, -14}, {-10, 11}, {-10, -11}, {-11, 10}, {-11, -10}, {-14, 5}, {-14, -5}, {15, 0}, {12, 9}, {12, -9}, {9, 12}, {9, -12}, {0, 15}, {0, -15}, {-9, 12}, {-9, -12}, {-12, 9}, {-12, -9}, {-15, 0}, {15, 1}, {15, -1}, {1, 15}, {1, -15}, {-1, 15}, {-1, -15}, {-15, 1}, {-15, -1}, {15, 2}, {15, -2}, {2, 15}, {2, -15}, {-2, 15}, {-2, -15}, {-15, 2}, {-15, -2}, {14, 6}, {14, -6}, {6, 14}, {6, -14}, {-6, 14}, {-6, -14}, {-14, 6}, {-14, -6}, {13, 8}, {13, -8}, {8, 13}, {8, -13}, {-8, 13}, {-8, -13}, {-13, 8}, {-13, -8}, {15, 3}, {15, -3}, {3, 15}, {3, -15}, {-3, 15}, {-3, -15}, {-15, 3}, {-15, -3}, {15, 4}, {15, -4}, {4, 15}, {4, -15}, {-4, 15}, {-4, -15}, {-15, 4}, {-15, -4}, {11, 11}, {11, -11}, {-11, 11}, {-11, -11}, {12, 10}, {12, -10}, {10, 12}, {10, -12}, {-10, 12}, {-10, -12}, {-12, 10}, {-12, -10}, {14, 7}, {14, -7}, {7, 14}, {7, -14}, {-7, 14}, {-7, -14}, {-14, 7}, {-14, -7}, {15, 5}, {15, -5}, {13, 9}, {13, -9}, {9, 13}, {9, -13}, {5, 15}, {5, -15}, {-5, 15}, {-5, -15}, {-9, 13}, {-9, -13}, {-13, 9}, {-13, -9}, {-15, 5}, {-15, -5}, {16, 0}, {0, 16}, {0, -16}, {-16, 0}, {16, 1}, {16, -1}, {1, 16}, {1, -16}, {-1, 16}, {-1, -16}, {-16, 1}, {-16, -1}, {16, 2}, {16, -2}, {14, 8}, {14, -8}, {8, 14}, {8, -14}, {2, 16}, {2, -16}, {-2, 16}, {-2, -16}, {-8, 14}, {-8, -14}, {-14, 8}, {-14, -8}, {-16, 2}, {-16, -2}, {15, 6}, {15, -6}, {6, 15}, {6, -15}, {-6, 15}, {-6, -15}, {-15, 6}, {-15, -6}, {16, 3}, {16, -3}, {12, 11}, {12, -11}, {11, 12}, {11, -12}, {3, 16}, {3, -16}, {-3, 16}, {-3, -16}, {-11, 12}, {-11, -12}, {-12, 11}, {-12, -11}, {-16, 3}, {-16, -3}, {13, 10}, {13, -10}, {10, 13}, {10, -13}, {-10, 13}, {-10, -13}, {-13, 10}, {-13, -10}, {16, 4}, {16, -4}, {4, 16}, {4, -16}, {-4, 16}, {-4, -16}, {-16, 4}, {-16, -4}, {15, 7}, {15, -7}, {7, 15}, {7, -15}, {-7, 15}, {-7, -15}, {-15, 7}, {-15, -7}, {14, 9}, {14, -9}, {9, 14}, {9, -14}, {-9, 14}, {-9, -14}, {-14, 9}, {-14, -9}, {16, 5}, {16, -5}, {5, 16}, {5, -16}, {-5, 16}, {-5, -16}, {-16, 5}, {-16, -5}, {12, 12}, {12, -12}, {-12, 12}, {-12, -12}, {17, 0}, {15, 8}, {15, -8}, {8, 15}, {8, -15}, {0, 17}, {0, -17}, {-8, 15}, {-8, -15}, {-15, 8}, {-15, -8}, {-17, 0}, {17, 1}, {17, -1}, {13, 11}, {13, -11}, {11, 13}, {11, -13}, {1, 17}, {1, -17}, {-1, 17}, {-1, -17}, {-11, 13}, {-11, -13}, {-13, 11}, {-13, -11}, {-17, 1}, {-17, -1}, {16, 6}, {16, -6}, {6, 16}, {6, -16}, {-6, 16}, {-6, -16}, {-16, 6}, {-16, -6}, {17, 2}, {17, -2}, {2, 17}, {2, -17}, {-2, 17}, {-2, -17}, {-17, 2}, {-17, -2}, {14, 10}, {14, -10}, {10, 14}, {10, -14}, {-10, 14}, {-10, -14}, {-14, 10}, {-14, -10}, {17, 3}, {17, -3}, {3, 17}, {3, -17}, {-3, 17}, {-3, -17}, {-17, 3}, {-17, -3}, {17, 4}, {17, -4}, {16, 7}, {16, -7}, {7, 16}, {7, -16}, {4, 17}, {4, -17}, {-4, 17}, {-4, -17}, {-7, 16}, {-7, -16}, {-16, 7}, {-16, -7}, {-17, 4}, {-17, -4}, {15, 9}, {15, -9}, {9, 15}, {9, -15}, {-9, 15}, {-9, -15}, {-15, 9}, {-15, -9}, {13, 12}, {13, -12}, {12, 13}, {12, -13}, {-12, 13}, {-12, -13}, {-13, 12}, {-13, -12}, {17, 5}, {17, -5}, {5, 17}, {5, -17}, {-5, 17}, {-5, -17}, {-17, 5}, {-17, -5}, {14, 11}, {14, -11}, {11, 14}, {11, -14}, {-11, 14}, {-11, -14}, {-14, 11}, {-14, -11}, {16, 8}, {16, -8}, {8, 16}, {8, -16}, {-8, 16}, {-8, -16}, {-16, 8}, {-16, -8}, {18, 0}, {0, 18}, {0, -18}, {-18, 0}, {18, 1}, {18, -1}, {17, 6}, {17, -6}, {15, 10}, {15, -10}, {10, 15}, {10, -15}, {6, 17}, {6, -17}, {1, 18}, {1, -18}, {-1, 18}, {-1, -18}, {-6, 17}, {-6, -17}, {-10, 15}, {-10, -15}, {-15, 10}, {-15, -10}, {-17, 6}, {-17, -6}, {-18, 1}, {-18, -1}, {18, 2}, {18, -2}, {2, 18}, {2, -18}, {-2, 18}, {-2, -18}, {-18, 2}, {-18, -2}, {18, 3}, {18, -3}, {3, 18}, {3, -18}, {-3, 18}, {-3, -18}, {-18, 3}, {-18, -3}, {16, 9}, {16, -9}, {9, 16}, {9, -16}, {-9, 16}, {-9, -16}, {-16, 9}, {-16, -9}, {17, 7}, {17, -7}, {13, 13}, {13, -13}, {7, 17}, {7, -17}, {-7, 17}, {-7, -17}, {-13, 13}, {-13, -13}, {-17, 7}, {-17, -7}, {18, 4}, {18, -4}, {14, 12}, {14, -12}, {12, 14}, {12, -14}, {4, 18}, {4, -18}, {-4, 18}, {-4, -18}, {-12, 14}, {-12, -14}, {-14, 12}, {-14, -12}, {-18, 4}, {-18, -4}, {15, 11}, {15, -11}, {11, 15}, {11, -15}, {-11, 15}, {-11, -15}, {-15, 11}, {-15, -11}, {18, 5}, {18, -5}, {5, 18}, {5, -18}, {-5, 18}, {-5, -18}, {-18, 5}, {-18, -5}, {17, 8}, {17, -8}, {8, 17}, {8, -17}, {-8, 17}, {-8, -17}, {-17, 8}, {-17, -8}, {16, 10}, {16, -10}, {10, 16}, {10, -16}, {-10, 16}, {-10, -16}, {-16, 10}, {-16, -10}, {18, 6}, {18, -6}, {6, 18}, {6, -18}, {-6, 18}, {-6, -18}, {-18, 6}, {-18, -6}, {19, 0}, {0, 19}, {0, -19}, {-19, 0}, {19, 1}, {19, -1}, {1, 19}, {1, -19}, {-1, 19}, {-1, -19}, {-19, 1}, {-19, -1}, {19, 2}, {19, -2}, {14, 13}, {14, -13}, {13, 14}, {13, -14}, {2, 19}, {2, -19}, {-2, 19}, {-2, -19}, {-13, 14}, {-13, -14}, {-14, 13}, {-14, -13}, {-19, 2}, {-19, -2}, {15, 12}, {15, -12}, {12, 15}, {12, -15}, {-12, 15}, {-12, -15}, {-15, 12}, {-15, -12}, {19, 3}, {19, -3}, {17, 9}, {17, -9}, {9, 17}, {9, -17}, {3, 19}, {3, -19}, {-3, 19}, {-3, -19}, {-9, 17}, {-9, -17}, {-17, 9}, {-17, -9}, {-19, 3}, {-19, -3}, {18, 7}, {18, -7}, {7, 18}, {7, -18}, {-7, 18}, {-7, -18}, {-18, 7}, {-18, -7}, {19, 4}, {19, -4}, {16, 11}, {16, -11}, {11, 16}, {11, -16}, {4, 19}, {4, -19}, {-4, 19}, {-4, -19}, {-11, 16}, {-11, -16}, {-16, 11}, {-16, -11}, {-19, 4}, {-19, -4}, {19, 5}, {19, -5}, {5, 19}, {5, -19}, {-5, 19}, {-5, -19}, {-19, 5}, {-19, -5}, {18, 8}, {18, -8}, {8, 18}, {8, -18}, {-8, 18}, {-8, -18}, {-18, 8}, {-18, -8}, {17, 10}, {17, -10}, {10, 17}, {10, -17}, {-10, 17}, {-10, -17}, {-17, 10}, {-17, -10}, {14, 14}, {14, -14}, {-14, 14}, {-14, -14}, {15, 13}, {15, -13}, {13, 15}, {13, -15}, {-13, 15}, {-13, -15}, {-15, 13}, {-15, -13}, {19, 6}, {19, -6}, {6, 19}, {6, -19}, {-6, 19}, {-6, -19}, {-19, 6}, {-19, -6}, {20, 0}, {16, 12}, {16, -12}, {12, 16}, {12, -16}, {0, 20}, {0, -20}, {-12, 16}, {-12, -16}, {-16, 12}, {-16, -12}, {-20, 0}, {20, 1}, {20, -1}, {1, 20}, {1, -20}, {-1, 20}, {-1, -20}, {-20, 1}, {-20, -1}, {20, 2}, {20, -2}, {2, 20}, {2, -20}, {-2, 20}, {-2, -20}, {-20, 2}, {-20, -2}, {18, 9}, {18, -9}, {9, 18}, {9, -18}, {-9, 18}, {-9, -18}, {-18, 9}, {-18, -9}, {20, 3}, {20, -3}, {3, 20}, {3, -20}, {-3, 20}, {-3, -20}, {-20, 3}, {-20, -3}, {19, 7}, {19, -7}, {17, 11}, {17, -11}, {11, 17}, {11, -17}, {7, 19}, {7, -19}, {-7, 19}, {-7, -19}, {-11, 17}, {-11, -17}, {-17, 11}, {-17, -11}, {-19, 7}, {-19, -7}, {20, 4}, {20, -4}, {4, 20}, {4, -20}, {-4, 20}, {-4, -20}, {-20, 4}, {-20, -4}, {15, 14}, {15, -14}, {14, 15}, {14, -15}, {-14, 15}, {-14, -15}, {-15, 14}, {-15, -14}, {18, 10}, {18, -10}, {10, 18}, {10, -18}, {-10, 18}, {-10, -18}, {-18, 10}, {-18, -10}, {20, 5}, {20, -5}, {19, 8}, {19, -8}, {16, 13}, {16, -13}, {13, 16}, {13, -16}, {8, 19}, {8, -19}, {5, 20}, {5, -20}, {-5, 20}, {-5, -20}, {-8, 19}, {-8, -19}, {-13, 16}, {-13, -16}, {-16, 13}, {-16, -13}, {-19, 8}, {-19, -8}, {-20, 5}, {-20, -5}, {17, 12}, {17, -12}, {12, 17}, {12, -17}, {-12, 17}, {-12, -17}, {-17, 12}, {-17, -12}, {20, 6}, {20, -6}, {6, 20}, {6, -20}, {-6, 20}, {-6, -20}, {-20, 6}, {-20, -6}, {19, 9}, {19, -9}, {9, 19}, {9, -19}, {-9, 19}, {-9, -19}, {-19, 9}, {-19, -9}, {18, 11}, {18, -11}, {11, 18}, {11, -18}, {-11, 18}, {-11, -18}, {-18, 11}, {-18, -11}, {20, 7}, {20, -7}, {7, 20}, {7, -20}, {-7, 20}, {-7, -20}, {-20, 7}, {-20, -7}, {15, 15}, {15, -15}, {-15, 15}, {-15, -15}, {16, 14}, {16, -14}, {14, 16}, {14, -16}, {-14, 16}, {-14, -16}, {-16, 14}, {-16, -14}, {17, 13}, {17, -13}, {13, 17}, {13, -17}, {-13, 17}, {-13, -17}, {-17, 13}, {-17, -13}, {19, 10}, {19, -10}, {10, 19}, {10, -19}, {-10, 19}, {-10, -19}, {-19, 10}, {-19, -10}, {20, 8}, {20, -8}, {8, 20}, {8, -20}, {-8, 20}, {-8, -20}, {-20, 8}, {-20, -8}, {18, 12}, {18, -12}, {12, 18}, {12, -18}, {-12, 18}, {-12, -18}, {-18, 12}, {-18, -12}, {20, 9}, {20, -9}, {16, 15}, {16, -15}, {15, 16}, {15, -16}, {9, 20}, {9, -20}, {-9, 20}, {-9, -20}, {-15, 16}, {-15, -16}, {-16, 15}, {-16, -15}, {-20, 9}, {-20, -9}, {19, 11}, {19, -11}, {11, 19}, {11, -19}, {-11, 19}, {-11, -19}, {-19, 11}, {-19, -11}, {17, 14}, {17, -14}, {14, 17}, {14, -17}, {-14, 17}, {-14, -17}, {-17, 14}, {-17, -14}, {18, 13}, {18, -13}, {13, 18}, {13, -18}, {-13, 18}, {-13, -18}, {-18, 13}, {-18, -13}, {20, 10}, {20, -10}, {10, 20}, {10, -20}, {-10, 20}, {-10, -20}, {-20, 10}, {-20, -10}, {19, 12}, {19, -12}, {12, 19}, {12, -19}, {-12, 19}, {-12, -19}, {-19, 12}, {-19, -12}, {16, 16}, {16, -16}, {-16, 16}, {-16, -16}, {17, 15}, {17, -15}, {15, 17}, {15, -17}, {-15, 17}, {-15, -17}, {-17, 15}, {-17, -15}, {18, 14}, {18, -14}, {14, 18}, {14, -18}, {-14, 18}, {-14, -18}, {-18, 14}, {-18, -14}, {20, 11}, {20, -11}, {11, 20}, {11, -20}, {-11, 20}, {-11, -20}, {-20, 11}, {-20, -11}, {19, 13}, {19, -13}, {13, 19}, {13, -19}, {-13, 19}, {-13, -19}, {-19, 13}, {-19, -13}, {20, 12}, {20, -12}, {12, 20}, {12, -20}, {-12, 20}, {-12, -20}, {-20, 12}, {-20, -12}, {17, 16}, {17, -16}, {16, 17}, {16, -17}, {-16, 17}, {-16, -17}, {-17, 16}, {-17, -16}, {18, 15}, {18, -15}, {15, 18}, {15, -18}, {-15, 18}, {-15, -18}, {-18, 15}, {-18, -15}, {19, 14}, {19, -14}, {14, 19}, {14, -19}, {-14, 19}, {-14, -19}, {-19, 14}, {-19, -14}, {20, 13}, {20, -13}, {13, 20}, {13, -20}, {-13, 20}, {-13, -20}, {-20, 13}, {-20, -13}, {17, 17}, {17, -17}, {-17, 17}, {-17, -17}, {18, 16}, {18, -16}, {16, 18}, {16, -18}, {-16, 18}, {-16, -18}, {-18, 16}, {-18, -16}, {19, 15}, {19, -15}, {15, 19}, {15, -19}, {-15, 19}, {-15, -19}, {-19, 15}, {-19, -15}, {20, 14}, {20, -14}, {14, 20}, {14, -20}, {-14, 20}, {-14, -20}, {-20, 14}, {-20, -14}, {18, 17}, {18, -17}, {17, 18}, {17, -18}, {-17, 18}, {-17, -18}, {-18, 17}, {-18, -17}, {19, 16}, {19, -16}, {16, 19}, {16, -19}, {-16, 19}, {-16, -19}, {-19, 16}, {-19, -16}, {20, 15}, {20, -15}, {15, 20}, {15, -20}, {-15, 20}, {-15, -20}, {-20, 15}, {-20, -15}, {18, 18}, {18, -18}, {-18, 18}, {-18, -18}, {19, 17}, {19, -17}, {17, 19}, {17, -19}, {-17, 19}, {-17, -19}, {-19, 17}, {-19, -17}, {20, 16}, {20, -16}, {16, 20}, {16, -20}, {-16, 20}, {-16, -20}, {-20, 16}, {-20, -16}, {19, 18}, {19, -18}, {18, 19}, {18, -19}, {-18, 19}, {-18, -19}, {-19, 18}, {-19, -18}, {20, 17}, {20, -17}, {17, 20}, {17, -20}, {-17, 20}, {-17, -20}, {-20, 17}, {-20, -17}, {19, 19}, {19, -19}, {-19, 19}, {-19, -19}, {20, 18}, {20, -18}, {18, 20}, {18, -20}, {-18, 20}, {-18, -20}, {-20, 18}, {-20, -18}, {20, 19}, {20, -19}, {19, 20}, {19, -20}, {-19, 20}, {-19, -20}, {-20, 19}, {-20, -19}, {20, 20}, {20, -20}, {-20, 20}, {-20, -20}}
return Public