fork download
  1. #include <array>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <map>
  5. #include <string>
  6.  
  7. std::string to_bar_code(unsigned int zip_code)
  8. {
  9. const std::array<std::string, 10> digit {{
  10. "11000", "00011", "00101", "00110", "01001",
  11. "01010", "01100", "10001", "10010", "10100"
  12. }};
  13. return "1"
  14. + digit[(zip_code / 10000) % 10]
  15. + digit[(zip_code / 1000) % 10]
  16. + digit[(zip_code / 100) % 10]
  17. + digit[(zip_code / 10) % 10]
  18. + digit[zip_code % 10]
  19. + "1";
  20. }
  21.  
  22. int to_zip_code(const std::string& bar_code)
  23. {
  24. const std::map<std::string, int> digits = {
  25. {"11000", 0}, // special case
  26. {"00011", 1},
  27. {"00101", 2},
  28. {"00110", 3},
  29. {"01001", 4},
  30. {"01010", 5},
  31. {"01100", 6},
  32. {"10001", 7},
  33. {"10010", 8},
  34. {"10100", 9}
  35. };
  36. const std::string bar_digits[5]{ {bar_code, 1, 5}, {bar_code, 6, 5}, {bar_code, 11, 5}, {bar_code, 16, 5}, {bar_code, 21, 5} };
  37. unsigned int res = 0;
  38. for (const auto& d : bar_digits)
  39. {
  40. res *= 10;
  41. res += digits.at(d);
  42. }
  43. return res;
  44. }
  45.  
  46.  
  47. int main()
  48. {
  49. std::cout << "Digits" << " " << "Bar Code" << std::endl;
  50. for (const auto zip : {99504, 12345, 67890}) {
  51. std::cout << zip << std::setw(35) << to_bar_code(zip) << std::endl;
  52. }
  53. std::cout << "Digits" << " " << "Bar Code" << std::endl;
  54. for (const auto bar : {"110100101000101011000010011", "100101010011100001100110001", "110100001011100001100010011", "100011000110101000011100101"}) {
  55. std::cout << to_zip_code(bar) << std::setw(35) << bar << std::endl;
  56. }
  57. }
  58.  
Success #stdin #stdout 0s 3420KB
stdin
Standard input is empty
stdout
Digits       Bar Code
99504        110100101000101011000010011
12345        100011001010011001001010101
67890        101100100011001010100110001
Digits       Bar Code
99504        110100101000101011000010011
24060        100101010011100001100110001
92064        110100001011100001100010011
11518        100011000110101000011100101