Add solution to second part (bonus) of day 1
authorLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Sun, 3 Dec 2023 19:49:28 +0000 (20:49 +0100)
committerLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Wed, 6 Dec 2023 10:17:23 +0000 (11:17 +0100)
1/1b.c [new file with mode: 0644]

diff --git a/1/1b.c b/1/1b.c
new file mode 100644 (file)
index 0000000..21e134f
--- /dev/null
+++ b/1/1b.c
@@ -0,0 +1,74 @@
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include "libft.h"
+
+char   is_spelled_digit(char *str)
+{
+       const char *const       digits[] = {"one", "two", "three", "four", "five",
+                                                                       "six", "seven", "eight", "nine", NULL};
+       size_t                          i;
+
+       i = 0;
+       while (digits[i])
+       {
+               if (!ft_strncmp(str, digits[i], ft_strlen(digits[i])))
+               {
+                       return ('0' + i + 1);
+               }
+               ++i;
+       }
+       return (0);
+}
+
+int    line_value(char *line)
+{
+       char    two_digit[2];
+       size_t  i;
+
+       i = 0;
+       while (!ft_isdigit(line[i]) && !is_spelled_digit(line + i))
+               ++i;
+       if (ft_isdigit(line[i])) 
+               two_digit[0] = line[i];
+       else
+               two_digit[0] = is_spelled_digit(line + i);
+       while(line[i])
+               ++i;
+       while (!ft_isdigit(line[i]) && !is_spelled_digit(line + i))
+               --i;
+       if (ft_isdigit(line[i])) 
+               two_digit[1] = line[i];
+       else
+               two_digit[1] = is_spelled_digit(line + i);
+       return (ft_atoi(two_digit));
+}
+
+int    main(int argc, char **argv)
+{
+       char    *line;
+       int             fd;
+       int             result;
+
+       if (argc != 2)
+       {
+               return (1);
+       }
+       fd = open(argv[1], O_RDONLY);
+       if (fd < 0)
+       {
+               return (2);
+       }
+       result = 0;
+       line = get_next_line(fd);
+       while (line)
+       {
+               result += line_value(line);
+               free(line);
+               line = get_next_line(fd);
+       }
+       ft_printf("The calibration sum is %i.\n", result);
+       close(fd);
+       return (0);
+}