this repo has no description

fix: math

Changed files
+42 -40
2021
+42 -40
2021/day19.livemd
··· 9 9 ```elixir 10 10 # File.read!("day19.txt") 11 11 input = 12 - File.read!("day19.txt") 12 + File.read!("2021/day19.txt") 13 13 |> String.split("\n\n") 14 14 |> Enum.map(fn scanner -> 15 15 scanner ··· 34 34 34 35 35 ``` 36 36 37 + To find rotation of point $b_1$ and $b_2$ around shift point $b_0$ 38 + 37 39 $$ 38 40 \left\{ 39 41 \begin{alignat*}{3} 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 42 44 \end{alignat*} 43 45 \right. 44 46 \left\{ 45 47 \begin{alignat*}{3} 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 \\ 48 50 \end{alignat*} 49 51 \right. 50 52 \left\{ 51 53 \begin{alignat*}{3} 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 \\ 54 56 \end{alignat*} 55 57 \right. 56 58 $$ ··· 59 61 This mean that we need to solve: 60 62 61 63 $$ 62 - B_x x + b_0 = a_x \\ 63 - B_y y + b_0 = a_y \\ 64 - B_z z + b_0 = a_z 64 + B_x r_x + b_0 = a_x \\ 65 + B_y r_y + b_0 = a_y \\ 66 + B_z r_z + b_0 = a_z 65 67 $$ 66 68 67 69 Where: ··· 71 73 {b_1}_d & 1 \\ 72 74 {b_2}_d & 1 \\ 73 75 \end{bmatrix} 74 - d = \begin{bmatrix} 75 - r_d \\ 76 - b_{d_0} 76 + b_0 = \begin{bmatrix} 77 + {b_0}_d \\ 78 + {b_0}_d 77 79 \end{bmatrix} 78 80 a_d = \begin{bmatrix} 79 81 {a_1}_d \\ ··· 82 84 $$ 83 85 84 86 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$): 86 88 87 89 $$ 88 - e_d = \frac{ 90 + r_d = \frac{ 89 91 \begin{vmatrix} 90 - {b_1}_d & 1 \\ 91 - {b_2}_d & 1 92 + {a_1}_d & 1 \\ 93 + {a_2}_d & 1 92 94 \end{vmatrix} 93 95 }{ 94 96 \begin{vmatrix} 95 - {a_1}_d & 1 \\ 96 - {a_2}_d & 1 97 + {b_1}_d & 1 \\ 98 + {b_2}_d & 1 97 99 \end{vmatrix} 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} \\ 99 101 b_{d_0} = \frac{ 100 102 \begin{vmatrix} 101 - {a_1}_d & {b_1}_d \\ 102 - {a_2}_d & {b_2}_d 103 + {b_1}_d & {a_1}_d \\ 104 + {b_2}_d & {a_2}_d 103 105 \end{vmatrix} 104 106 }{ 105 107 \begin{vmatrix} 106 - {a_1}_d & 1 \\ 107 - {a_2}_d & 1 108 + {b_1}_d & 1 \\ 109 + {b_2}_d & 1 108 110 \end{vmatrix} 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} 110 112 $$ 111 113 112 114 ```elixir ··· 133 135 b_2 = reaxe(select_common(p0, p2), axes) 134 136 135 137 transform = 136 - for i <- ~w[x y z]a, into: %{} do 137 - a_1 = a_1[i] 138 - a_2 = a_2[i] 139 - b_1 = b_1[i] 140 - b_2 = b_2[i] 138 + for d <- ~w[x y z]a, into: %{} do 139 + a_1 = a_1[d] 140 + a_2 = a_2[d] 141 + b_1 = b_1[d] 142 + b_2 = b_2[d] 141 143 det_b = b_1 - b_2 142 144 r = div(a_1 - a_2, det_b) 143 145 144 146 b_0 = div(b_1 * a_2 - a_1 * b_2, det_b) 145 147 146 - {i, {r, b_0}} 148 + {d, {r, b_0}} 147 149 end 148 150 149 151 new_points = ··· 210 212 <!-- livebook:{"output":true} --> 211 213 212 214 ``` 213 - {:module, Day19, <<70, 79, 82, 49, 0, 0, 26, ...>>, {:pairs, 1}} 215 + {:module, Day19, <<70, 79, 82, 49, 0, 0, 29, ...>>, {:pairs, 1}} 214 216 ``` 215 217 216 218 ```elixir ··· 282 284 <!-- livebook:{"output":true} --> 283 285 284 286 ``` 285 - 0.002822 287 + 0.005503 286 288 1: {5, 25} 287 - 0.017052 289 + 0.029354 288 290 2: {5, 20} 289 - 0.0355 291 + 0.067284 290 292 3: {7, 13} 291 - 0.134655 293 + 0.195126 292 294 4: {6, 7} 293 - 0.229952 295 + 0.292686 294 296 5: {5, 2} 295 - 0.288351 297 + 0.374403 296 298 6: {1, 1} 297 - 0.076665 299 + 0.074645 298 300 7: {1, 0} 299 - 0.071942 301 + 0.090199 300 302 ``` 301 303 302 304 <!-- livebook:{"output":true} -->