Intersecting number wheels: Difference between revisions
Content added Content deleted
Line 141: | Line 141: | ||
</pre> |
</pre> |
||
=={{header|C++}}== |
|||
{{trans|D}} |
|||
<lang cpp>#include <initializer_list> |
|||
#include <iostream> |
|||
#include <map> |
|||
#include <vector> |
|||
struct Wheel { |
|||
private: |
|||
std::vector<char> values; |
|||
size_t index; |
|||
public: |
|||
Wheel() : index(0) { |
|||
// empty |
|||
} |
|||
Wheel(std::initializer_list<char> data) : values(data), index(0) { |
|||
//values.assign(data); |
|||
if (values.size() < 1) { |
|||
throw new std::runtime_error("Not enough elements"); |
|||
} |
|||
} |
|||
char front() { |
|||
return values[index]; |
|||
} |
|||
void popFront() { |
|||
index = (index + 1) % values.size(); |
|||
} |
|||
}; |
|||
struct NamedWheel { |
|||
private: |
|||
std::map<char, Wheel> wheels; |
|||
public: |
|||
void put(char c, Wheel w) { |
|||
wheels[c] = w; |
|||
} |
|||
char front(char c) { |
|||
char v = wheels[c].front(); |
|||
while ('A' <= v && v <= 'Z') { |
|||
v = wheels[v].front(); |
|||
} |
|||
return v; |
|||
} |
|||
void popFront(char c) { |
|||
auto v = wheels[c].front(); |
|||
wheels[c].popFront(); |
|||
while ('A' <= v && v <= 'Z') { |
|||
auto d = wheels[v].front(); |
|||
wheels[v].popFront(); |
|||
v = d; |
|||
} |
|||
} |
|||
}; |
|||
void group1() { |
|||
Wheel w({ '1', '2', '3' }); |
|||
for (size_t i = 0; i < 20; i++) { |
|||
std::cout << ' ' << w.front(); |
|||
w.popFront(); |
|||
} |
|||
std::cout << '\n'; |
|||
} |
|||
void group2() { |
|||
Wheel a({ '1', 'B', '2' }); |
|||
Wheel b({ '3', '4' }); |
|||
NamedWheel n; |
|||
n.put('A', a); |
|||
n.put('B', b); |
|||
for (size_t i = 0; i < 20; i++) { |
|||
std::cout << ' ' << n.front('A'); |
|||
n.popFront('A'); |
|||
} |
|||
std::cout << '\n'; |
|||
} |
|||
void group3() { |
|||
Wheel a({ '1', 'D', 'D' }); |
|||
Wheel d({ '6', '7', '8' }); |
|||
NamedWheel n; |
|||
n.put('A', a); |
|||
n.put('D', d); |
|||
for (size_t i = 0; i < 20; i++) { |
|||
std::cout << ' ' << n.front('A'); |
|||
n.popFront('A'); |
|||
} |
|||
std::cout << '\n'; |
|||
} |
|||
void group4() { |
|||
Wheel a({ '1', 'B', 'C' }); |
|||
Wheel b({ '3', '4' }); |
|||
Wheel c({ '5', 'B' }); |
|||
NamedWheel n; |
|||
n.put('A', a); |
|||
n.put('B', b); |
|||
n.put('C', c); |
|||
for (size_t i = 0; i < 20; i++) { |
|||
std::cout << ' ' << n.front('A'); |
|||
n.popFront('A'); |
|||
} |
|||
std::cout << '\n'; |
|||
} |
|||
int main() { |
|||
group1(); |
|||
group2(); |
|||
group3(); |
|||
group4(); |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre> 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 |
|||
1 3 2 1 4 2 1 3 2 1 4 2 1 3 2 1 4 2 1 3 |
|||
1 6 7 1 8 6 1 7 8 1 6 7 1 8 6 1 7 8 1 6 |
|||
1 3 5 1 4 3 1 4 5 1 3 4 1 3 5 1 4 3 1 4</pre> |
|||
=={{header|C sharp}}== |
=={{header|C sharp}}== |