···
# File.read!("day19.txt")
12
-
File.read!("day19.txt")
12
+
File.read!("2021/day19.txt")
|> Enum.map(fn scanner ->
···
37
+
To find rotation of point $b_1$ and $b_2$ around shift point $b_0$
40
-
b_{x_1} r_x + b_{x_0} = a_{x_1} \\
41
-
b_{x_2} r_x + b_{x_0} = a_{x_2}
42
+
{b_1}_x r_x + {b_0}_x = {a_1}_x \\
43
+
{b_2}_x r_x + {b_0}_x = {a_2}_x
46
-
b_{y_1} r_y + b_{y_0} = a_{y_1} \\
47
-
b_{y_2} r_y + b_{y_0} = a_{y_2} \\
48
+
{b_1}_y r_y + {b_0}_y = {a_1}_y \\
49
+
{b_2}_y r_y + {b_0}_y = {a_2}_y \\
52
-
b_{z_1} r_z + b_{z_0} = a_{z_1} \\
53
-
b_{z_2} r_z + b_{z_0} = a_{z_2} \\
54
+
{b_1}_z r_z + {b_0}_z = {a_1}_z \\
55
+
{b_2}_z r_z + {b_0}_z = {a_2}_z \\
···
This mean that we need to solve:
62
-
B_x x + b_0 = a_x \\
63
-
B_y y + b_0 = a_y \\
64
+
B_x r_x + b_0 = a_x \\
65
+
B_y r_y + b_0 = a_y \\
···
76
+
b_0 = \begin{bmatrix}
···
By applying [Cramer's Rule](https://en.wikipedia.org/wiki/Cramer%27s_rule) we can solve these
85
-
linear equations with:
87
+
linear equations with (we are looking for $b_0$ and $r$):
98
-
} = \frac{{b_1}_d - {b_2}_d}{{a_1}_d - {a_2}_d} \\
100
+
} = \frac{{a_1}_d - {a_2}_d}{{b_1}_d - {b_2}_d} \\
101
-
{a_1}_d & {b_1}_d \\
103
+
{b_1}_d & {a_1}_d \\
109
-
} = \frac{{a_1}_d {b_2}_d - {b_1}_d {a_2}_d}{{a_1}_d - {a_2}_d}
111
+
} = \frac{{b_1}_d {a_2}_d - {a_1}_d {b_2}_d}{{b_1}_d - {b_2}_d}
···
b_2 = reaxe(select_common(p0, p2), axes)
136
-
for i <- ~w[x y z]a, into: %{} do
138
+
for d <- ~w[x y z]a, into: %{} do
r = div(a_1 - a_2, det_b)
b_0 = div(b_1 * a_2 - a_1 * b_2, det_b)
···
<!-- livebook:{"output":true} -->
213
-
{:module, Day19, <<70, 79, 82, 49, 0, 0, 26, ...>>, {:pairs, 1}}
215
+
{:module, Day19, <<70, 79, 82, 49, 0, 0, 29, ...>>, {:pairs, 1}}
···
<!-- livebook:{"output":true} -->
<!-- livebook:{"output":true} -->