aoc-2020/jour4/main.c
2020-12-15 18:41:27 +01:00

111 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include "utils.h"
void deux_partie(FILE *ptr)
{
int find = 0, tmp;
int nb_data = 0; // est incrémenté si arg bon
// ne pas changer lordre des deux tableaux sinon ça casse (jsp pk)
char value[10];
char key[3];
char *tmp_char = NULL;
fscanf(ptr, "%s:%s", key, value);
while (!feof(ptr))
{
if (!strncmp(key, "byr", 3))
{
tmp = sub_digit(value);
if (tmp >= 1920 && tmp <= 2002)
nb_data++;
}
else if (!strncmp(key, "iyr", 3))
{
tmp = sub_digit(value);
if (tmp >= 2010 && tmp <= 2020)
nb_data++;
}
else if (!strncmp(key, "eyr", 3))
{
tmp = sub_digit(value);
if (tmp >= 2020 && tmp <= 2030)
nb_data++;
}
else if (!strncmp(key, "hgt", 3))
{
int checkH = sub_digit(value);
if (strstr(value, "cm") != NULL && checkH >= 150 && checkH <= 193)
nb_data++;
else if (strstr(value, "in") != NULL && checkH >= 59 && checkH <= 76)
nb_data++;
}
else if (!strncmp(key, "ecl", 3))
{
if (check_ecl(value))
nb_data++;
}
else if (!strncmp(key, "pid", 3))
{
tmp_char = strpbrk(value, "0123456789");
if (strspn(tmp_char, "0123456789") == 9)
nb_data++;
}
else if (!strncmp(key, "hcl", 3))
{
//comme le 1er char est :, on doit tout décaler de 1
if (value[1] == '#' && strlen(value) == 8)
{
int i = 2;
while (isalnum(value[i]) && value[i] != '\0')
i++;
if (i == (int) strlen(value))
nb_data++;
}
}
if (check_void_line(ptr))
{
if (nb_data == 7)
find++;
nb_data = 0;
}
fscanf(ptr, "%s:%s", key, value);
}
printf("%d bons passeports trouvés.\n", find);
}
void prem_partie(FILE *ptr)
{
int find = 0;
int nb_data = 0, cid = 0;
char word[256];
fscanf(ptr, "%s", word);
while (!feof(ptr))
{
nb_data++;
if (!strncmp(word, "cid", 3))
cid = 1;
if (check_void_line(ptr))
{
if ((nb_data == 7 && !cid) || nb_data == 8)
find++;
nb_data = 0;
cid = 0;
}
fscanf(ptr, "%s", word);
}
printf("%d bons passeports trouvés.\n", find);
}