From 1524457a5b2666d6211557645dd056c2d1585a6e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Wed, 6 Dec 2023 10:04:07 +0100 Subject: [PATCH] Add solution to first part of day 6. --- 6/6.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 6/6.c diff --git a/6/6.c b/6/6.c new file mode 100644 index 0000000..e626761 --- /dev/null +++ b/6/6.c @@ -0,0 +1,77 @@ + +#include +#include +#include +#include +#include "libft.h" + +int special_is_whole(int time, int record) +{ + int n; + + n = 1; + while (n <= time / 2) + { + if (record == n * (time - n)) + return (1); + ++n; + } + return (0); +} + +int ways_of_winning(int time, int record) +{ + double special; + int correction; + + correction = 0; + special = sqrt(time * time / 4. - record); + if (isnan(special)) + return (0); + if (special_is_whole(time, record)) + { + if (special < 1) + return (0); + correction = 2; + } + if (time % 2 == 0) + return (2 * floor(special) + 1 - correction); + if (fmod(special, 1.) < 0.5) + return (2 * floor(special) - correction); + return (2 * floor(special) + 2 - correction); +} + +int main(int argc, char **argv) +{ + int fd; + int result; + char *times; + char *records; + size_t t; + size_t r; + + fd = open(argv[1], O_RDONLY); + times = get_next_line(fd); + records = get_next_line(fd); + t = 0; + r = 0; + result = 1; + while (times[t] != '\n' && records[r] != '\n') + { + while (!ft_isdigit(times[t])) + ++t; + while (!ft_isdigit(records[r])) + ++r; + result *= ways_of_winning(ft_atoi(times + t), ft_atoi(records + r)); + while (ft_isdigit(times[t])) + ++t; + while (ft_isdigit(records[r])) + ++r; + } + ft_printf("The resulting product is %i.\n", result); + get_next_line(fd); + close(fd); + free(times); + free(records); + return (0); +} -- 2.30.2