diff --git a/cpp/reveal-cards-in-increasing-order.cpp b/cpp/reveal-cards-in-increasing-order.cpp new file mode 100644 index 0000000..71dec7e --- /dev/null +++ b/cpp/reveal-cards-in-increasing-order.cpp @@ -0,0 +1,77 @@ +#include +#include + +class Solution { + public: + std::vector deckRevealedIncreasing(std::vector deck) { + std::vector order(deck.size()); + + std::sort(deck.begin(), deck.end()); + + bool skip = false; + for (auto i = 0u, j = 0u; i < deck.size(); j = (j + 1) % deck.size()) { + if (order[j] == 0) { + if (!skip) { + order[j] = deck[i]; + ++i; + } + + skip = !skip; + } + } + + return order; + } +}; + +#ifdef _MF_TEST +#include + +TEST(examples, no_1) { + Solution s; + EXPECT_EQ((s.deckRevealedIncreasing(std::vector{17, 13, 11, 2, 3, 5, 7})), + (std::vector{2, 13, 3, 11, 5, 17, 7})); +} +TEST(examples, no_2) { + Solution s; + EXPECT_EQ((s.deckRevealedIncreasing(std::vector{1, 1000})), + (std::vector{1, 1000})); +} +TEST(examples, no_3) { + Solution s; + EXPECT_EQ((s.deckRevealedIncreasing(std::vector{1, 2, 3})), + (std::vector{1, 3, 2})); +} +TEST(examples, no_4) { + Solution s; + EXPECT_EQ((s.deckRevealedIncreasing(std::vector{1, 2, 3, 6})), + (std::vector{1, 3, 2, 6})); +} +TEST(examples, no_5) { + Solution s; + EXPECT_EQ((s.deckRevealedIncreasing(std::vector{1, 2, 3, 6, 4})), + (std::vector{1, 6, 2, 4, 3})); +} +TEST(examples, no_6) { + Solution s; + EXPECT_EQ((s.deckRevealedIncreasing(std::vector{1, 2, 3, 6, 4, 10})), + (std::vector{1, 4, 2, 10, 3, 6})); +} +TEST(examples, no_7) { + Solution s; + EXPECT_EQ( + (s.deckRevealedIncreasing(std::vector{1, 2, 3, 6, 4, 42, 15, 69})), + (std::vector{1, 6, 2, 42, 3, 15, 4, 69})); +} +TEST(examples, no_8) { + Solution s; + EXPECT_EQ( + (s.deckRevealedIncreasing(std::vector{1, 2, 3, 6, 4, 10, 15, 42})), + (std::vector{1, 6, 2, 15, 3, 10, 4, 42})); +} + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +#endif