Add a solution for lcd
This commit is contained in:
parent
457bad18c1
commit
11d5bda4a5
3 changed files with 190 additions and 0 deletions
68
lcd/solution/lcd.cpp
Normal file
68
lcd/solution/lcd.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include "lcd.hpp"
|
||||
|
||||
lcd_grid lcd(const std::string & s1,
|
||||
const std::string & s2,
|
||||
const std::string & s3) {
|
||||
lcd_grid result;
|
||||
result.push_back(s1);
|
||||
result.push_back(s2);
|
||||
result.push_back(s3);
|
||||
return result;
|
||||
}
|
||||
|
||||
const lcd_grid digits[] =
|
||||
{
|
||||
lcd(" _ ",
|
||||
"| |",
|
||||
"|_|"
|
||||
),
|
||||
lcd(" ",
|
||||
" |",
|
||||
" |"
|
||||
),
|
||||
lcd(" _ ",
|
||||
" _|",
|
||||
"|_ "
|
||||
),
|
||||
lcd(" _ ",
|
||||
" _|",
|
||||
" _|"
|
||||
),
|
||||
lcd(" ",
|
||||
"|_|",
|
||||
" |"
|
||||
),
|
||||
lcd(" _ ",
|
||||
"|_ ",
|
||||
" _|"
|
||||
),
|
||||
lcd(" _ ",
|
||||
"|_ ",
|
||||
"|_|"
|
||||
),
|
||||
lcd(" _ ",
|
||||
" |",
|
||||
" |"
|
||||
),
|
||||
lcd(" _ ",
|
||||
"|_|",
|
||||
"|_|"
|
||||
),
|
||||
lcd(" _ ",
|
||||
"|_|",
|
||||
" |"
|
||||
),
|
||||
};
|
||||
|
||||
lcd_grid lcd(int value) {
|
||||
if (value < 10)
|
||||
return digits[value];
|
||||
else {
|
||||
lcd_grid lhs = lcd(value / 10);
|
||||
lcd_grid rhs = digits[value % 10];
|
||||
return lcd(
|
||||
lhs[0] + ' ' + rhs[0],
|
||||
lhs[1] + ' ' + rhs[1],
|
||||
lhs[2] + ' ' + rhs[2]);
|
||||
}
|
||||
}
|
110
lcd/solution/lcd_tests.cpp
Normal file
110
lcd/solution/lcd_tests.cpp
Normal file
|
@ -0,0 +1,110 @@
|
|||
#include <gtest/gtest.h>
|
||||
|
||||
#include "lcd.hpp"
|
||||
#include <iostream>
|
||||
|
||||
std::string to_string(const lcd_grid & grid) {
|
||||
std::stringstream output;
|
||||
for (const auto & str: grid)
|
||||
output << str;
|
||||
return output.str();
|
||||
}
|
||||
|
||||
void lcd_spec(int value, const lcd_grid & grid) {
|
||||
std::string expected = to_string(grid),
|
||||
actual = to_string(lcd(value));
|
||||
if (expected != actual) {
|
||||
std::cerr
|
||||
<< "lcd(" << value << ")\n"
|
||||
<< "expected==\n"
|
||||
<< expected << '\n'
|
||||
<< "actual==\n"
|
||||
<< actual << std::endl;
|
||||
std::exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(LcdTest, Zero) {
|
||||
lcd_spec(0, lcd(
|
||||
" _ ",
|
||||
"| |",
|
||||
"|_|"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, One) {
|
||||
lcd_spec(1, lcd(
|
||||
" ",
|
||||
" |",
|
||||
" |"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, Two) {
|
||||
lcd_spec(2, lcd(
|
||||
" _ ",
|
||||
" _|",
|
||||
"|_ "
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, Three) {
|
||||
lcd_spec(3, lcd(
|
||||
" _ ",
|
||||
" _|",
|
||||
" _|"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, Four) {
|
||||
lcd_spec(4, lcd(
|
||||
" ",
|
||||
"|_|",
|
||||
" |"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, Twelve) {
|
||||
lcd_spec(12, lcd(
|
||||
" _ ",
|
||||
" | _|",
|
||||
" | |_ "
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, TwentyFive) {
|
||||
lcd_spec(25, lcd(
|
||||
" _ _ ",
|
||||
" _| |_ ",
|
||||
"|_ _|"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, SixtyFour) {
|
||||
lcd_spec(64, lcd(
|
||||
" _ ",
|
||||
"|_ |_|",
|
||||
"|_| |"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, SeventyFour) {
|
||||
lcd_spec(74, lcd(
|
||||
" _ ",
|
||||
" | |_|",
|
||||
" | |"
|
||||
));
|
||||
}
|
||||
|
||||
TEST(LcdTest, EightyNine) {
|
||||
lcd_spec(89, lcd(
|
||||
" _ _ ",
|
||||
"|_| |_|",
|
||||
"|_| |"
|
||||
));
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
12
lcd/solution/main.cpp
Normal file
12
lcd/solution/main.cpp
Normal file
|
@ -0,0 +1,12 @@
|
|||
#include <iostream>
|
||||
#include "lcd.hpp"
|
||||
|
||||
static const int MAX = 100;
|
||||
|
||||
int main() {
|
||||
for (int i = 0; i < MAX; i++) {
|
||||
auto grid = lcd(i);
|
||||
for (const auto & line: grid)
|
||||
std::cout << line << "\n";
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue