diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-03-11 23:20:09 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-11 23:20:09 +0000 |
| commit | 993b5cfec02444f8ab158507ea64f42bcd3d175b (patch) | |
| tree | 3678bcde9af7c2fb9a2fcb9f8cd5deefd17f59c2 /challenge-200/paulo-custodio/cpp/ch-2.cpp | |
| parent | 51465a4186e14e5f9ae26e7f5b20dbb9f5ea8aae (diff) | |
| parent | 0ad64a5e5a740655432a36b2af0c35760289cf89 (diff) | |
| download | perlweeklychallenge-club-993b5cfec02444f8ab158507ea64f42bcd3d175b.tar.gz perlweeklychallenge-club-993b5cfec02444f8ab158507ea64f42bcd3d175b.tar.bz2 perlweeklychallenge-club-993b5cfec02444f8ab158507ea64f42bcd3d175b.zip | |
Merge pull request #7709 from pauloscustodio/master
Add Perl, C, C++ and Forth solutions
Diffstat (limited to 'challenge-200/paulo-custodio/cpp/ch-2.cpp')
| -rw-r--r-- | challenge-200/paulo-custodio/cpp/ch-2.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/challenge-200/paulo-custodio/cpp/ch-2.cpp b/challenge-200/paulo-custodio/cpp/ch-2.cpp new file mode 100644 index 0000000000..d7ae53b788 --- /dev/null +++ b/challenge-200/paulo-custodio/cpp/ch-2.cpp @@ -0,0 +1,113 @@ +/* +Challenge 200 + +Task 2: Seven Segment 200 +Submitted by: Ryan J Thompson +A seven segment display is an electronic component, usually used to display +digits. The segments are labeled 'a' through 'g' as shown: + + +Seven Segment + + +The encoding of each digit can thus be represented compactly as a truth table: + +my @truth = qw<abcdef bc abdeg abcdg bcfg acdfg acdefg abc abcdefg abcfg>; +For example, $truth[1] = ‘bc’. The digit 1 would have segments ‘b’ and ‘c’ enabled. + +Write a program that accepts any decimal number and draws that number as a +horizontal sequence of ASCII seven segment displays, similar to the following: + + +------- ------- ------- + | | | | | + | | | | | +------- +| | | | | +| | | | | +------- ------- ------- +To qualify as a seven segment display, each segment must be drawn (or not drawn) +according to your @truth table. + +The number "200" was of course chosen to celebrate our 200th week! +*/ + +#include <iostream> +#include <string> + +#define A 1 +#define B 2 +#define C 4 +#define D 8 +#define E 16 +#define F 32 +#define G 64 + +int truth[10] = { + A|B|C|D|E|F, B|C, A|B|D|E|G, A|B|C|D|G, B|C|F|G, + A|C|D|F|G, A|C|D|E|F|G, A|B|C, A|B|C|D|E|F|G, A|B|C|F|G +}; + +void draw_number(int n) { + std::string s = std::to_string(n); + + // draw a + for (size_t i = 0; i < s.size(); i++) { + int digit = s[i] - '0'; + if ((truth[digit] & A)==A) + std::cout << " #### "; + else + std::cout << " "; + } + std::cout << std::endl; + // draw f, b + for (int j = 0; j < 2; j++) { + for (size_t i = 0; i < s.size(); i++) { + int digit = s[i] - '0'; + if ((truth[digit] & F)==F) std::cout << "#"; else std::cout << " "; + std::cout << " "; + if ((truth[digit] & B)==B) std::cout << "#"; else std::cout << " "; + std::cout << " "; + } + std::cout << std::endl; + } + // draw g + for (size_t i = 0; i < s.size(); i++) { + int digit = s[i] - '0'; + if ((truth[digit] & G)==G) + std::cout << " #### "; + else + std::cout << " "; + } + std::cout << std::endl; + // draw e, c + for (int j = 0; j < 2; j++) { + for (size_t i = 0; i < s.size(); i++) { + int digit = s[i] - '0'; + if ((truth[digit] & E)==E) std::cout << "#"; else std::cout << " "; + std::cout << " "; + if ((truth[digit] & C)==C) std::cout << "#"; else std::cout << " "; + std::cout << " "; + } + std::cout << std::endl; + } + // draw d + for (size_t i = 0; i < s.size(); i++) { + int digit = s[i] - '0'; + if ((truth[digit] & D)==D) + std::cout << " #### "; + else + std::cout << " "; + } + std::cout << std::endl; +} + +int main(int argc, char* argv[]) { + argv++; argc--; + if (argc == 0) { + std::cerr << "usage: ch-2 num" << std::endl; + exit(EXIT_FAILURE); + } + + draw_number(atoi(argv[0])); +} |
