diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..14d6049
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+AdventOfCode2025
\ No newline at end of file
diff --git a/.idea/editor.xml b/.idea/editor.xml
index 198c798..ead1d8a 100644
--- a/.idea/editor.xml
+++ b/.idea/editor.xml
@@ -244,102 +244,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 305cd2e..c28774b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,4 +33,8 @@ add_executable(d1p1 src/day1/p1.cpp)
add_executable(d1p1-faf src/day1/p1-faf.cpp)
# P2
add_executable(d1p2 src/day1/p2.cpp)
-add_executable(d1p2-faf src/day1/p2-faf.cpp)
\ No newline at end of file
+add_executable(d1p2-faf src/day1/p2-faf.cpp)
+
+### Day 2
+# P1
+add_executable(d2p1 src/day2/p1.cpp)
\ No newline at end of file
diff --git a/input/day2/p1-test.txt b/input/day2/p1-test.txt
new file mode 100644
index 0000000..b3dc7c4
--- /dev/null
+++ b/input/day2/p1-test.txt
@@ -0,0 +1,3 @@
+11-22,95-115,998-1012,1188511880-1188511890,222220-222224,
+1698522-1698528,446443-446449,38593856-38593862,565653-565659,
+824824821-824824827,2121212118-2121212124
\ No newline at end of file
diff --git a/input/day2/p1.txt b/input/day2/p1.txt
new file mode 100644
index 0000000..3dee06f
--- /dev/null
+++ b/input/day2/p1.txt
@@ -0,0 +1 @@
+9226466333-9226692707,55432-96230,4151-6365,686836-836582,519296-634281,355894-471980,971626-1037744,25107-44804,15139904-15163735,155452-255998,2093-4136,829776608-829880425,4444385616-4444502989,2208288-2231858,261-399,66-119,91876508-91956018,2828255673-2828317078,312330-341840,6464-10967,5489467-5621638,1-18,426-834,3434321102-3434378477,4865070-4972019,54475091-54592515,147-257,48664376-48836792,45-61,1183-1877,24-43
diff --git a/src/day2/p1.cpp b/src/day2/p1.cpp
new file mode 100644
index 0000000..a2af041
--- /dev/null
+++ b/src/day2/p1.cpp
@@ -0,0 +1,93 @@
+//
+// --- Day 2: Gift Shop ---
+//
+// You get inside and take the elevator to its only other stop: the gift shop.
+// "Thank you for visiting the North Pole!" gleefully exclaims a nearby sign.
+// You aren't sure who is even allowed to visit the North Pole, but you know you
+// can access the lobby through here, and from there you can access the rest of the North Pole base.
+//
+// As you make your way through the surprisingly extensive selection, one of
+// the clerks recognizes you and asks for your help.
+//
+// As it turns out, one of the younger Elves was playing on a gift shop computer
+// and managed to add a whole bunch of invalid product IDs to their gift shop database!
+// Surely, it would be no trouble for you to identify the invalid product IDs for them, right?
+//
+// They've even checked most of the product ID ranges already; they only have
+// a few product ID ranges (your puzzle input) that you'll need to check. For example:
+//
+// 11-22,95-115,998-1012,1188511880-1188511890,222220-222224,
+// 1698522-1698528,446443-446449,38593856-38593862,565653-565659,
+// 824824821-824824827,2121212118-2121212124
+//
+// (The ID ranges are wrapped here for legibility; in your input, they
+// appear on a single long line.)
+//
+// The ranges are separated by commas (,); each range gives its
+// first ID and last ID separated by a dash (-).
+//
+// Since the young Elf was just doing silly patterns, you can find the invalid IDs
+// by looking for any ID which is made only of some sequence of digits repeated twice.
+// So, 55 (5 twice), 6464 (64 twice), and 123123 (123 twice) would all be invalid IDs.
+//
+// None of the numbers have leading zeroes; 0101 isn't an ID at all. (101 is a
+// valid ID that you would ignore.)
+//
+// Your job is to find all of the invalid IDs that appear in the given ranges.
+// In the above example:
+//
+// 11-22 has two invalid IDs, 11 and 22.
+// 95-115 has one invalid ID, 99.
+// 998-1012 has one invalid ID, 1010.
+// 1188511880-1188511890 has one invalid ID, 1188511885.
+// 222220-222224 has one invalid ID, 222222.
+// 1698522-1698528 contains no invalid IDs.
+// 446443-446449 has one invalid ID, 446446.
+// 38593856-38593862 has one invalid ID, 38593859.
+// The rest of the ranges contain no invalid IDs.
+//
+// Adding up all the invalid IDs in this example produces 1227775554.
+//
+// What do you get if you add up all of the invalid IDs?
+
+#include
+#include
+
+#include "timer.h"
+
+std::tuple, std::streampos> read_input(std::string filename) {
+ std::ifstream stream(filename, std::ios::binary | std::ios::ate);
+ const auto size = stream.tellg();
+ stream.seekg(0);
+ std::vector buffer(size);
+ stream.read(buffer.data(), size);
+ stream.close();
+ return {buffer, size};
+}
+
+std::vector solve(std::vector* input_data, std::streampos size) {
+ const char* ptr = input_data->data();
+ const char* end = ptr + size;
+
+ while (ptr < end) {
+ // Get range
+ std::vector range;
+ while (ptr < end) {
+
+ }
+ }
+
+}
+
+int main() {
+ Timer timer;
+
+ std::tuple, std::streampos> input_data = read_input("input/day2/p1.txt");
+ timer.add_point("File read");
+
+ std::vector ranges = solve(&std::get<0>(input_data), std::get<1>(input_data));
+ timer.add_point("Solve");
+
+ timer.stop();
+ timer.print();
+}
\ No newline at end of file