(C) day 12 wip
This commit is contained in:
parent
f7d8d12b51
commit
39aa9ff79a
|
@ -0,0 +1,90 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define GENERATIONS 20
|
||||
#define INSIZE 150
|
||||
|
||||
typedef struct GrowingArray {
|
||||
char *content;
|
||||
int size;
|
||||
int used;
|
||||
int bufferLeft;
|
||||
int bufferRight;
|
||||
} Array;
|
||||
|
||||
Array initArray() {
|
||||
Array array;
|
||||
array.size = 10;
|
||||
array.used = 0;
|
||||
array.content = malloc(10);
|
||||
return array;
|
||||
}
|
||||
|
||||
/*
|
||||
void pushInto(Array array, char element) {
|
||||
if (array.size == array.used) {
|
||||
array.size *= 2;
|
||||
array.content = realloc(array.content, array.size);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
void appendTo(Array array, char element) {
|
||||
array.used++;
|
||||
array.content[array.used] = element;
|
||||
}
|
||||
|
||||
// Convert a growth rule (5 chars) to a single byte by creating a bitmask.
|
||||
// I. e. #..#. -> 10010
|
||||
char ruleToChar(char *input) {
|
||||
int currentStep = 0b10000000;
|
||||
int rule = 0;
|
||||
for (int i=0; i<5; i++) {
|
||||
if (input[i] == '#') {
|
||||
rule += currentStep;
|
||||
}
|
||||
currentStep >>= 1;
|
||||
}
|
||||
if (input[9] == '#') {
|
||||
rule |= 1;
|
||||
}
|
||||
return rule;
|
||||
}
|
||||
|
||||
int main() {
|
||||
FILE *inputFile = fopen("input", "r");
|
||||
|
||||
// + 1 for the null byte
|
||||
char *inString = malloc(INSIZE + 1);
|
||||
fgets(inString, INSIZE, inputFile);
|
||||
|
||||
char *rawInput = malloc(INSIZE + 1);
|
||||
scanf(inString, "initial state: %s", &rawInput);
|
||||
printf(rawInput);
|
||||
free(inString);
|
||||
|
||||
char *rawRule = malloc(12);
|
||||
// discard this as it’s just an empty line
|
||||
fgets(rawRule, 11, inputFile);
|
||||
|
||||
Array rules = initArray();
|
||||
while (fgets(rawRule, 11, inputFile)) {
|
||||
appendTo(rules, ruleToChar(rawRule));
|
||||
}
|
||||
|
||||
fclose(inputFile);
|
||||
|
||||
printf("%d, %c", rules.size, rules.content[0]);
|
||||
|
||||
// Theoretically, a plant up to 2 plants away from the current edge can grow.
|
||||
// As this can happen in either direction, we need to be prepared
|
||||
// for 4 steps of growth per generation.
|
||||
char *input = malloc(INSIZE + GENERATIONS * 4);
|
||||
|
||||
// Move the start pointer of the array where pot #0 is
|
||||
input += GENERATIONS * 2;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user