From 32aef4e595dd6197bb05f54a0b1ae0875ea06346 Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Thu, 7 Apr 2016 15:39:30 +0300 Subject: [PATCH] trinary: initial commit --- cpp/trinary/trinary.cpp | 35 +++++++++++++++++++++++++++++++++++ cpp/trinary/trinary.h | 11 +++++++++++ 2 files changed, 46 insertions(+) create mode 100644 cpp/trinary/trinary.cpp create mode 100644 cpp/trinary/trinary.h diff --git a/cpp/trinary/trinary.cpp b/cpp/trinary/trinary.cpp new file mode 100644 index 0000000..271cae7 --- /dev/null +++ b/cpp/trinary/trinary.cpp @@ -0,0 +1,35 @@ +#include "trinary.h" + +namespace trinary { + +namespace { + +inline bool is_digit(char ch) +{ + return ch >= '0' && ch <= '2'; +} + +inline int digit_to_decimal(char ch) +{ + return ch - '0'; +} + +} + +int to_decimal(const std::string &input) +{ + int result = 0; + + for (auto ch : input) { + + if (!is_digit(ch)) + return 0; + + result *= 3; + result += digit_to_decimal(ch); + } + + return result; +} + +} diff --git a/cpp/trinary/trinary.h b/cpp/trinary/trinary.h new file mode 100644 index 0000000..4e36773 --- /dev/null +++ b/cpp/trinary/trinary.h @@ -0,0 +1,11 @@ +#pragma once + +#define EXERCISM_RUN_ALL_TESTS + +#include + +namespace trinary { + +int to_decimal(const std::string &input); + +}