PB4 part1 done
This commit is contained in:
		
					parent
					
						
							
								273384c8e7
							
						
					
				
			
			
				commit
				
					
						927b7ee529
					
				
			
		
					 5 changed files with 117 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -50,7 +50,9 @@ add_subdirectory(pb_1)
 | 
			
		|||
 | 
			
		||||
add_subdirectory(pb_2)
 | 
			
		||||
 | 
			
		||||
set_target_properties(AdventOfCode2023 pb_1 pb_2 PROPERTIES
 | 
			
		||||
add_subdirectory(pb_4)
 | 
			
		||||
 | 
			
		||||
set_target_properties(AdventOfCode2023 pb_1 pb_2 pb_4 PROPERTIES
 | 
			
		||||
                      CXX_STANDARD 20
 | 
			
		||||
                      CXX_STANDARD_REQUIRED ON
 | 
			
		||||
                      CXX_EXTENSIONS OFF
 | 
			
		||||
| 
						 | 
				
			
			@ -64,4 +66,4 @@ set_target_properties(AdventOfCode2023 pb_1 pb_2 PROPERTIES
 | 
			
		|||
 | 
			
		||||
#target_link_options(AdventOfCode2023 PUBLIC ${LINKER_OPTIONS})
 | 
			
		||||
 | 
			
		||||
target_link_libraries(AdventOfCode2023 PUBLIC pb_1 pb_2 ${LINKER_FLAGS})
 | 
			
		||||
target_link_libraries(AdventOfCode2023 PUBLIC pb_1 pb_2 pb_4 ${LINKER_FLAGS})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								main.cpp
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								main.cpp
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include "pb_1/problem_1.hpp"
 | 
			
		||||
#include "pb_2/problem_2.hpp"
 | 
			
		||||
#include "pb_4/problem_4.hpp"
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -21,5 +22,12 @@ int main() {
 | 
			
		|||
            std::cout << "Problem 2 part 1: " << result << '\n';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        std::cout << "Begin Problem 4 part 1\n";
 | 
			
		||||
        if (const auto result = pb4::problem_part1("inputs/pb4.txt"); result != 0) {
 | 
			
		||||
            std::cout << "Problem 4 part 1: " << result << '\n';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return EXIT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								pb_4/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								pb_4/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
project(pb_4 CXX)
 | 
			
		||||
 | 
			
		||||
add_library(pb_4 STATIC problem_4.cpp problem_4.hpp)
 | 
			
		||||
 | 
			
		||||
target_compile_definitions(pb_4 PUBLIC $<$<AND:$<CONFIG:Debug>,$<STREQUAL:$<CXX_COMPILER_ID>,GNU>>:_GLIBCXX_DEBUG>)
 | 
			
		||||
 | 
			
		||||
target_compile_options(pb_4 PUBLIC ${COMPILE_FLAGS})
 | 
			
		||||
 | 
			
		||||
target_link_options(pb_4 PUBLIC ${LINKER_OPTIONS})
 | 
			
		||||
 | 
			
		||||
target_link_libraries(pb_4 ${LINKER_FLAGS} common)
 | 
			
		||||
							
								
								
									
										74
									
								
								pb_4/problem_4.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								pb_4/problem_4.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
//
 | 
			
		||||
// Created by postaron on 31/07/24.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "problem_4.hpp"
 | 
			
		||||
#include "../common/common_functions.hpp"
 | 
			
		||||
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <set>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <numeric>
 | 
			
		||||
 | 
			
		||||
std::vector<int> extract_unique_cards(const std::string &input) {
 | 
			
		||||
    std::set<int> unique_part;
 | 
			
		||||
 | 
			
		||||
    bool begin_num = false;
 | 
			
		||||
    std::string tmp_num;
 | 
			
		||||
    for (const auto &item: input) {
 | 
			
		||||
        if (!begin_num && item != ' ') {
 | 
			
		||||
            begin_num = true;
 | 
			
		||||
            tmp_num.push_back(item);
 | 
			
		||||
        } else if (begin_num && item == ' ') {
 | 
			
		||||
            begin_num = false;
 | 
			
		||||
            unique_part.insert(std::stoi(tmp_num));
 | 
			
		||||
            tmp_num.clear();
 | 
			
		||||
        } else if (begin_num) {
 | 
			
		||||
            tmp_num.push_back(item);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (!tmp_num.empty()) {
 | 
			
		||||
        unique_part.insert(std::stoi(tmp_num));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return { unique_part.cbegin(), unique_part.cend() };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::size_t pb4::problem_part1(const std::filesystem::path &problemFile) noexcept {
 | 
			
		||||
    auto file_opt = common::read_file(problemFile);
 | 
			
		||||
    if (!file_opt) {
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    std::ifstream &file = *file_opt;
 | 
			
		||||
    std::string line;
 | 
			
		||||
    std::vector<int> compute_points;
 | 
			
		||||
    while (std::getline(file, line)) {
 | 
			
		||||
        if (!line.empty()) {
 | 
			
		||||
            line = line.substr(line.find_first_of(':') + 1);
 | 
			
		||||
 | 
			
		||||
            const auto split_char = line.find_first_of('|');
 | 
			
		||||
            const auto left = line.substr(0, split_char);
 | 
			
		||||
            const auto right = line.substr(split_char + 1);
 | 
			
		||||
 | 
			
		||||
            const auto left_cards = extract_unique_cards(left);
 | 
			
		||||
            const auto right_cards = extract_unique_cards(right);
 | 
			
		||||
            std::vector<int> intersection;
 | 
			
		||||
            intersection.reserve(left.size() + right_cards.size());
 | 
			
		||||
            std::set_intersection(left_cards.cbegin(),
 | 
			
		||||
                    left_cards.cend(),
 | 
			
		||||
                    right_cards.cbegin(),
 | 
			
		||||
                    right_cards.cend(),
 | 
			
		||||
                    std::back_inserter(intersection));
 | 
			
		||||
            if (!intersection.empty()) {
 | 
			
		||||
                compute_points.emplace_back(
 | 
			
		||||
                        static_cast<int>(std::floor(std::pow(2.0f, static_cast<float>(intersection.size() - 1))))
 | 
			
		||||
                );
 | 
			
		||||
            } else {
 | 
			
		||||
                compute_points.emplace_back(0);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return std::accumulate(compute_points.cbegin(), compute_points.cend(), 0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								pb_4/problem_4.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								pb_4/problem_4.hpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
//
 | 
			
		||||
// Created by postaron on 31/07/24.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef ADVENTOFCODE2023_PROBLEM_4_HPP
 | 
			
		||||
#define ADVENTOFCODE2023_PROBLEM_4_HPP
 | 
			
		||||
 | 
			
		||||
#include <filesystem>
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <set>
 | 
			
		||||
 | 
			
		||||
namespace pb4 {
 | 
			
		||||
    namespace fs = std::filesystem;
 | 
			
		||||
 | 
			
		||||
    std::size_t problem_part1(const fs::path &problemFile) noexcept;
 | 
			
		||||
 | 
			
		||||
    std::size_t problem_part2(const fs::path &problemFile) noexcept;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif //ADVENTOFCODE2023_PROBLEM_4_HPP
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue