Move 2021 into folder
This commit is contained in:
parent
dbebb7acf3
commit
dff4b9cc14
84 changed files with 0 additions and 0 deletions
10
2021/day11/Makefile
Normal file
10
2021/day11/Makefile
Normal file
|
@ -0,0 +1,10 @@
|
|||
solution-part%: solution-part%.c
|
||||
gcc $< -o $@
|
||||
|
||||
test-%: solution-% example.txt
|
||||
$< example.txt
|
||||
|
||||
run-%: solution-% realinput.txt
|
||||
$< realinput.txt
|
||||
|
||||
.PHONY: $(patsubst %,run-%, 1 2) $(patsubst %,test-%, 1 2)
|
10
2021/day11/example.txt
Normal file
10
2021/day11/example.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
5483143223
|
||||
2745854711
|
||||
5264556173
|
||||
6141336146
|
||||
6357385478
|
||||
4167524645
|
||||
2176841721
|
||||
6882881134
|
||||
4846848554
|
||||
5283751526
|
10
2021/day11/realinput.txt
Normal file
10
2021/day11/realinput.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
5723573158
|
||||
3154748563
|
||||
4783514878
|
||||
3848142375
|
||||
3637724151
|
||||
8583172484
|
||||
7747444184
|
||||
1613367882
|
||||
6228614227
|
||||
4732225334
|
130
2021/day11/solution-part1.c
Normal file
130
2021/day11/solution-part1.c
Normal file
|
@ -0,0 +1,130 @@
|
|||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ANSI_COLOR_RED "\x1b[31m"
|
||||
#define ANSI_COLOR_YELLOW "\x1b[33m"
|
||||
#define ANSI_COLOR_RESET "\x1b[0m"
|
||||
|
||||
#define GRIDROWS 10
|
||||
#define GRIDCOLS 10
|
||||
|
||||
typedef struct Octopus {
|
||||
unsigned int energy;
|
||||
bool flashed;
|
||||
} Octopus;
|
||||
|
||||
unsigned int flashCount = 0;
|
||||
|
||||
void printGrid(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void flash(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row);
|
||||
void increaseBy1(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row);
|
||||
void increaseAllBy1(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void setToZero(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void step(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void resetFlashes(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
|
||||
void printGrid(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ ){
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ ){
|
||||
if ( grid[col][row].flashed ) printf(ANSI_COLOR_RED);
|
||||
printf("%i", grid[col][row].energy );
|
||||
if ( grid[col][row].flashed ) printf(ANSI_COLOR_RESET);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
void flash(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row){
|
||||
flashCount++;
|
||||
grid[col][row].flashed = true;
|
||||
|
||||
if ( col > 0 ){
|
||||
if ( row > 0 ) increaseBy1(grid, col-1, row-1);
|
||||
increaseBy1(grid, col-1, row);
|
||||
if ( row < GRIDROWS - 1 ) increaseBy1(grid, col-1, row+1);
|
||||
}
|
||||
|
||||
if ( row > 0 ) increaseBy1(grid, col, row-1);
|
||||
if ( row < GRIDROWS - 1 ) increaseBy1(grid, col, row+1);
|
||||
|
||||
if ( col < GRIDCOLS - 1 ){
|
||||
if ( row > 0 ) increaseBy1(grid, col+1, row-1);
|
||||
increaseBy1(grid, col+1, row);
|
||||
if ( row < GRIDROWS - 1 ) increaseBy1(grid, col+1, row+1);
|
||||
}
|
||||
}
|
||||
|
||||
void increaseBy1(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row){
|
||||
grid[col][row].energy++;//Increase the enegry
|
||||
if ( grid[col][row].energy > 9 && !grid[col][row].flashed ){ // if it hasn't already flashed and is over 9 it should
|
||||
flash(grid, col, row);
|
||||
}
|
||||
}
|
||||
|
||||
void increaseAllBy1(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ ){
|
||||
increaseBy1( grid, col, row );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void setToZero(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ )
|
||||
if (grid[col][row].energy > 9) grid[col][row].energy = 0;
|
||||
|
||||
}
|
||||
|
||||
void resetFlashes(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ )
|
||||
grid[col][row].flashed = false;
|
||||
}
|
||||
|
||||
void step(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
increaseAllBy1(grid);
|
||||
|
||||
setToZero(grid);
|
||||
printGrid(grid);
|
||||
resetFlashes(grid);
|
||||
}
|
||||
|
||||
int main( int argc, char *argv[] ){
|
||||
if( argc == 2 ) {
|
||||
|
||||
|
||||
FILE *fp=fopen(argv[1], "r");
|
||||
|
||||
Octopus octopuses[10][10]={0};
|
||||
char ch;
|
||||
unsigned int row = 0, col=0;
|
||||
while ( fscanf( fp, "%c",&ch ) && !feof(fp)){
|
||||
if ( ch == '\n' ){
|
||||
col=0;
|
||||
row++;
|
||||
} else {
|
||||
octopuses[col++][row].energy = atoi(&ch);
|
||||
}
|
||||
}
|
||||
|
||||
printGrid(octopuses);
|
||||
for ( unsigned int i = 0; i < 100; i++ ){
|
||||
printf("\n\n");
|
||||
step(octopuses);
|
||||
}
|
||||
|
||||
printf("\nThere were %i flashes\n", flashCount);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
} else {
|
||||
printf("You need to provide a file\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
140
2021/day11/solution-part2.c
Normal file
140
2021/day11/solution-part2.c
Normal file
|
@ -0,0 +1,140 @@
|
|||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define ANSI_COLOR_RED "\x1b[31m"
|
||||
#define ANSI_COLOR_YELLOW "\x1b[33m"
|
||||
#define ANSI_COLOR_RESET "\x1b[0m"
|
||||
|
||||
#define GRIDROWS 10
|
||||
#define GRIDCOLS 10
|
||||
|
||||
typedef struct Octopus {
|
||||
unsigned int energy;
|
||||
bool flashed;
|
||||
} Octopus;
|
||||
|
||||
unsigned int flashCount = 0;
|
||||
|
||||
unsigned int countZeros(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void printGrid(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void flash(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row);
|
||||
void increaseBy1(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row);
|
||||
void increaseAllBy1(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void setToZero(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void step(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
void resetFlashes(Octopus grid[GRIDCOLS][GRIDROWS]);
|
||||
|
||||
unsigned int countZeros(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
unsigned int count = 0;
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ )
|
||||
if ( grid[col][row].energy == 0 ) count++;
|
||||
return count;
|
||||
}
|
||||
void printGrid(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ ){
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ ){
|
||||
if ( grid[col][row].flashed ) printf(ANSI_COLOR_RED);
|
||||
printf("%i", grid[col][row].energy );
|
||||
if ( grid[col][row].flashed ) printf(ANSI_COLOR_RESET);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
void flash(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row){
|
||||
flashCount++;
|
||||
grid[col][row].flashed = true;
|
||||
|
||||
if ( col > 0 ){
|
||||
if ( row > 0 ) increaseBy1(grid, col-1, row-1);
|
||||
increaseBy1(grid, col-1, row);
|
||||
if ( row < GRIDROWS - 1 ) increaseBy1(grid, col-1, row+1);
|
||||
}
|
||||
|
||||
if ( row > 0 ) increaseBy1(grid, col, row-1);
|
||||
if ( row < GRIDROWS - 1 ) increaseBy1(grid, col, row+1);
|
||||
|
||||
if ( col < GRIDCOLS - 1 ){
|
||||
if ( row > 0 ) increaseBy1(grid, col+1, row-1);
|
||||
increaseBy1(grid, col+1, row);
|
||||
if ( row < GRIDROWS - 1 ) increaseBy1(grid, col+1, row+1);
|
||||
}
|
||||
}
|
||||
|
||||
void increaseBy1(Octopus grid[GRIDCOLS][GRIDROWS], int col, int row){
|
||||
grid[col][row].energy++;//Increase the enegry
|
||||
if ( grid[col][row].energy > 9 && !grid[col][row].flashed ){ // if it hasn't already flashed and is over 9 it should
|
||||
flash(grid, col, row);
|
||||
}
|
||||
}
|
||||
|
||||
void increaseAllBy1(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ ){
|
||||
increaseBy1( grid, col, row );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void setToZero(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ )
|
||||
if (grid[col][row].energy > 9) grid[col][row].energy = 0;
|
||||
|
||||
}
|
||||
|
||||
void resetFlashes(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
for ( unsigned int row = 0; row < GRIDROWS; row++ )
|
||||
for ( unsigned int col = 0; col < GRIDCOLS; col++ )
|
||||
grid[col][row].flashed = false;
|
||||
}
|
||||
|
||||
void step(Octopus grid[GRIDCOLS][GRIDROWS]){
|
||||
increaseAllBy1(grid);
|
||||
|
||||
|
||||
setToZero(grid);
|
||||
printGrid(grid);
|
||||
resetFlashes(grid);
|
||||
}
|
||||
|
||||
int main( int argc, char *argv[] ){
|
||||
if( argc == 2 ) {
|
||||
|
||||
|
||||
FILE *fp=fopen(argv[1], "r");
|
||||
|
||||
Octopus octopuses[10][10]={0};
|
||||
char ch;
|
||||
unsigned int row = 0, col=0;
|
||||
while ( fscanf( fp, "%c",&ch ) && !feof(fp)){
|
||||
if ( ch == '\n' ){
|
||||
col=0;
|
||||
row++;
|
||||
} else {
|
||||
octopuses[col++][row].energy = atoi(&ch);
|
||||
}
|
||||
}
|
||||
|
||||
printGrid(octopuses);
|
||||
for ( unsigned int i = 0; countZeros(octopuses) != GRIDCOLS * GRIDROWS; i++ ){
|
||||
printf("\n\n");
|
||||
printf("Step %i\n",i+1);
|
||||
step(octopuses);
|
||||
}
|
||||
|
||||
printf("\nThere were %i flashes\n", flashCount);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
} else {
|
||||
printf("You need to provide a file\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue