finish 10, part2 is only one line
This commit is contained in:
parent
a14d1dd8c0
commit
e07a4f6f93
41
10/Makefile
Executable file
41
10/Makefile
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
CC := gcc
|
||||||
|
LD := $(CC)
|
||||||
|
LIBS := -lm
|
||||||
|
LDFLAGS :=
|
||||||
|
CFLAGS := -Wall -Wextra -Wno-override-init -std=c2x -include_.h
|
||||||
|
SRC := part1.c mylib.c
|
||||||
|
ifeq ($(PART),2)
|
||||||
|
SRC := part2.c mylib.c
|
||||||
|
endif
|
||||||
|
OBJ_DIR := build
|
||||||
|
OBJ := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRC)))
|
||||||
|
DIR := .
|
||||||
|
RAW_NAME:= a.out
|
||||||
|
NAME := $(RAW_NAME)
|
||||||
|
|
||||||
|
ifeq ($(RELEASE),1)
|
||||||
|
CFLAGS += -O3
|
||||||
|
LDFLAGS += -O3 -s
|
||||||
|
else
|
||||||
|
CFLAGS += -O0 -g3
|
||||||
|
LDFLAGS += -O0 -g
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(NAME)
|
||||||
|
|
||||||
|
$(NAME): $(OBJ)
|
||||||
|
$(LD) $(LDFLAGS) -o $(DIR)/$(NAME) $(OBJ) $(LIBS)
|
||||||
|
|
||||||
|
$(OBJ_DIR)/%.o: %.c
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -rf $(OBJ_DIR)
|
||||||
|
@rm -rf $(RAW_NAME)
|
||||||
|
|
||||||
|
re:
|
||||||
|
@make --no-print clean
|
||||||
|
@make --no-print all
|
||||||
|
|
||||||
|
.PHONY: all clean re
|
29
10/_.h
Normal file
29
10/_.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <wctype.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
|
||||||
|
#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
|
||||||
|
#define ABS(X) ((X) >= 0 ? (X) : -(X))
|
||||||
|
|
||||||
|
char** str_split(char* a_str, const char a_delim);
|
||||||
|
|
||||||
|
int str_index(char *str, char c);
|
||||||
|
|
||||||
|
int number_of_element(char *str, char c);
|
||||||
|
|
||||||
|
long gmc(long a, long b);
|
||||||
|
long lmc(long a, long b);
|
||||||
|
long lmcs(int array[], int n);
|
||||||
|
|
||||||
|
long strslen(char **strs);
|
||||||
|
|
||||||
|
char **strsdup(char **strs);
|
57
10/main.txt
Normal file
57
10/main.txt
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
789865630100349810122456760105654587789823498301678705410
|
||||||
|
876696543231256721201309801238765496876012387432549812323
|
||||||
|
905787654340875430332219872389852345965430456541232101454
|
||||||
|
014765449850961045443818765456721231050121243210345696569
|
||||||
|
123814310761252036756903456765890102341567654400446787478
|
||||||
|
239901223450343129847812309857701213210478912321239870112
|
||||||
|
378210123411234980130123211098654312344327805410123721203
|
||||||
|
567411054100945673221045622567345403458910416569014874314
|
||||||
|
454302165257899854378132783451276234567234567878325965485
|
||||||
|
567214678346501765469221694340980129656105678963456875696
|
||||||
|
498543089655432356454330543298765498746569127632127704787
|
||||||
|
301672198790354567843894356132100384565478034543098013210
|
||||||
|
232987567581203210978765287045091223478328967656765123876
|
||||||
|
143823475676217891569987196786789310789110878947859874965
|
||||||
|
056710389564323765401076005499876501278012365432948765454
|
||||||
|
102345234410498654302105412386787432367873456721035439341
|
||||||
|
201276105321587663213234100345498101656921089810126928210
|
||||||
|
367888986987676565304566781234545432765430876712017817432
|
||||||
|
454993677896501476569645290123636721896321963103134506501
|
||||||
|
323034568765412389678730126788729800654403454214021676501
|
||||||
|
412126789892321018565021035499610914783212234565120989452
|
||||||
|
101215430701438989432106544321067323898302105456734012343
|
||||||
|
012107621890121876510127665233458734567676246789843109654
|
||||||
|
983498543701430701221678978102189676548985456799854328765
|
||||||
|
876501235612565652434507879213064581231234567878765016765
|
||||||
|
945432344013476543589410765015673290890103201967805679854
|
||||||
|
237651233023989610678321234324382106721090116789914789743
|
||||||
|
128940142104898720123451234543293445434589223654323876012
|
||||||
|
001230653415765431018960789632104345305679454986542945765
|
||||||
|
125021798596554104567875658734043216212368761077831034854
|
||||||
|
456189897687563245452106549025652207301454502560921003923
|
||||||
|
327234781076432236743089432110701108454563213461234212912
|
||||||
|
018985650165501149801676561229813239323645678678965307802
|
||||||
|
189176543234690032118745670107656545018732109569870456521
|
||||||
|
308012560125780145029634589018743896579887603432101567410
|
||||||
|
216543479876571236734556476129012987781094512321012198323
|
||||||
|
327612988967652987812347365437761016592323321434783084012
|
||||||
|
498909867658943887900198215678854123483415490549894563213
|
||||||
|
567678100147012096513278904589923567876506787658765454704
|
||||||
|
543563231230423123454562123238212450956543897601321067895
|
||||||
|
612154190321345278921043050120104321567872998512452367896
|
||||||
|
703013085430256567432234567431234982438901807403965456987
|
||||||
|
894102176321187456541107678432345670120156712394876435434
|
||||||
|
085013089434091076560128989841026761010205421085476528923
|
||||||
|
176324576543782185431032176721010859854312352376789117610
|
||||||
|
265434675345691298128745085432327998763456767465069006541
|
||||||
|
367645589210000341049876194309458709612567858564178123432
|
||||||
|
498596432100119657238789801218769612501678949653265678741
|
||||||
|
567487323765228798145698745657612523410987038734652169650
|
||||||
|
434321019874334567034561236764503412341879121025643050789
|
||||||
|
345010121089654321921650109853012501954348710110789841234
|
||||||
|
236789210128789110870743215432107607865219627896730932345
|
||||||
|
107898543279658012561894196501018216974008536105821801796
|
||||||
|
765467654789543653465445087454329345989123445234936767887
|
||||||
|
894321045601234743872346765585018211098512458965445216970
|
||||||
|
345470153456789812901349854396327602367401367872324105561
|
||||||
|
456789012109892101201256701287434501456513210121013234432
|
98
10/mylib.c
Normal file
98
10/mylib.c
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
// NOT MY CODE
|
||||||
|
// https://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c
|
||||||
|
char** str_split(char* str, const char a_delim)
|
||||||
|
{
|
||||||
|
char *a_str = strdup(str);
|
||||||
|
char** result = 0;
|
||||||
|
size_t count = 0;
|
||||||
|
char* tmp = a_str;
|
||||||
|
char* last_comma = 0;
|
||||||
|
char delim[2];
|
||||||
|
delim[0] = a_delim;
|
||||||
|
delim[1] = 0;
|
||||||
|
|
||||||
|
while (*tmp)
|
||||||
|
{
|
||||||
|
if (a_delim == *tmp)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
last_comma = tmp;
|
||||||
|
}
|
||||||
|
tmp++;
|
||||||
|
}
|
||||||
|
|
||||||
|
count += last_comma < (a_str + strlen(a_str) - 1);
|
||||||
|
|
||||||
|
count++;
|
||||||
|
|
||||||
|
result = malloc(sizeof(char*) * count);
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
size_t idx = 0;
|
||||||
|
char* token = strtok(a_str, delim);
|
||||||
|
|
||||||
|
while (token)
|
||||||
|
{
|
||||||
|
//assert(idx < count);
|
||||||
|
*(result + idx++) = strdup(token);
|
||||||
|
token = strtok(0, delim);
|
||||||
|
}
|
||||||
|
//assert(idx == count - 1);
|
||||||
|
*(result + idx) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(a_str);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int str_index(char *str, char c) {
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (str[i])
|
||||||
|
if (str[i++] == c)
|
||||||
|
return i;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int number_of_element(char *str, char c) {
|
||||||
|
int nbr = 0;
|
||||||
|
for (int i = 0; str[i] != '\0'; i++)
|
||||||
|
if (str[i] == c)
|
||||||
|
nbr++;
|
||||||
|
return nbr;
|
||||||
|
}
|
||||||
|
|
||||||
|
long gmc(long a, long b) {
|
||||||
|
if (b == 0)
|
||||||
|
return a;
|
||||||
|
return gmc(b, a % b);
|
||||||
|
}
|
||||||
|
|
||||||
|
long lmc(long a, long b) {
|
||||||
|
return (a / gmc(a, b)) * b;
|
||||||
|
}
|
||||||
|
|
||||||
|
long lmcs(int array[], int n) {
|
||||||
|
long result = array[0];
|
||||||
|
for (int i = 1; i < n; i++)
|
||||||
|
result = lmc(result, array[i]);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
long strslen(char **strs) {
|
||||||
|
long count = 0;
|
||||||
|
while (strs[count])
|
||||||
|
count++;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
char **strsdup(char **strs) {
|
||||||
|
char **new_strs = calloc(strslen(strs) + 1, sizeof(char*));
|
||||||
|
for (int i = 0; strs[i] != NULL; i++)
|
||||||
|
new_strs[i] = strdup(strs[i]);
|
||||||
|
return new_strs;
|
||||||
|
}
|
39
10/part1.c
Normal file
39
10/part1.c
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
int find_way(char **inputs, int y, int x, char before) {
|
||||||
|
if (inputs[y][x] == '9') {
|
||||||
|
inputs[y][x] = 'X';
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
if (inputs[y + 1] != NULL && inputs[y + 1][x] == before + 1)
|
||||||
|
count += find_way(inputs, y + 1, x, before + 1);
|
||||||
|
if (y > 0 && inputs[y - 1][x] == before + 1)
|
||||||
|
count += find_way(inputs, y - 1, x, before + 1);
|
||||||
|
if (x < (int)strlen(inputs[y]) && inputs[y][x + 1] == before + 1)
|
||||||
|
count += find_way(inputs, y, x + 1, before + 1);
|
||||||
|
if (x > 0 && inputs[y][x - 1] == before + 1)
|
||||||
|
count += find_way(inputs, y, x - 1, before + 1);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
char *input = argv[1];
|
||||||
|
char **inputs = str_split(strdup(input), '\n');
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++) {
|
||||||
|
for (int j = 0; inputs[i][j] != '\0'; j++) {
|
||||||
|
if (inputs[i][j] == '0')
|
||||||
|
count += find_way(strsdup(inputs), i, j, '0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("count: %d\n", count);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
37
10/part2.c
Normal file
37
10/part2.c
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#include "_.h"
|
||||||
|
|
||||||
|
int find_way(char **inputs, int y, int x, char before) {
|
||||||
|
if (inputs[y][x] == '9')
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
if (inputs[y + 1] != NULL && inputs[y + 1][x] == before + 1)
|
||||||
|
count += find_way(inputs, y + 1, x, before + 1);
|
||||||
|
if (y > 0 && inputs[y - 1][x] == before + 1)
|
||||||
|
count += find_way(inputs, y - 1, x, before + 1);
|
||||||
|
if (x < (int)strlen(inputs[y]) && inputs[y][x + 1] == before + 1)
|
||||||
|
count += find_way(inputs, y, x + 1, before + 1);
|
||||||
|
if (x > 0 && inputs[y][x - 1] == before + 1)
|
||||||
|
count += find_way(inputs, y, x - 1, before + 1);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
char *input = argv[1];
|
||||||
|
char **inputs = str_split(strdup(input), '\n');
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; inputs[i] != NULL; i++) {
|
||||||
|
for (int j = 0; inputs[i][j] != '\0'; j++) {
|
||||||
|
if (inputs[i][j] == '0')
|
||||||
|
count += find_way(strsdup(inputs), i, j, '0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("count: %d\n", count);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
8
10/test.txt
Normal file
8
10/test.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
89010123
|
||||||
|
78121874
|
||||||
|
87430965
|
||||||
|
96549874
|
||||||
|
45678903
|
||||||
|
32019012
|
||||||
|
01329801
|
||||||
|
10456732
|
7
10/test2.txt
Normal file
7
10/test2.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
10..9..
|
||||||
|
2...8..
|
||||||
|
3...7..
|
||||||
|
4567654
|
||||||
|
...8..3
|
||||||
|
...9..2
|
||||||
|
.....01
|
Loading…
Reference in a new issue