AoC/2021/day19.swift

1105 lines
30 KiB
Swift
Raw Permalink Normal View History

2021-12-19 15:56:05 +01:00
@main
struct Day19: Puzzle {
func run() {
var locations = Array(repeating: [Vector(0, 0, 0)], count: input.count)
while input.count > 1 {
for i in input.indices {
for j in input.index(after: i)..<input.endIndex {
if let (matrix, dist) = findMatch(input[j], reference: input[i]) {
let mapped = input[j].map { matrix * $0 - dist }
let all = Set(input[i]).union(mapped)
input[i] = Array(all)
input[j] = []
locations[i] = Array(Set(locations[i]).union(locations[j].map { matrix * $0 - dist }))
locations[j] = []
}
}
}
input.removeAll { $0.isEmpty }
locations.removeAll { $0.isEmpty }
}
print("Part 1:", input[0].count)
var maxDist = 0
for i in locations[0].indices {
for j in 0..<i {
maxDist = max(maxDist, manhattenDistance(locations[0][i], locations[0][j]))
}
}
print("Part 2:", maxDist)
}
}
func findMatch(_ input: [Vector], reference: [Vector]) -> (Matrix, Vector)? {
let referenceSet = Set(reference)
for matrix in directions {
let points = input.map { matrix * $0 }
let possibleShifts = findPossibleShifts(points, reference)
for shift in possibleShifts {
let shifted = points.lazy.map { $0 - shift }.filter { referenceSet.contains($0) }.count
if shifted >= 12 {
return (matrix, shift)
}
}
}
return nil
}
func findPossibleShifts(_ a: [Vector], _ b: [Vector]) -> Set<Vector> {
var result: Set<Vector> = []
for pointA in a {
for pointB in b {
result.insert(pointA - pointB)
}
}
return result
}
struct Vector: Hashable {
var x, y, z: Int
init(_ x: Int, _ y: Int, _ z: Int) {
self.x = x
self.y = y
self.z = z
}
static func +(lhs: Vector, rhs: Vector) -> Vector {
Vector(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z)
}
static func - (lhs: Vector, rhs: Vector) -> Vector {
.init(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z)
}
}
func manhattenDistance(_ a: Vector, _ b: Vector) -> Int {
abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)
}
struct Matrix {
var a, b, c: Int
var d, e, f: Int
var g, h, i: Int
init(_ a: Int, _ b: Int, _ c: Int, _ d: Int, _ e: Int, _ f: Int, _ g: Int, _ h: Int, _ i: Int) {
(self.a, self.b, self.c) = (a, b, c)
(self.d, self.e, self.f) = (d, e, f)
(self.g, self.h, self.i) = (g, h, i)
}
init(rows a: Vector, _ b: Vector, _ c: Vector) {
self.init(
a.x, a.y, a.z,
b.x, b.y, b.z,
c.x, c.y, c.z
)
}
}
func *(lhs: Matrix, rhs: Vector) -> Vector {
Vector(
lhs.a * rhs.x + lhs.b * rhs.y + lhs.c * rhs.z,
lhs.d * rhs.x + lhs.e * rhs.y + lhs.f * rhs.z,
lhs.g * rhs.x + lhs.h * rhs.y + lhs.i * rhs.z
)
}
func cross(_ a: Vector, _ b: Vector) -> Vector {
Vector(
a.y * b.z - a.z * b.y,
a.z * b.x - a.x * b.z,
a.x * b.y - a.y * b.x
)
}
func dot(_ a: Vector, _ b: Vector) -> Int {
a.x * b.x + a.y * b.y + a.z * b.z
}
func calcDirections() -> [Matrix] {
let axes: [Vector] = [
.init(1, 0, 0),
.init(0, 1, 0),
.init(0, 0, 1),
.init(-1, 0, 0),
.init(0, -1, 0),
.init(0, 0, -1),
]
var result: [Matrix] = []
for fi in axes.indices {
let forward = axes[fi]
for fj in axes.indices where fi != fj {
let up = axes[fj]
if dot(forward, up) != 0 {
continue
}
let right = cross(up, forward)
result.append(.init(rows: forward, right, up))
}
}
return result
}
let directions = calcDirections()
var input: [[Vector]] = [
[
Vector(-779,774,841),
Vector(-623,687,-622),
Vector(-569,692,-472),
Vector(-815,791,890),
Vector(545,-807,-699),
Vector(655,564,594),
Vector(-781,645,919),
Vector(561,908,-538),
Vector(-453,-675,694),
Vector(-885,-565,-404),
Vector(596,-595,-679),
Vector(464,-620,445),
Vector(481,-658,-759),
Vector(-574,-702,800),
Vector(-145,151,93),
Vector(-814,-575,-354),
Vector(-611,653,-643),
Vector(532,950,-506),
Vector(-475,-638,816),
Vector(403,-510,477),
Vector(736,559,518),
Vector(-17,7,140),
Vector(-861,-741,-321),
Vector(513,-554,586),
Vector(518,512,519),
Vector(549,924,-562),
],
[
Vector(689,772,-758),
Vector(537,371,685),
Vector(-672,-658,689),
Vector(123,51,-21),
Vector(-401,435,-501),
Vector(12,-98,95),
Vector(735,588,-720),
Vector(844,-573,-785),
Vector(-423,-889,-362),
Vector(-816,-649,595),
Vector(655,605,-727),
Vector(785,-703,-813),
Vector(536,-624,720),
Vector(-360,-902,-383),
Vector(-432,400,599),
Vector(-689,-669,583),
Vector(625,506,710),
Vector(455,445,698),
Vector(650,-556,751),
Vector(747,-531,-750),
Vector(-346,-875,-402),
Vector(-417,420,420),
Vector(-501,413,-386),
Vector(490,-584,661),
Vector(-499,374,505),
Vector(-449,476,-453),
],
[
Vector(663,667,-407),
Vector(-595,-818,-576),
Vector(-309,605,562),
Vector(-598,-610,-587),
Vector(-517,-586,691),
Vector(46,-151,22),
Vector(-881,281,-669),
Vector(732,-947,-380),
Vector(587,624,746),
Vector(-55,-3,100),
Vector(-458,-497,709),
Vector(593,687,-248),
Vector(572,498,738),
Vector(694,-939,-344),
Vector(401,-634,682),
Vector(-847,239,-653),
Vector(397,-527,600),
Vector(-610,-743,-467),
Vector(-474,659,598),
Vector(-414,-596,646),
Vector(657,542,-317),
Vector(-397,630,676),
Vector(378,-659,657),
Vector(-848,236,-666),
Vector(514,509,638),
Vector(753,-870,-512),
],
[
Vector(438,673,-607),
Vector(-400,-430,341),
Vector(-795,-514,-738),
Vector(-705,-416,-761),
Vector(760,-806,792),
Vector(-469,803,349),
Vector(670,-798,675),
Vector(363,648,-428),
Vector(-349,-447,506),
Vector(-425,412,-482),
Vector(520,455,660),
Vector(452,-616,-878),
Vector(553,372,771),
Vector(24,68,-59),
Vector(654,413,728),
Vector(-464,-413,481),
Vector(-404,598,-552),
Vector(-459,781,522),
Vector(538,-597,-851),
Vector(-346,488,-476),
Vector(420,-481,-842),
Vector(-470,896,540),
Vector(651,-822,721),
Vector(421,522,-506),
Vector(-690,-511,-769),
],
[
Vector(844,592,402),
Vector(-636,679,516),
Vector(-720,-400,911),
Vector(-509,-714,-788),
Vector(-826,755,-326),
Vector(39,-121,70),
Vector(661,741,-539),
Vector(727,636,527),
Vector(869,-741,-241),
Vector(742,-762,619),
Vector(-703,-565,962),
Vector(725,-852,686),
Vector(-639,710,621),
Vector(829,579,592),
Vector(654,730,-279),
Vector(-737,-540,847),
Vector(-734,702,606),
Vector(-487,-705,-778),
Vector(799,-689,-246),
Vector(-754,837,-380),
Vector(854,-715,-315),
Vector(754,-648,701),
Vector(-615,725,-335),
Vector(-628,-713,-672),
Vector(736,727,-443),
],
[
Vector(-405,590,-366),
Vector(-409,651,-375),
Vector(439,489,371),
Vector(-542,-507,536),
Vector(-367,404,-381),
Vector(299,-367,848),
Vector(-670,-452,-700),
Vector(-49,132,11),
Vector(340,-226,895),
Vector(478,-800,-337),
Vector(613,500,-723),
Vector(279,-348,939),
Vector(-558,-502,654),
Vector(390,411,415),
Vector(366,500,429),
Vector(400,-731,-350),
Vector(-612,-578,-728),
Vector(629,662,-720),
Vector(-522,-490,-688),
Vector(-453,406,393),
Vector(-679,460,405),
Vector(-652,411,356),
Vector(-532,-505,547),
Vector(707,591,-772),
Vector(635,-703,-379),
],
[
Vector(539,-841,504),
Vector(743,731,-445),
Vector(-822,-423,673),
Vector(-770,-492,627),
Vector(-762,805,536),
Vector(622,783,749),
Vector(-757,320,-629),
Vector(710,684,-611),
Vector(393,-892,456),
Vector(-769,705,691),
Vector(365,-675,-379),
Vector(-831,401,-736),
Vector(561,779,740),
Vector(-815,623,585),
Vector(385,-726,-591),
Vector(305,-611,-528),
Vector(-26,-6,-67),
Vector(-690,441,-682),
Vector(-830,-855,-756),
Vector(-707,-427,667),
Vector(808,821,734),
Vector(660,755,-621),
Vector(444,-961,435),
Vector(-831,-858,-732),
Vector(-873,-889,-537),
Vector(-116,-144,21),
],
[
Vector(620,-673,-810),
Vector(601,-454,-802),
Vector(-496,543,-614),
Vector(-596,554,-672),
Vector(963,-487,692),
Vector(-701,-396,401),
Vector(808,816,748),
Vector(638,-546,-875),
Vector(887,-534,765),
Vector(-604,428,-687),
Vector(916,-611,754),
Vector(-456,393,374),
Vector(-554,-588,-462),
Vector(549,385,-763),
Vector(-420,447,209),
Vector(-784,-504,377),
Vector(811,771,781),
Vector(-510,-687,-472),
Vector(-725,-524,511),
Vector(459,510,-757),
Vector(795,813,747),
Vector(71,-145,-43),
Vector(390,365,-693),
Vector(-534,422,297),
Vector(-565,-706,-544),
Vector(122,13,-148),
],
[
Vector(300,838,-511),
Vector(723,-429,-827),
Vector(-489,-531,-733),
Vector(-862,690,478),
Vector(272,779,-641),
Vector(365,729,650),
Vector(-749,-606,618),
Vector(-412,-399,-712),
Vector(-420,-363,-674),
Vector(-763,627,434),
Vector(584,-407,497),
Vector(-725,663,-381),
Vector(702,-366,-840),
Vector(358,649,667),
Vector(-832,581,-377),
Vector(683,-352,-813),
Vector(-773,672,537),
Vector(699,-507,475),
Vector(-616,-486,630),
Vector(-700,638,-358),
Vector(327,683,834),
Vector(632,-455,538),
Vector(335,741,-469),
Vector(-541,-595,615),
Vector(-76,130,123),
],
[
Vector(643,-906,-639),
Vector(554,-930,-576),
Vector(-438,-780,848),
Vector(885,648,-659),
Vector(-617,748,624),
Vector(708,-887,-479),
Vector(562,675,352),
Vector(513,-416,680),
Vector(-551,607,575),
Vector(867,701,-509),
Vector(567,599,433),
Vector(-593,592,-482),
Vector(533,-475,546),
Vector(-618,-692,-723),
Vector(-629,538,-371),
Vector(928,733,-581),
Vector(116,-32,-131),
Vector(405,-499,656),
Vector(515,674,570),
Vector(-629,-736,-551),
Vector(71,-144,33),
Vector(-384,-744,683),
Vector(-655,512,-481),
Vector(-658,-823,-634),
Vector(-413,-666,760),
Vector(-507,716,685),
],
[
Vector(392,400,680),
Vector(715,-577,488),
Vector(872,575,-780),
Vector(-527,-916,-745),
Vector(-756,759,-452),
Vector(-341,-954,-730),
Vector(360,461,570),
Vector(553,-799,-423),
Vector(-489,-888,625),
Vector(731,-478,552),
Vector(-844,478,532),
Vector(609,-456,515),
Vector(777,572,-702),
Vector(-439,-817,615),
Vector(641,-709,-383),
Vector(501,510,636),
Vector(-705,828,-431),
Vector(-764,593,595),
Vector(-610,708,-500),
Vector(-406,-864,449),
Vector(-77,-136,-15),
Vector(515,-651,-411),
Vector(-588,-912,-736),
Vector(1,17,72),
Vector(844,455,-646),
Vector(-784,542,383),
],
[
Vector(-705,-729,760),
Vector(-796,-680,666),
Vector(34,174,59),
Vector(681,672,720),
Vector(-634,-677,682),
Vector(685,-381,-430),
Vector(736,900,-429),
Vector(-892,-338,-314),
Vector(-28,77,-93),
Vector(-796,472,419),
Vector(731,-487,-512),
Vector(-885,399,-599),
Vector(746,727,-451),
Vector(-885,458,443),
Vector(678,-536,-330),
Vector(652,-373,448),
Vector(666,-453,483),
Vector(-706,-323,-352),
Vector(-807,414,492),
Vector(734,-275,479),
Vector(602,750,578),
Vector(-890,436,-400),
Vector(591,761,630),
Vector(-645,-332,-356),
Vector(-836,448,-626),
Vector(735,709,-336),
],
[
Vector(560,-631,663),
Vector(3,-21,-120),
Vector(425,-576,-600),
Vector(455,612,-831),
Vector(-472,492,-534),
Vector(615,888,330),
Vector(-382,383,326),
Vector(414,511,-837),
Vector(76,90,15),
Vector(-423,476,-725),
Vector(-568,-599,563),
Vector(751,919,441),
Vector(480,-626,-579),
Vector(-464,570,-714),
Vector(425,438,-790),
Vector(-744,-590,-577),
Vector(461,-722,-487),
Vector(-459,-674,578),
Vector(-688,-533,-461),
Vector(-366,425,292),
Vector(-369,380,325),
Vector(-448,-466,575),
Vector(597,-635,584),
Vector(647,-481,631),
Vector(753,946,365),
Vector(-709,-755,-482),
],
[
Vector(-793,-712,526),
Vector(43,-66,-77),
Vector(-592,814,658),
Vector(608,-557,-325),
Vector(-817,-758,545),
Vector(-447,441,-677),
Vector(-476,805,776),
Vector(377,-808,643),
Vector(685,332,-669),
Vector(-306,539,-675),
Vector(-533,-777,-578),
Vector(527,469,775),
Vector(576,-489,-523),
Vector(666,440,-717),
Vector(418,-765,542),
Vector(-678,-863,-623),
Vector(623,-570,-556),
Vector(-625,-783,-492),
Vector(460,-697,676),
Vector(653,391,833),
Vector(-611,841,744),
Vector(774,405,-693),
Vector(-801,-829,436),
Vector(678,570,758),
Vector(-11,91,43),
Vector(-418,455,-584),
],
[
Vector(805,-443,-751),
Vector(494,718,482),
Vector(2,-16,82),
Vector(104,91,-72),
Vector(-597,622,-615),
Vector(-753,481,430),
Vector(-531,502,409),
Vector(-672,731,-630),
Vector(-588,446,525),
Vector(571,-495,655),
Vector(-464,742,-627),
Vector(385,808,-378),
Vector(751,-407,-916),
Vector(382,821,-377),
Vector(-351,-554,-767),
Vector(-338,-407,491),
Vector(560,-451,483),
Vector(-450,-491,-811),
Vector(478,767,673),
Vector(531,-364,566),
Vector(-440,-536,-708),
Vector(-297,-435,349),
Vector(776,-521,-828),
Vector(572,726,662),
Vector(427,824,-344),
Vector(-266,-423,363),
],
[
Vector(-459,-573,-393),
Vector(-541,-681,657),
Vector(-691,578,-927),
Vector(846,-686,740),
Vector(854,-755,-493),
Vector(-670,527,-858),
Vector(-18,154,-79),
Vector(540,944,-704),
Vector(-392,942,855),
Vector(-622,673,-807),
Vector(-435,-635,739),
Vector(-453,-688,-389),
Vector(673,-696,718),
Vector(689,-806,-510),
Vector(549,934,-726),
Vector(345,935,570),
Vector(541,828,-585),
Vector(122,-41,-59),
Vector(-499,-636,-458),
Vector(382,940,769),
Vector(-377,756,817),
Vector(714,-691,-476),
Vector(-590,-628,839),
Vector(655,-685,833),
Vector(-386,695,813),
Vector(394,886,543),
],
[
Vector(729,789,-842),
Vector(-819,-334,502),
Vector(-741,-438,568),
Vector(399,-785,-551),
Vector(682,756,-676),
Vector(753,706,-666),
Vector(-9,-118,-9),
Vector(318,-711,-658),
Vector(-857,-784,-531),
Vector(439,-644,-605),
Vector(-891,-827,-750),
Vector(479,467,552),
Vector(659,-682,340),
Vector(-106,61,-102),
Vector(-681,548,823),
Vector(-664,604,849),
Vector(-860,-785,-555),
Vector(-613,351,-759),
Vector(-677,411,-908),
Vector(550,-780,387),
Vector(-728,431,-696),
Vector(-844,-469,484),
Vector(437,638,591),
Vector(-693,572,807),
Vector(491,488,586),
Vector(669,-789,409),
],
[
Vector(-418,-800,568),
Vector(690,-779,507),
Vector(441,-370,-505),
Vector(-573,-900,575),
Vector(-327,-603,-487),
Vector(552,-453,-472),
Vector(863,-801,517),
Vector(-436,328,515),
Vector(420,808,-712),
Vector(731,415,512),
Vector(-524,-718,522),
Vector(491,824,-603),
Vector(-18,24,64),
Vector(109,-51,-38),
Vector(-303,-536,-502),
Vector(-677,620,-677),
Vector(-482,397,567),
Vector(537,800,-622),
Vector(-442,332,630),
Vector(706,449,397),
Vector(484,-411,-606),
Vector(672,-894,518),
Vector(-576,655,-745),
Vector(871,432,448),
Vector(-517,524,-688),
Vector(-258,-444,-547),
],
[
Vector(-674,750,495),
Vector(-412,-547,817),
Vector(610,-432,859),
Vector(-410,-437,-273),
Vector(648,612,-461),
Vector(-691,786,446),
Vector(738,446,520),
Vector(-464,-684,742),
Vector(637,554,-561),
Vector(-494,402,-503),
Vector(33,115,-7),
Vector(775,424,642),
Vector(-612,484,-492),
Vector(541,-269,-637),
Vector(-545,752,417),
Vector(720,-493,891),
Vector(-430,-571,-332),
Vector(487,-434,-601),
Vector(-31,4,175),
Vector(802,545,536),
Vector(654,-542,750),
Vector(-302,-461,-356),
Vector(516,-357,-523),
Vector(522,627,-453),
Vector(-459,-765,818),
Vector(-593,412,-547),
],
[
Vector(-62,159,-61),
Vector(396,-693,-479),
Vector(-641,729,543),
Vector(-709,-486,661),
Vector(-552,-810,-705),
Vector(-796,708,-772),
Vector(-656,620,468),
Vector(522,-264,566),
Vector(-653,609,676),
Vector(-662,-436,507),
Vector(360,-565,-518),
Vector(-774,808,-657),
Vector(7,-11,2),
Vector(419,-516,-543),
Vector(409,-300,420),
Vector(352,889,-418),
Vector(383,849,609),
Vector(341,867,-488),
Vector(406,888,-551),
Vector(-733,760,-705),
Vector(501,-319,516),
Vector(-741,-399,511),
Vector(404,870,387),
Vector(499,905,552),
Vector(-725,-728,-734),
Vector(-597,-770,-717),
],
[
Vector(-649,836,908),
Vector(463,700,656),
Vector(552,809,589),
Vector(524,739,-436),
Vector(758,-723,501),
Vector(528,-639,-338),
Vector(484,-540,-348),
Vector(-914,776,-711),
Vector(-716,790,773),
Vector(-942,-616,878),
Vector(4,117,4),
Vector(-627,-773,-678),
Vector(-917,764,-831),
Vector(376,757,614),
Vector(-810,864,802),
Vector(699,-703,635),
Vector(-646,-554,-686),
Vector(539,-521,-420),
Vector(579,871,-390),
Vector(675,-831,525),
Vector(-184,-41,64),
Vector(-950,617,-725),
Vector(-664,-681,-751),
Vector(-989,-740,816),
Vector(-913,-693,889),
Vector(610,802,-431),
],
[
Vector(-328,515,-481),
Vector(-417,574,-499),
Vector(-621,584,416),
Vector(-465,-344,-508),
Vector(595,590,900),
Vector(793,-530,-444),
Vector(-358,-340,-590),
Vector(-386,-522,745),
Vector(154,-26,152),
Vector(-358,-580,619),
Vector(705,529,868),
Vector(50,99,-7),
Vector(799,454,-514),
Vector(540,-327,651),
Vector(577,-349,529),
Vector(-755,704,388),
Vector(-427,471,-544),
Vector(661,639,759),
Vector(774,366,-628),
Vector(-490,-321,-533),
Vector(513,-448,545),
Vector(-677,701,483),
Vector(-398,-670,707),
Vector(667,-515,-452),
Vector(678,-457,-552),
Vector(828,531,-592),
],
[
Vector(-354,917,781),
Vector(-281,841,734),
Vector(639,-856,-861),
Vector(562,853,614),
Vector(600,-872,-861),
Vector(650,-340,634),
Vector(-669,-830,764),
Vector(615,792,515),
Vector(-514,-535,-659),
Vector(-645,-747,872),
Vector(566,-839,-856),
Vector(-581,-624,-768),
Vector(399,493,-762),
Vector(-262,577,-795),
Vector(535,464,-683),
Vector(391,829,533),
Vector(-535,-771,744),
Vector(-368,738,-823),
Vector(-397,644,-749),
Vector(74,32,12),
Vector(587,-316,723),
Vector(490,-359,569),
Vector(-292,870,657),
Vector(549,579,-709),
Vector(-556,-448,-716),
],
[
Vector(-854,-686,494),
Vector(471,874,648),
Vector(488,-734,-887),
Vector(764,427,-727),
Vector(-759,681,-745),
Vector(-725,-714,449),
Vector(-605,728,-695),
Vector(795,538,-591),
Vector(458,-463,533),
Vector(405,770,623),
Vector(387,-740,-928),
Vector(-843,-741,525),
Vector(477,-316,412),
Vector(-885,549,507),
Vector(-750,-482,-862),
Vector(822,462,-589),
Vector(-158,-21,43),
Vector(461,812,673),
Vector(-755,760,-782),
Vector(-166,125,-115),
Vector(448,-380,515),
Vector(-700,-503,-917),
Vector(-884,648,444),
Vector(-824,602,404),
Vector(-846,-390,-881),
Vector(314,-693,-917),
],
[
Vector(-886,423,811),
Vector(785,453,423),
Vector(-396,553,-508),
Vector(-81,38,127),
Vector(-415,618,-348),
Vector(-522,-528,979),
Vector(706,-897,440),
Vector(-479,-748,-503),
Vector(652,-801,-610),
Vector(-610,-708,-592),
Vector(603,-785,-419),
Vector(611,-707,-599),
Vector(693,-894,441),
Vector(861,406,496),
Vector(736,672,-473),
Vector(-636,-503,891),
Vector(-372,464,-445),
Vector(814,530,434),
Vector(-29,-119,-2),
Vector(-558,-474,814),
Vector(-803,315,787),
Vector(773,654,-249),
Vector(-566,-719,-420),
Vector(709,-852,407),
Vector(797,573,-420),
Vector(-827,443,677),
],
[
Vector(-729,-745,477),
Vector(-809,409,-655),
Vector(628,-585,534),
Vector(405,464,-835),
Vector(309,581,335),
Vector(-697,-756,-375),
Vector(-459,599,568),
Vector(-390,539,409),
Vector(-626,-825,-487),
Vector(-823,-783,491),
Vector(340,-640,-575),
Vector(-14,-66,28),
Vector(-435,584,501),
Vector(334,-554,-667),
Vector(420,614,418),
Vector(352,480,376),
Vector(-157,-24,-97),
Vector(560,-387,566),
Vector(254,-685,-720),
Vector(359,483,-859),
Vector(-649,398,-559),
Vector(-616,-862,-402),
Vector(547,-618,581),
Vector(-708,341,-690),
Vector(288,374,-843),
Vector(-751,-815,603),
],
[
Vector(409,289,-495),
Vector(-847,-575,496),
Vector(413,467,-563),
Vector(508,-736,-627),
Vector(-930,-464,529),
Vector(530,380,608),
Vector(-764,280,526),
Vector(628,-869,503),
Vector(-42,-169,-23),
Vector(650,-658,-548),
Vector(503,274,552),
Vector(624,-954,561),
Vector(-499,-886,-493),
Vector(-406,-695,-494),
Vector(-856,235,571),
Vector(560,-747,-638),
Vector(-400,550,-551),
Vector(-889,-507,630),
Vector(-500,395,-544),
Vector(-521,-713,-483),
Vector(-582,501,-498),
Vector(-697,304,511),
Vector(440,253,530),
Vector(-170,-6,-82),
Vector(378,387,-577),
Vector(649,-801,614),
],
[
Vector(367,-847,-431),
Vector(805,450,827),
Vector(-651,-490,-341),
Vector(574,-485,737),
Vector(86,-58,110),
Vector(706,386,811),
Vector(-461,301,-317),
Vector(-745,-441,-432),
Vector(419,347,-310),
Vector(827,413,705),
Vector(-667,-493,-503),
Vector(329,-832,-245),
Vector(466,513,-343),
Vector(-529,329,473),
Vector(-599,353,-300),
Vector(-438,-863,890),
Vector(-541,433,385),
Vector(-516,-876,959),
Vector(371,-838,-492),
Vector(-673,-834,862),
Vector(632,-513,611),
Vector(-573,307,-497),
Vector(484,-525,649),
Vector(395,523,-393),
Vector(-513,468,378),
],
[
Vector(-568,386,784),
Vector(20,-72,121),
Vector(-121,24,13),
Vector(544,777,598),
Vector(-450,-510,942),
Vector(778,-914,-767),
Vector(830,-551,427),
Vector(-470,476,807),
Vector(-501,832,-460),
Vector(-378,-456,860),
Vector(358,756,528),
Vector(-717,-908,-600),
Vector(552,-860,-755),
Vector(790,-530,473),
Vector(-589,-465,830),
Vector(579,-909,-804),
Vector(-484,781,-295),
Vector(750,-556,440),
Vector(434,835,522),
Vector(-576,-802,-608),
Vector(727,722,-476),
Vector(-565,491,815),
Vector(-467,717,-435),
Vector(749,712,-303),
Vector(842,711,-494),
Vector(-695,-918,-609),
],
[
Vector(417,-415,713),
Vector(-449,647,870),
Vector(27,91,28),
Vector(402,-451,-539),
Vector(476,382,916),
Vector(-393,704,754),
Vector(548,-455,624),
Vector(-428,869,849),
Vector(857,539,-539),
Vector(-777,-601,-329),
Vector(-126,-2,126),
Vector(-665,-378,797),
Vector(827,434,-697),
Vector(-541,876,-635),
Vector(319,-462,-354),
Vector(504,-444,796),
Vector(-462,887,-670),
Vector(-714,-362,606),
Vector(-673,-456,617),
Vector(460,454,788),
Vector(488,413,930),
Vector(-888,-669,-268),
Vector(842,448,-606),
Vector(-852,-520,-276),
Vector(400,-532,-343),
Vector(-583,781,-617),
],
[
Vector(397,-399,-587),
Vector(-692,640,606),
Vector(-549,-426,-591),
Vector(517,-468,-682),
Vector(503,792,687),
Vector(-665,724,474),
Vector(683,415,-508),
Vector(469,573,730),
Vector(-665,-505,-567),
Vector(-470,730,-541),
Vector(632,627,-528),
Vector(747,564,-448),
Vector(466,-420,-536),
Vector(72,63,-118),
Vector(935,-637,679),
Vector(-375,-466,480),
Vector(-385,-494,361),
Vector(931,-631,564),
Vector(866,-591,627),
Vector(500,768,688),
Vector(-305,727,-516),
Vector(-647,841,608),
Vector(-776,-459,-594),
Vector(-413,713,-575),
Vector(-379,-503,254),
],
[
Vector(-626,-772,665),
Vector(-298,775,-361),
Vector(795,558,497),
Vector(-650,-716,745),
Vector(470,819,-606),
Vector(-465,-720,-367),
Vector(783,706,535),
Vector(476,861,-359),
Vector(426,-668,854),
Vector(16,67,24),
Vector(-559,670,547),
Vector(59,-95,-131),
Vector(754,-852,-774),
Vector(775,-921,-723),
Vector(560,-548,826),
Vector(-456,-698,-357),
Vector(823,616,623),
Vector(-452,696,550),
Vector(706,-801,-628),
Vector(-457,-579,-473),
Vector(-310,549,-415),
Vector(-441,686,552),
Vector(504,-665,759),
Vector(461,823,-545),
Vector(-755,-747,659),
Vector(-261,576,-366),
],
[
Vector(908,721,721),
Vector(86,-57,-97),
Vector(-713,-299,-592),
Vector(-758,-783,430),
Vector(-779,-597,500),
Vector(818,456,-829),
Vector(-623,521,428),
Vector(-837,-707,424),
Vector(907,-562,-902),
Vector(549,-311,329),
Vector(528,-351,375),
Vector(860,594,720),
Vector(-655,405,401),
Vector(-714,-392,-401),
Vector(829,529,-887),
Vector(912,-363,-865),
Vector(554,-391,342),
Vector(695,675,687),
Vector(-724,-414,-574),
Vector(-659,757,-629),
Vector(-69,-11,3),
Vector(-569,667,-540),
Vector(-586,448,388),
Vector(-580,615,-551),
Vector(907,480,-843),
Vector(858,-589,-853),
],
[
Vector(-779,-614,345),
Vector(695,317,397),
Vector(-753,576,801),
Vector(505,341,-394),
Vector(411,432,-345),
Vector(-667,-708,-706),
Vector(615,-385,529),
Vector(643,-378,564),
Vector(557,300,449),
Vector(-879,-666,355),
Vector(483,-862,-738),
Vector(-112,-148,91),
Vector(489,503,-397),
Vector(718,-890,-767),
Vector(-711,-622,-690),
Vector(-721,-601,-807),
Vector(-870,-758,402),
Vector(33,-26,-17),
Vector(-604,557,-459),
Vector(640,-959,-780),
Vector(-592,444,-618),
Vector(627,-473,425),
Vector(-758,670,920),
Vector(-605,562,-647),
Vector(583,497,403),
Vector(-870,560,878),
]
]