Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <cstdlib>
- using namespace std;
- char randomDigit() {
- return '0' + rand() % 10;
- }
- char randomChar() {
- return 'A' + rand() % 26;
- }
- class Ticket {
- protected:
- char code [50];
- int size;
- public:
- void setCode (char *code) {
- strcpy(this->code,code);
- }
- void setSize (int size) {
- this->size = size;
- }
- virtual bool validate () = 0;
- virtual bool operator == (Ticket &t) {
- return !strcmp(code,t.code);
- }
- friend ostream& operator << (ostream &out, Ticket &t) {
- return out << t.code;
- }
- };
- class DigitTicket : public Ticket {
- public:
- DigitTicket (int size) {
- char *code = new char [size];
- for(int i=0; i<size; i++) {
- code[i] = randomDigit ();
- }
- setCode (code);
- setSize (size);
- }
- bool validate () {
- int sum = 0;
- for(int i=0; i<size; i++) {
- sum += code[i] - '0';
- }
- return !(sum%7);
- }
- bool operator == (DigitTicket &t) {
- return !strcmp(code,t.code);
- }
- };
- class CharTicket : public Ticket {
- public:
- CharTicket (int size) {
- char *code = new char [size];
- for(int i=0; i<size; i++) {
- code[i] = randomChar ();
- }
- setCode (code);
- setSize (size);
- }
- bool validate () {
- int sum = 0;
- for(int i=0; i<size; i++) {
- sum += (int) code[i];
- }
- return !(sum%3);
- }
- bool operator == (CharTicket &t) {
- return !strcmp(code,t.code);
- }
- };
- int valid (Ticket **tickets, int n) {
- int count = 0;
- for(int i=0; i<n; i++) {
- if(tickets[i]->validate())
- ++count;
- }
- return count;
- }
- int unique (Ticket **tickets, int n) {
- int count = 0;
- for(int i=0; i<n; i++) {
- int found = 0;
- for(int j=0; j<n; j++) {
- if(*tickets[i] == *tickets[j])
- ++found;
- }
- if(found == 1)
- ++count;
- }
- return count;
- }
- int main() {
- int seed;
- cin >> seed;
- srand (seed);
- int n;
- cin >> n;
- Ticket **t = new Ticket*[n];
- cout << "===== ALL TICKETS (" << n << ") =====" << endl;
- for(int i = 0; i < n; ++i) {
- int x;
- cin >> x;
- if(i % 2 == 0) {
- t[i] = new DigitTicket(x);
- } else {
- t[i] = new CharTicket(x);
- }
- cout << *t[i] << endl;
- }
- cout << "===== VALID =====" << endl;
- cout << valid(t, n) << endl;
- cout << "===== UNIQUE =====" << endl;
- cout << unique(t, n) << endl;
- for(int i = 0; i < n; ++i) {
- delete t[i];
- }
- delete [] t;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment