1
0
mirror of https://github.com/chylex/Advent-of-Code.git synced 2025-05-31 00:34:07 +02:00

Add 2015 - Day 1 - Part 1

This commit is contained in:
chylex 2021-11-30 04:29:04 +01:00
parent c79b3c60a1
commit e6f58c50d2
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
6 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="AOC_2015_1" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" WORKING_DIR="file://$PROJECT_DIR$/2015/01" PASS_PARENT_ENVS_2="true" PROJECT_NAME="AOC" TARGET_NAME="AOC_2015_1" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="AOC" RUN_TARGET_NAME="AOC_2015_1">
<method v="2">
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

9
2015/01/CMakeLists.txt Normal file
View File

@ -0,0 +1,9 @@
set(PROJECT_NAME AOC_2015_1)
project(${PROJECT_NAME} C ASM_NASM)
enable_language(ASM_NASM)
set(CMAKE_NASM_LINK_EXECUTABLE "ld <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
set(CAN_USE_ASSEMBLER TRUE)
add_executable(${PROJECT_NAME} main.asm main.c)

1
2015/01/input/1.txt Normal file

File diff suppressed because one or more lines are too long

44
2015/01/main.asm Normal file
View File

@ -0,0 +1,44 @@
bits 32
section .data
section .text
global _walkFloors
_walkFloors:
enter 0,0
push ebx
mov eax, [ ebp + 8 ] ; eax = currentFloor
mov edx, [ ebp + 12 ] ; edx = char* instructions
mov ecx, [ ebp + 16 ] ; ecx = size_t instructionCount
jcxz .end ; skip to end if there are no instructions
inc ecx ; increment instruction count by 1
; because loop instruction uses prefix decrement
.instructionLoop:
mov bl, [ edx ] ; bl = instructions[edx]
inc edx ; edx++
cmp bl, '(' ; left parenthesis...
je .moveUpFloor ; moves up a floor
cmp bl, ')' ; right parenthesis...
je .moveDownFloor ; moves down a floor
jmp .end ; unknown character skips to the end
.moveUpFloor:
inc eax
loop .instructionLoop
.moveDownFloor:
dec eax
loop .instructionLoop
.end:
pop ebx
leave
ret

33
2015/01/main.c Normal file
View File

@ -0,0 +1,33 @@
#include "stdio.h"
#define BUFFER_SIZE 256
int walkFloors(int currentFloor, char* instructions, size_t instructionCount);
int main() {
FILE* file;
errno_t openErr = fopen_s(&file, "input/1.txt", "rb");
if (openErr != 0 || !file) {
printf("Error opening input file, code %d\n", openErr);
return 1;
}
int floor = 0;
char buffer[BUFFER_SIZE];
while (!feof(file)) {
size_t readBytes = fread_s(&buffer, BUFFER_SIZE, 1, BUFFER_SIZE, file);
int readErr = ferror(file);
if (readErr) {
printf("Error reading input file, code %d\n", readErr);
return 1;
}
floor = walkFloors(floor, buffer, readBytes);
}
fclose(file);
printf("Final floor: %d", floor);
return 0;
}

5
CMakeLists.txt Normal file
View File

@ -0,0 +1,5 @@
cmake_minimum_required(VERSION 3.20)
project(AOC)
add_subdirectory(2015/01)