commit
444efd5878
@ -0,0 +1,3 @@
|
|||||||
|
input*
|
||||||
|
part1*
|
||||||
|
part2*
|
@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
DAYS= day1
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
day%/part2: day%
|
||||||
|
cd $< && $(MAKE)
|
||||||
|
|
||||||
|
all: $(addsuffix /part2,$(DAYS))
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
OPT_FLAGS?= -march=native -fgraphite -fopenmp -floop-parallelize-all -ftree-parallelize-loops=4 \
|
||||||
|
-floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block \
|
||||||
|
-fno-stack-check -fno-strict-aliasing
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: part1 part2
|
||||||
|
|
||||||
|
.PHONY: big
|
||||||
|
big: part1-big part2-big
|
||||||
|
|
||||||
|
input.h: input
|
||||||
|
@rm -f $@
|
||||||
|
while read line; do \
|
||||||
|
echo "$$line," >> $@; \
|
||||||
|
done < $<
|
||||||
|
|
||||||
|
input-big.h: input-big
|
||||||
|
@rm -f $@
|
||||||
|
while read line; do \
|
||||||
|
echo "$${line}ul," >> $@; \
|
||||||
|
done < $<
|
||||||
|
|
||||||
|
|
||||||
|
part1: input.h
|
||||||
|
gcc day1.c -O3 -flto $(OPT_FLAGS) -o $@ -O3 -flto
|
||||||
|
strip $@
|
||||||
|
|
||||||
|
part2: input.h
|
||||||
|
gcc day1.c -DPART2 -O3 -flto $(OPT_FLAGS) -o $@ -O3 -flto
|
||||||
|
strip $@
|
||||||
|
|
||||||
|
part1-big: input-big.h
|
||||||
|
gcc day1.c -DBIG -O3 -flto $(OPT_FLAGS) -o $@ -O3 -flto
|
||||||
|
strip $@
|
||||||
|
|
||||||
|
part2-big: input-big.h
|
||||||
|
gcc day1.c -DBIG -DPART2 -O3 -flto $(OPT_FLAGS) -o $@ -O3 -flto
|
||||||
|
strip $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f part{1,2}
|
||||||
|
rm -f input.h
|
@ -0,0 +1,40 @@
|
|||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
typedef unsigned long u64;
|
||||||
|
|
||||||
|
#ifdef BIG
|
||||||
|
#define TARGET 99920044
|
||||||
|
#else
|
||||||
|
#define TARGET 2020
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const u64 input[] = {
|
||||||
|
#ifdef BIG
|
||||||
|
#include "input-big.h"
|
||||||
|
#else
|
||||||
|
#include "input.h"
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
const size_t input_sz = sizeof(input)/sizeof(u64);
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
for(register u64 i=0;i<input_sz;i++)
|
||||||
|
for(register u64 j=i;j<input_sz;j++)
|
||||||
|
#ifdef PART2
|
||||||
|
for(register u64 k=j;k<input_sz;k++)
|
||||||
|
if(input[i] + input[j] + input[k] == TARGET)
|
||||||
|
{
|
||||||
|
printf("%lu\n", input[i] * input[j] * input[k]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (input[i] + input[j] == TARGET)
|
||||||
|
{
|
||||||
|
printf("%lu\n", input[i] * input[j]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Reference in new issue