day 17: more code cleaning
This commit is contained in:
@@ -24,13 +24,6 @@
|
|||||||
#include "bits.h"
|
#include "bits.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
|
||||||
typedef struct vector {
|
|
||||||
s64 x, y;
|
|
||||||
} vector_t;
|
|
||||||
|
|
||||||
#define TMIN 0
|
|
||||||
#define TMAX 1
|
|
||||||
|
|
||||||
struct target {
|
struct target {
|
||||||
s64 x1, y1;
|
s64 x1, y1;
|
||||||
s64 x2, y2;
|
s64 x2, y2;
|
||||||
@@ -39,7 +32,6 @@ struct target {
|
|||||||
struct bounds {
|
struct bounds {
|
||||||
s64 dx_min, dx_max;
|
s64 dx_min, dx_max;
|
||||||
s64 dy_min, dy_max;
|
s64 dy_min, dy_max;
|
||||||
s64 steps_min;
|
|
||||||
} bounds;
|
} bounds;
|
||||||
|
|
||||||
inline static int hit(s64 x, s64 y)
|
inline static int hit(s64 x, s64 y)
|
||||||
@@ -57,28 +49,13 @@ static s64 nth(s64 x, s64 n)
|
|||||||
return ((2 * x) + -1 * (n - 1)) * n / 2;
|
return ((2 * x) + -1 * (n - 1)) * n / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* nth_x will stop after initial velocity steps
|
||||||
|
*/
|
||||||
static s64 nth_x(s64 x0, s64 n)
|
static s64 nth_x(s64 x0, s64 n)
|
||||||
{
|
{
|
||||||
return n >= x0? nth(x0, x0): nth(x0, n);
|
return n >= x0? nth(x0, x0): nth(x0, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* determine max possible initial dx :
|
|
||||||
* ( dx )(dx + 1) <= minx * 2
|
|
||||||
* <=> dx² + dx - minx * 2 <= 0
|
|
||||||
* solution is x = (-b ± sqrt(b² - 4 * a * c)) / 2 * b, with a = 1, b = 1, c = -2 * minx
|
|
||||||
* => (-1 ± sqrt(1 + 8 * minx)) / 2 <= 0
|
|
||||||
*/
|
|
||||||
static s64 dx_min(s64 xmin)
|
|
||||||
{
|
|
||||||
s64 res = (s64) ((-1) + sqrt((double)(1 + 8 * xmin))) / 2;
|
|
||||||
|
|
||||||
bounds.steps_min = 1;
|
|
||||||
bounds.dx_min = res;
|
|
||||||
|
|
||||||
//printf("xmin=%ld res=%ld nmin=%ld\n", xmin, res, nmin);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The highest solution is the solution of:
|
/* The highest solution is the solution of:
|
||||||
* y1 * (y1 +1) / 2
|
* y1 * (y1 +1) / 2
|
||||||
* (we can ignore x velocity, as we can reach any target x1 with x velocity
|
* (we can ignore x velocity, as we can reach any target x1 with x velocity
|
||||||
@@ -150,7 +127,14 @@ int main(int ac, char **av)
|
|||||||
|
|
||||||
read_input();
|
read_input();
|
||||||
|
|
||||||
dx_min(target.x1);
|
/* determine min possible initial dx :
|
||||||
|
* ( dx )(dx + 1) <= minx * 2
|
||||||
|
* <=> dx² + dx - minx * 2 <= 0
|
||||||
|
* solution is :
|
||||||
|
* x = (-b ± sqrt(b² - 4 * a * c)) / 2 * b, with a = 1, b = 1, c = -2 * minx
|
||||||
|
* => (-1 ± sqrt(1 + 8 * minx)) / 2 <= 0
|
||||||
|
*/
|
||||||
|
bounds.dx_min = (s64) ((-1) + sqrt((double)(1 + 8 * target.x1))) / 2;
|
||||||
bounds.dx_max = target.x2;
|
bounds.dx_max = target.x2;
|
||||||
bounds.dy_min = target.y1;
|
bounds.dy_min = target.y1;
|
||||||
bounds.dy_max = -target.y1;
|
bounds.dy_max = -target.y1;
|
||||||
|
Reference in New Issue
Block a user