What is Advent of Code?

Advent of Code is a yearly competition that takes place during the month of December as a build-up to Christmas. Similar to a conventional Advent Calendar, a new coding challenge is presented everyday that needs to be solved. Each coding challenge gets progressively harder as the date approaches closer to Christmas.

Approach for the 2022 year

A lot has changed in my skillset since the last time I attempted Advent of Code! I have since learned a lot about C and C++, as a means of understanding more about the underlying hardware of a computer. To further my knowledge of these programming languages and gain some experience with pointers and various algorithms, I tried to use these programming languages to the best of my ability.

GitHub

https://github.com/varunan-vara/AdventOfCode2022

Takeaways from Advent of Code 2022

  1. Using an IDE that is designed for the particular task at hand is very helpful, especially for specialized languages like C and C++. Although Visual Studio Code has served me well for Python and JavaScript development, I found that working with C in this IDE to be challenging, particularly in ensuring that header files were functional. In contrast, using Visual Studio was a significantly better experience.
  2. Pointers are significantly more important than my lectures had made it seem! My “Intro to Programming” course had spent about 2 months covering pointers, which I thought was too much at the time. However, after having to create several arrays, 2D matrices and structs, I now think that there was so much more to learn than the basic principles of pointers. This experience has definitely advanced my knowledge in pointers and arrays, particularly in C.
  3. I became a lot more comfortable using classes in C++, particularly with the odd syntax in constructors and methods. Although the syntax used for classes in C++ is not as intuitive as in TypeScript or Dart, understanding these concepts allowed for me to learn things like the Unreal Engine Framework and making apps that interface with hardware on a lower level.