Restore aoc backup.
This commit is contained in:
62
2015/day04/answer01.c
Normal file
62
2015/day04/answer01.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <openssl/md5.h>
|
||||
|
||||
int main() {
|
||||
size_t PUZZLE_SIZE = 8; //puzzle input is 8 characters with no ending newline character
|
||||
|
||||
//load input string
|
||||
FILE *file = fopen("input", "r");
|
||||
if (file == NULL) {
|
||||
perror("main: error opening file.");
|
||||
return -1;
|
||||
}
|
||||
char input[256];
|
||||
while (fgets(input, sizeof(input), file));
|
||||
if (strlen(input) != PUZZLE_SIZE) {
|
||||
perror("main: error reading file.");
|
||||
return -1;
|
||||
}
|
||||
printf("puzzle input: %s\n", input);
|
||||
|
||||
//initialize MD5 context
|
||||
//note: ignore gcc's warnings that MD5 is depreciated
|
||||
MD5_CTX md5_context;
|
||||
uint8_t md5_hash[MD5_DIGEST_LENGTH];
|
||||
char md5_string[MD5_DIGEST_LENGTH * 2 + 1]; //32 hexadecimal digits
|
||||
//each byte needs two characters in hex, plus one for '\0'
|
||||
char *md5_string_ptr = md5_string;
|
||||
|
||||
int32_t chars_written;
|
||||
int32_t available_space;
|
||||
int32_t count = -1; //initialize count at -1 so that the first count++ sets it to 0
|
||||
|
||||
while (strncmp(md5_string, "00000", 5) != 0) {
|
||||
count++;
|
||||
chars_written = snprintf(input + PUZZLE_SIZE, sizeof(input) - strlen(input), "%i", count);
|
||||
available_space = sizeof(input) - strlen(input);
|
||||
if (chars_written >= available_space) {
|
||||
perror("main: buffer overflow.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
//initialize MD5 context
|
||||
MD5_Init(&md5_context);
|
||||
|
||||
//update context with input (+ count) data
|
||||
MD5_Update(&md5_context, input, strlen(input));
|
||||
|
||||
//finalize MD5 hash
|
||||
MD5_Final(md5_hash, &md5_context);
|
||||
|
||||
for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
|
||||
md5_string_ptr += sprintf(md5_string_ptr, "%02x", md5_hash[i]);
|
||||
}
|
||||
md5_string_ptr = md5_string; //reset pointer
|
||||
}
|
||||
|
||||
printf("count %i: %s\n", count, md5_string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
62
2015/day04/answer02.c
Normal file
62
2015/day04/answer02.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <openssl/md5.h>
|
||||
|
||||
int main() {
|
||||
size_t PUZZLE_SIZE = 8; //puzzle input is 8 characters with no ending newline character
|
||||
|
||||
//load input string
|
||||
FILE *file = fopen("input", "r");
|
||||
if (file == NULL) {
|
||||
perror("main: error opening file.");
|
||||
return -1;
|
||||
}
|
||||
char input[256];
|
||||
while (fgets(input, sizeof(input), file));
|
||||
if (strlen(input) != PUZZLE_SIZE) {
|
||||
perror("main: error reading file.");
|
||||
return -1;
|
||||
}
|
||||
printf("puzzle input: %s\n", input);
|
||||
|
||||
//initialize MD5 context
|
||||
//note: ignore gcc's warnings that MD5 is depreciated
|
||||
MD5_CTX md5_context;
|
||||
uint8_t md5_hash[MD5_DIGEST_LENGTH];
|
||||
char md5_string[MD5_DIGEST_LENGTH * 2 + 1]; //32 hexadecimal digits
|
||||
//each byte needs two characters in hex, plus one for '\0'
|
||||
char *md5_string_ptr = md5_string;
|
||||
|
||||
int32_t chars_written;
|
||||
int32_t available_space;
|
||||
int32_t count = -1; //initialize count at -1 so that the first count++ sets it to 0
|
||||
|
||||
while (strncmp(md5_string, "000000", 6) != 0) {
|
||||
count++;
|
||||
chars_written = snprintf(input + PUZZLE_SIZE, sizeof(input) - strlen(input), "%i", count);
|
||||
available_space = sizeof(input) - strlen(input);
|
||||
if (chars_written >= available_space) {
|
||||
perror("main: buffer overflow.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
//initialize MD5 context
|
||||
MD5_Init(&md5_context);
|
||||
|
||||
//update context with input (+ count) data
|
||||
MD5_Update(&md5_context, input, strlen(input));
|
||||
|
||||
//finalize MD5 hash
|
||||
MD5_Final(md5_hash, &md5_context);
|
||||
|
||||
for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
|
||||
md5_string_ptr += sprintf(md5_string_ptr, "%02x", md5_hash[i]);
|
||||
}
|
||||
md5_string_ptr = md5_string; //reset pointer
|
||||
}
|
||||
|
||||
printf("count %i: %s\n", count, md5_string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
1
2015/day04/input
Normal file
1
2015/day04/input
Normal file
@@ -0,0 +1 @@
|
||||
ckczppom
|
||||
10
2015/day04/makefile
Normal file
10
2015/day04/makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
CC = gcc
|
||||
CFLAGS = -std=c99 -Wall -g
|
||||
LDFLAGS = -lcrypto
|
||||
|
||||
1: answer01.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) answer01.c -o answer01
|
||||
|
||||
2: answer02.c
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) answer02.c -o answer02
|
||||
|
||||
Reference in New Issue
user.block.title