parent
1ce9084686
commit
c7e4b797a0
@ -0,0 +1,6 @@ |
||||
cmake_minimum_required(VERSION 3.21) |
||||
project(clock_numbers) |
||||
|
||||
set(CMAKE_CXX_STANDARD 14) |
||||
|
||||
add_executable(clock_numbers main.cpp) |
@ -0,0 +1,86 @@ |
||||
#include <iostream> |
||||
#include <array> |
||||
#include <functional> |
||||
#include <unordered_set> |
||||
|
||||
typedef union { |
||||
struct { |
||||
uint8_t hours_tens; |
||||
uint8_t hours_ones; |
||||
uint8_t minutes_tens; |
||||
uint8_t minutes_ones; |
||||
} clk; |
||||
uint32_t data; |
||||
} clk_t; |
||||
|
||||
template<> |
||||
struct std::hash<clk_t> { |
||||
std::size_t operator()(clk_t const &clk) const noexcept { |
||||
return clk.data; |
||||
} |
||||
}; |
||||
|
||||
template<> |
||||
struct std::equal_to<clk_t> { |
||||
bool operator()(clk_t const &lhs, clk_t const &rhs) const noexcept { |
||||
return lhs.data == rhs.data; |
||||
} |
||||
}; |
||||
|
||||
bool is_clock_valid(clk_t const &clk) { |
||||
|
||||
auto hours_tens = clk.clk.hours_tens; |
||||
if (hours_tens > 2) { |
||||
return false; |
||||
} |
||||
|
||||
auto hours_ones = clk.clk.hours_ones; |
||||
if (hours_tens == 2 && hours_ones > 3) { |
||||
return false; |
||||
} |
||||
|
||||
auto minutes_tens = clk.clk.minutes_tens; |
||||
if (minutes_tens > 5) { |
||||
return false; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
int solution(int A, int B, int C, int D) { |
||||
|
||||
uint8_t a = A, b = B, c = C, d = D; |
||||
std::unordered_set<clk_t> uniqs = { |
||||
{a, b, c, d}, |
||||
{a, b, d, c}, |
||||
{a, c, b, d}, |
||||
{a, c, d, b}, |
||||
{a, d, b, c}, |
||||
{a, d, c, b}, |
||||
{b, a, c, d}, |
||||
{b, a, d, c}, |
||||
{b, c, a, d}, |
||||
{b, c, d, a}, |
||||
{b, d, a, c}, |
||||
{b, d, c, a}, |
||||
{c, a, b, d}, |
||||
{c, a, d, b}, |
||||
{c, b, a, d}, |
||||
{c, b, d, a}, |
||||
{c, d, a, b}, |
||||
{c, d, b, a}, |
||||
{d, a, b, c}, |
||||
{d, a, c, b}, |
||||
{d, b, a, c}, |
||||
{d, b, c, a}, |
||||
{d, c, a, b}, |
||||
{d, c, b, a}, |
||||
}; |
||||
|
||||
return std::count_if(uniqs.begin(), uniqs.end(), is_clock_valid); |
||||
} |
||||
|
||||
int main() { |
||||
std::cout << solution(2, 3, 3, 2) << std::endl; |
||||
return 0; |
||||
} |
Loading…
Reference in new issue