diff options
Diffstat (limited to 'I_anno/Programmazione_2/exercises')
22 files changed, 0 insertions, 2184 deletions
diff --git a/I_anno/Programmazione_2/exercises/carattere-maggiore.cc b/I_anno/Programmazione_2/exercises/carattere-maggiore.cc deleted file mode 100644 index 2e89fcd..0000000 --- a/I_anno/Programmazione_2/exercises/carattere-maggiore.cc +++ /dev/null @@ -1,40 +0,0 @@ -#include<iostream> -#include<map> -#include<fstream> - -using namespace std; - - - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string line; -        getline(in, line); -        map<char, int> chs; -        for(auto const& c : line) { -            if(c == ' ') continue; -            if(chs.find(c) != chs.end()) -                chs[c]++; -            else -                chs[c] = 1; -        } -        int n = 0; -        char c = 'a'; -        for(auto const& i : chs) { -            if(i.second >= n) { -                if(i.first >= c) { -                    n = i.second; -                    c = i.first; -                } -            } -        } -        out << c << ' ' << n << endl; -    } - -    out.close(); -    in.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/dequeue.cc b/I_anno/Programmazione_2/exercises/dequeue.cc deleted file mode 100644 index 4b012c4..0000000 --- a/I_anno/Programmazione_2/exercises/dequeue.cc +++ /dev/null @@ -1,137 +0,0 @@ - -#include<iostream> -#include<fstream> - -using namespace std; - -template<class T> -class node { -public: -    node(T key, node<T>* next) : _key{key}, _next{next} {} -    node(T key) : _key{key}, _next{nullptr} {} -    const T& key() const { return _key; } -    T& key() { return _key; } -    const node<T>*& next() const { return _next; } -    node<T>*& next() { return _next; } -private: -    T _key; -    node<T>* _next; -}; - -template<class T> -class Coda { -public: -    Coda() : _head{nullptr}, _tail{nullptr} {} -    ~Coda() { - -    } -    Coda<T>* enqueue(T val) { -        if(!_head) { -            _head = new node<T>{val, nullptr}; -            _tail = _head; -        } else { -            _tail->next() = new node<T>{val, nullptr}; -            _tail = _tail->next(); -        } - -        return this; -    } -    node<T>* dequeue() { -        if(!_head) return nullptr; -        node<T>* elem = _head; -        delete _head; -        _head = elem->next(); - -        return elem; -    } - -    bool is_empty() { return _head == nullptr; } -private: -    node<T>* _head; -    node<T>* _tail; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string t; -        int n; -        in >> t; -        switch(t.at(0)) { -        case 'b': { -            Coda<bool>* queue = new Coda<bool>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    queue->enqueue(s.at(1) - '0'); -                } else { -                    queue->dequeue(); -                } -            } -            while(!queue->is_empty()) -                out << queue->dequeue()->key() << ' '; -            out << endl; -            break; -        } -        case 'd': { -            Coda<double>* queue = new Coda<double>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    queue->enqueue(stod(s.substr(1, s.length()-1))); -                } else { -                    queue->dequeue(); -                } -            } -            while(!queue->is_empty()) -                out << queue->dequeue()->key() << ' '; -            out << endl; -            break; -        } -        case 'c': { -            Coda<char>* queue = new Coda<char>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    queue->enqueue(s.at(1)); -                } else { -                    queue->dequeue(); -                } -            } -            while(!queue->is_empty()) -                out << queue->dequeue()->key() << ' '; -            out << endl; -            break; -        } -        case 'i': { -            Coda<int>* queue = new Coda<int>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    queue->enqueue(stoi(s.substr(1, s.length()-1))); -                } else { -                    queue->dequeue(); -                } -            } -            while(!queue->is_empty()) -                out << queue->dequeue()->key() << ' '; -            out << endl; -            break; -        } -        } -    } -    in.close(); -    out.close(); -    return 0; -} - diff --git a/I_anno/Programmazione_2/exercises/doppioni.cc b/I_anno/Programmazione_2/exercises/doppioni.cc deleted file mode 100644 index fdd3e88..0000000 --- a/I_anno/Programmazione_2/exercises/doppioni.cc +++ /dev/null @@ -1,77 +0,0 @@ -#include<iostream> -#include<fstream> - -using namespace std; - -template<class T> -class node { -public: -    node(T key, node* parent, node* right, node* left) : _key{key}, _parent{parent}, _right{right}, _left{left} {} -    T& key() { return _key; } -    const T& key() const { return _key; } -    node<T>*& parent() { return _parent; } -    const node<T>*& parent() const { return _parent; } -    node<T>*& right() { return _right; } -    const node<T>*& right() const { return _right; } -    node<T>*& left() { return _left; } -    const node<T>*& left() const { return _left; } -private: -    T _key; -    node<T>* _parent; -    node<T>* _right; -    node<T>* _left; -}; - -class bst { -public: -    bst() : _duplicates{0}, _root{nullptr} {} -    bst* add(int val) { -        node<int>* iter = _root; -        node<int>* prev = nullptr; -        while(iter) { -            prev = iter; -            if(iter->key() == val) { -                _duplicates++; -                return this; -            } - -            if(iter->key() > val) -                iter = iter->right(); -            else -                iter = iter->left(); -        } - -        node<int>* nodus = new node<int>{val, prev, nullptr, nullptr}; -        if(!prev) -            _root = nodus; -        else if(prev->key() > val) -            prev->right() = nodus; -        else -            prev->left() = nodus; - -        return this; -    } -    const int& duplicates() const { return _duplicates; } -private: -    int _duplicates; -    node<int>* _root; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); -    for(int ts = 0; ts < 100; ++ts) { -        bst* b = new bst{}; -        int n; -        in >> n; -        int e; -        for(int i = 0; i < n; ++i) { -            in >> e; -            b->add(e); -        } -        out << b->duplicates() << endl; -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/estremi-uguali.cc b/I_anno/Programmazione_2/exercises/estremi-uguali.cc deleted file mode 100644 index 63ac019..0000000 --- a/I_anno/Programmazione_2/exercises/estremi-uguali.cc +++ /dev/null @@ -1,32 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -int result(string s) { -    if(s.at(0) == s.at(s.length()-1)) -        return 1; - -    return 0; -} - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int _; -        string s; -        int size{}; -        for(int i = 0; i < 3; ++i) { -            in >> _ >> s; -            size += result(s); -        } -        out << size << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/even-length.cc b/I_anno/Programmazione_2/exercises/even-length.cc deleted file mode 100644 index 2d3d6a4..0000000 --- a/I_anno/Programmazione_2/exercises/even-length.cc +++ /dev/null @@ -1,27 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -string result(string s) { -    if(s.length() % 2 == 0) -        return s; - -    return s.substr(0, s.length()-1); -} - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string s; -        in >> s; -        out << result(s) << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/exam_08_10_14.cc b/I_anno/Programmazione_2/exercises/exam_08_10_14.cc deleted file mode 100644 index c9c33be..0000000 --- a/I_anno/Programmazione_2/exercises/exam_08_10_14.cc +++ /dev/null @@ -1,202 +0,0 @@ -#include<iostream> - -using namespace std; - -template<class H> class MultiBST { -    virtual MultiBST<H>* ins(H x) = 0; -    virtual int multiplicity(H x) = 0; -    virtual void inorder() = 0; -}; - -template<class H> -class node { -public: -    node(H val) : _key{val}, _parent{nullptr}, _left{nullptr}, _right{nullptr}, _rk{1} {} -    H& key() { return _key; }   -    const H& key() const { return _key; }   -    node<H>*& parent() { return _parent; } -    const node<H>*& parent() const { return _parent; } -    node<H>*& left() { return _left; } -    const node<H>*& left() const { return _left; } -    node<H>*& right() { return _right; } -    const node<H>*& right() const { return _right; } -    int& rk() { return _rk; } -    const int& rk() const { return _rk; } -private: -    H _key; -    node<H>* _parent; -    node<H>* _left; -    node<H>* _right; -    int _rk; -}; - -template<class H> -class MyMultiBST : public MultiBST<H> { -public: -    MyMultiBST() : _root{nullptr} {} -    node<H>*& root() { return _root; } -    const node<H>*& root() const { return _root; } -    int multiplicity(H x) { -        auto elem = _search(x); -        if(elem) -            return elem->rk(); -        return 0; -    } -    MyMultiBST<H>* ins(H x) { -        auto iter = _search(x); -        if(iter) { -            iter->rk() = iter->rk()+1; -        } else { -            iter = _root; -            node<H>* y{nullptr}; - -            while(iter) { -                y = iter; -                if(iter->key() > x)  -                    iter = iter->left(); -                else -                    iter = iter->right(); -            } - -            node<H>* nodus = new node<H>{x}; -            nodus->parent() = y; -            if(!y) { -                _root = nodus; -            } else if(y->key() > x) { -                y->left() = nodus; -            } else { -                y->right() = nodus; -            } -        } - -        return this; -    } -    void inorder() { -       _inorder(_root); -    } -    MyMultiBST<H>* del(H x) { -        node<H>* y; -        node<H>* z = _search(x); - -        if(!z) return this; - -        if(z->rk() > 1) { -            z->rk() = z->rk()-1; -        } else { -            if(!z->left()) { -                _transplant(z, z->right()); -            } else if(!z->right()) { -                _transplant(z, z->left()); -            } else { -                y = _min(z->right()); -                if(y->parent() != z) { -                    _transplant(y, y->right()); -                    y->right() = z->right(); -                    y->right()->parent() = y; -                } -                _transplant(z, y); -                y->left() = z->left(); -                y->left()->parent() = y; -                delete z; -            } -        } - -        return this; -    } -    node<H>* predecessor(H x) { -        auto iter = _search(x); -        if(!iter) return nullptr; -        if(iter->left()) -            return _max(iter->left()); - -        auto y = iter->parent(); -        while(y && iter == y->left()) { -            iter = y; -            y = y->parent(); -        } - -        return y; -    } -    int rank(H x) { -        auto iter = predecessor(x); -        int sum{1}; -        while(iter) { -            sum+=iter->rk(); -            iter = predecessor(iter->key()); -        } -        return sum; -    } -private: -    void _transplant(node<H>* u, node<H>* v) { -        if(!u->parent()) _root = v; -        else if(u == u->parent()->left()) -            u->parent()->left() = v; -        else -            u->parent()->right() = v; - -        if(v) -            v->parent() = u->parent(); -    } -    node<H>* _max(node<H>* x) { -        if(!x) return nullptr; - -        auto iter = x; -        while(iter->right()) { -            iter = iter->right(); -        } - -        return iter; -    } -    node<H>* _min(node<H>* x) { -        if(!x) return nullptr; - -        auto iter = x; -        while(iter->left()) { -            iter = iter->left(); -        } - -        return iter; -    } -    void _inorder(node<H>* p) { -        if(p) { -            _inorder(p->left()); -            for(int i = 0; i < p->rk(); ++i) { -                cout << p->key() << ' '; -            } -            _inorder(p->right()); -        } -    } -    node<H>* _search(H val) { -        auto iter = _root; -        while(iter && iter->key() != val) { -            if(iter->key() > val) -                iter = iter->left(); -            else -                iter = iter->right(); -        } - -        return iter; -    } -    node<H>* _root; -}; - -int main() { -    MyMultiBST<int>* t = new MyMultiBST<int>{}; - -    for(auto const& i : {10, 7, 7, 23, 30, 4, 1, 5, 9, 5, 1, 7, 1, 9}) -        t->ins(i); - -    t->inorder(); -    cout << '\n'; -    for(auto const& i : {5, 7, 17}) -        cout << i << ": " << t->multiplicity(i) << endl; - -    for(auto const& i : {7, 4, 23, 7, 7}) -        t->del(i); -    t->inorder(); -    cout << '\n'; -    for(auto const& i: {5, 9, 30}) -        cout << t->rank(i) << ' '; -    delete t; -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex1.cpp b/I_anno/Programmazione_2/exercises/exam_20_07_20/ex1.cpp deleted file mode 100644 index 4f08a74..0000000 --- a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex1.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include<iostream> -#include<sstream> -#include<fstream> -#include<vector> - -using namespace std; -int insertionsort(vector<int>& a, int n) { -    int c = 0; -    for(int i = 1; i < n; ++i) { -        int j = i-1; -        int key = a[i]; -        while(j > -1 && a[j] > key) { -            swap(a[j+1], a[j]); -            --j; -            c++; -        } -        a[j+1] = key; -    } -    return c; -} -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int N; -        in >> N; -        int a, b; -        vector<int> v; -        for(int i = 0; i < N; ++i) { -            in >> a >> b; -            v.push_back(a+b); -        } -        out << insertionsort(v, v.size()) << endl; -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex2.cpp b/I_anno/Programmazione_2/exercises/exam_20_07_20/ex2.cpp deleted file mode 100644 index aed25e4..0000000 --- a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex2.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include<iostream> -#include<sstream> -#include<fstream> -#include<queue> - -using namespace std; -using pi = tuple<int, int, vector<int>>; - -class comp { -public: -    bool operator()(const pi& lhs, const pi& rhs) const { -        auto xl = get<0>(lhs); -        auto yl = get<0>(rhs); - -        auto il = get<1>(lhs); -        auto jl = get<1>(rhs); -        if(xl == yl) -            return il > jl; -        return xl > yl; -    } -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int R, C; -        in >> R >> C; -        vector<vector<int>> v; -        priority_queue<pi, vector<pi>, comp> pq; -        int k; -        for(int i = 0; i < R; ++i) { -            v.push_back(vector<int>{}); -            for(int j = 0; j < C; ++j) { -                in >> k; -                v[i].push_back(k); -            } -        } - -        int index = 0; -        for(auto const& i : v) { -            int s = 0; -            pi qq; -            for(auto const& j : i) -                s += j; -            get<0>(qq) = s; -            get<1>(qq) = index++; -            get<2>(qq) = i; -            pq.push(qq); -        } -        while(!pq.empty()) { -            auto q = pq.top(); -            pq.pop(); -            for(auto const& i : get<2>(q)) -                out << i << ' '; -        } -        out << endl; -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex3.cpp b/I_anno/Programmazione_2/exercises/exam_20_07_20/ex3.cpp deleted file mode 100644 index 71f9c65..0000000 --- a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex3.cpp +++ /dev/null @@ -1,284 +0,0 @@ -#include<iostream> -#include<sstream> -#include<fstream> - -using namespace std; - -template<class T> -struct node { -    T key; -    node<T>* prev; -    node<T>* right; -    node<T>* left; -}; - -template<class T> -class bst { -public: -    bst() : root{nullptr} , _val{0}{} - -    ~bst() { -        // TODO -    } - -    bst<T>* insert(initializer_list<T>&& list) { -        for(auto const& i : list) -            insert(i); - -        return this; -    } - -    bst<T>* insert(T k) { -        node<T>* nodus = new node<T>{k, nullptr, nullptr, nullptr}; -        node<T>* iter = root; -        node<T>* prev = nullptr; - -        while(iter) { -            prev = iter; -            iter = (k < iter->key) ? iter->left : iter->right; -        } - -        nodus->prev = prev; -        if(!prev) -            root = nodus; -        else if(k < prev->key) -            prev->left = nodus; -        else -            prev->right = nodus; - -        return this; -    } - -    bst<T>* remove(initializer_list<T>&& list) { -        for(auto const& i : list) -            remove(i); - -        return this; -    } - -    bst<T>* remove(T k) { -        node<T>* nodus = search(k); -        if(!nodus) return this; - -        if(!nodus->left) { -            _transplant(nodus, nodus->right); -        } else if(!nodus->right) { -            _transplant(nodus, nodus->left); -        } else { -            node<T>* iter = _min(nodus->right); -            if(iter->prev != nodus) { -                _transplant(iter, iter->right); -                iter->right = nodus->right; -                iter->right->prev = iter; -            } -            _transplant(nodus, iter); -            iter->left = nodus->left; -            iter->left->prev = iter; -        } - -        delete nodus; -        return this; -    } - -    node<T>* min() { -        return _min(root); -    } - -    node<T>* min(node<T>* nodus) { -        return _min(nodus); -    } - -    node<T>* max() { -        return _max(root); -    } - -    node<T>* max(node<T>* nodus) { -        return _max(nodus); -    } - -    node<T>* search(T k) { -        node<T>* iter = root; -        while(iter && iter->key != k) -            iter = (iter->key > k) ? iter->left : iter->right; - -        return iter; -    } - -    node<T>* successor(T k) { -        node<T>* nodus = search(k); -        if(!nodus) return nullptr; - -        if(nodus->right) -            return min(nodus->right); - -        node<T>* prev = nodus->prev; -        while(prev && nodus == prev->right) { -            nodus = prev; -            prev = prev->prev; -        } - -        return prev; - -    } -    node<T>* predecessor(T k) { -        node<T>* nodus = search(k); -        if(!nodus) return nullptr; - -        if(nodus->left) -            return max(nodus->left); - -        node<T>* prev = nodus->prev; -        while(prev && nodus == prev->left) { -            nodus = prev; -            prev = prev->prev; -        } - -        return prev; -    } - -    friend ostream& operator<<(ostream& os, bst<T>* tree) { -        tree->_inorder(os, tree->root); -        return os; -    } -    T sol(T k) { -        return _max(search(k))->key; -    } -private: -    int _val; -    void _transplant(node<T>* u, node<T>* v) { -        if(!u->prev) { -            root = v; -        } else if(u == u->prev->left) { -            u->prev->left = v; -        } else { -            u->prev->right = v; -        } - -        if(v) -            v->prev = u->prev; -    } - -    node<T>* _min(node<T>* root) { -        node<T>* iter = root; -        while(iter && iter->left) -            iter = iter->left; - -        return iter; -    } - -    node<T>* _max(node<T>* root) { -        node<T>* iter = root; -        while(iter && iter->right) -            iter = iter->right; - -        return iter; -    } - -    void _inorder(ostream& os, node<T>* root) { -        if(root) { -            if(root->right && root->left) { -                _val++; -            } -            _inorder(os, root->left); -            os << root->key << ' '; -            _inorder(os, root->right); -        } -    } - -    void _preorder(ostream& os, node<T>* root) { -        if(root) { -            os << root->key << ' '; -            _inorder(os, root->left); -            _inorder(os, root->right); -        } -    } - -    void _postorder(ostream& os, node<T>* root) { -        if(root) { -            _inorder(os, root->left); -            _inorder(os, root->right); -            os << root->key << ' '; -        } -    } -    node<T>* root; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string t, comm; -        in >> t; -        int n; -        switch(t.at(0)) { -        case 'd': -            { -                bst<double>* b = new bst<double>{}; -                in >> n; -                double k; -                for(int i = 0; i < n; ++i) { -                    in >> comm; -                    stringstream tcomm(comm); -                    int ex= 0; -                    while(getline(tcomm, comm, ':')) { -                        if(ex == 0) { -                            if(comm == "ins") -                                ex = 1; -                            else -                                ex = 2; -                        } else { -                            if(ex == 1) -                                b->insert(stod(comm)); -                            else -                                b->remove(stod(comm)); -                            ex = 0; -                        } -                    } -                } -                in >> k; -                cout << b << endl; -                out << b->sol(k) << endl; -  -                delete b; -                break; -            } -        case 'i': -            { -                bst<int>* b = new bst<int>{}; -                in >> n; -                int k; -                for(int i = 0; i < n; ++i) { -                    in >> comm; -                    stringstream tcomm(comm); -                    int ex= 0; -                    while(getline(tcomm, comm, ':')) { -                        if(ex == 0) { -                            if(comm == "ins") -                                ex = 1; -                            else -                                ex = 2; -                        } else { -                            if(ex == 1) -                                b->insert(stoi(comm)); -                            else -                                b->remove(stoi(comm)); -                            ex = 0; -                        } -                    } -                } -                in >> k; -                cout << b << endl; -                out << b->sol(k) << endl; -  -                delete b; -                break; -            } -        } -    } - -    in.close(); -    out.close(); -    return 0; -} - diff --git a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex4.cpp b/I_anno/Programmazione_2/exercises/exam_20_07_20/ex4.cpp deleted file mode 100644 index e234363..0000000 --- a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex4.cpp +++ /dev/null @@ -1,293 +0,0 @@ -#include<iostream> -#include<sstream> -#include<fstream> - -using namespace std; - -template<class T> -struct node { -    T key; -    node<T>* prev; -    node<T>* right; -    node<T>* left; -}; - -template<class T> -class bst { -public: -    bst() : root{nullptr} , _val{0}{} - -    ~bst() { -        // TODO -    } - -    bst<T>* insert(initializer_list<T>&& list) { -        for(auto const& i : list) -            insert(i); - -        return this; -    } - -    bst<T>* insert(T k) { -        node<T>* nodus = new node<T>{k, nullptr, nullptr, nullptr}; -        node<T>* iter = root; -        node<T>* prev = nullptr; - -        while(iter) { -            prev = iter; -            iter = (k < iter->key) ? iter->left : iter->right; -        } - -        nodus->prev = prev; -        if(!prev) -            root = nodus; -        else if(k < prev->key) -            prev->left = nodus; -        else -            prev->right = nodus; - -        return this; -    } - -    bst<T>* remove(initializer_list<T>&& list) { -        for(auto const& i : list) -            remove(i); - -        return this; -    } - -    bst<T>* remove(T k) { -        node<T>* nodus = search(k); -        if(!nodus) return this; - -        if(!nodus->left) { -            _transplant(nodus, nodus->right); -        } else if(!nodus->right) { -            _transplant(nodus, nodus->left); -        } else { -            node<T>* iter = _min(nodus->right); -            if(iter->prev != nodus) { -                _transplant(iter, iter->right); -                iter->right = nodus->right; -                iter->right->prev = iter; -            } -            _transplant(nodus, iter); -            iter->left = nodus->left; -            iter->left->prev = iter; -        } - -        delete nodus; -        return this; -    } - -    node<T>* min() { -        return _min(root); -    } - -    node<T>* min(node<T>* nodus) { -        return _min(nodus); -    } - -    node<T>* max() { -        return _max(root); -    } - -    node<T>* max(node<T>* nodus) { -        return _max(nodus); -    } - -    node<T>* search(T k) { -        node<T>* iter = root; -        while(iter && iter->key != k) -            iter = (iter->key > k) ? iter->left : iter->right; - -        return iter; -    } - -    node<T>* successor(T k) { -        node<T>* nodus = search(k); -        if(!nodus) return nullptr; - -        if(nodus->right) -            return min(nodus->right); - -        node<T>* prev = nodus->prev; -        while(prev && nodus == prev->right) { -            nodus = prev; -            prev = prev->prev; -        } - -        return prev; - -    } -    node<T>* predecessor(T k) { -        node<T>* nodus = search(k); -        if(!nodus) return nullptr; - -        if(nodus->left) -            return max(nodus->left); - -        node<T>* prev = nodus->prev; -        while(prev && nodus == prev->left) { -            nodus = prev; -            prev = prev->prev; -        } - -        return prev; -    } - -    friend ostream& operator<<(ostream& os, bst<T>* tree) { -        tree->_inorder(os, tree->root); -        return os; -    } -    T sol(T k) { -        auto x = search(k); -        auto m = _max(x)->key; -        auto mnn = _min(x); -        T mn; -        if(mnn->right) -            mn = _min(mnn->right)->key; -        else -            mn = mnn->key; -        cout << m << ' ' << mn << endl; -        return m - mn; -    } -private: -    int _val; -    void _transplant(node<T>* u, node<T>* v) { -        if(!u->prev) { -            root = v; -        } else if(u == u->prev->left) { -            u->prev->left = v; -        } else { -            u->prev->right = v; -        } - -        if(v) -            v->prev = u->prev; -    } - -    node<T>* _min(node<T>* root) { -        node<T>* iter = root; -        while(iter && iter->left) -            iter = iter->left; - -        return iter; -    } - -    node<T>* _max(node<T>* root) { -        node<T>* iter = root; -        while(iter && iter->right) -            iter = iter->right; - -        return iter; -    } - -    void _inorder(ostream& os, node<T>* root) { -        if(root) { -            if(root->right && root->left) { -                _val++; -            } -            _inorder(os, root->left); -            os << root->key << ' '; -            _inorder(os, root->right); -        } -    } - -    void _preorder(ostream& os, node<T>* root) { -        if(root) { -            os << root->key << ' '; -            _inorder(os, root->left); -            _inorder(os, root->right); -        } -    } - -    void _postorder(ostream& os, node<T>* root) { -        if(root) { -            _inorder(os, root->left); -            _inorder(os, root->right); -            os << root->key << ' '; -        } -    } -    node<T>* root; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string t, comm; -        in >> t; -        int n; -        switch(t.at(0)) { -        case 'd': -            { -                bst<double>* b = new bst<double>{}; -                in >> n; -                double k; -                for(int i = 0; i < n; ++i) { -                    in >> comm; -                    stringstream tcomm(comm); -                    int ex= 0; -                    while(getline(tcomm, comm, ':')) { -                        if(ex == 0) { -                            if(comm == "ins") -                                ex = 1; -                            else -                                ex = 2; -                        } else { -                            if(ex == 1) -                                b->insert(stod(comm)); -                            else -                                b->remove(stod(comm)); -                            ex = 0; -                        } -                    } -                } -                in >> k; -                cout << b << endl; -                out << b->sol(k) << endl; -  -                delete b; -                break; -            } -        case 'i': -            { -                bst<int>* b = new bst<int>{}; -                in >> n; -                int k; -                for(int i = 0; i < n; ++i) { -                    in >> comm; -                    stringstream tcomm(comm); -                    int ex= 0; -                    while(getline(tcomm, comm, ':')) { -                        if(ex == 0) { -                            if(comm == "ins") -                                ex = 1; -                            else -                                ex = 2; -                        } else { -                            if(ex == 1) -                                b->insert(stoi(comm)); -                            else -                                b->remove(stoi(comm)); -                            ex = 0; -                        } -                    } -                } -                in >> k; -                cout << b << endl; -                out << b->sol(k) << endl; -  -                delete b; -                break; -            } -        } -    } - -    in.close(); -    out.close(); -    return 0; -} - diff --git a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex5.cpp b/I_anno/Programmazione_2/exercises/exam_20_07_20/ex5.cpp deleted file mode 100644 index dd8fc98..0000000 --- a/I_anno/Programmazione_2/exercises/exam_20_07_20/ex5.cpp +++ /dev/null @@ -1,285 +0,0 @@ -#include<iostream> -#include<vector> -#include<algorithm> -#include<queue> -#include<stack> -#include<fstream> -#define INF 99999999 -#define W -1 -#define G 0 -#define B 1 - -using namespace std; - -template<class H> -class graph { -public: -    graph(int len) : _len{len}, _nodes{0}, _edges{0} { -        _k = new H*[len]; -        _adj = new vector<int>[len]; -        _colors = new int[len]; -        _d = new int[len]; -        _f = new int[len]; -        _p = new int[len]; - -        for(int i = 0; i < len; ++i) { -            _k[i] = nullptr; -        } -    } -    ~graph() { -        delete[] _k; -        delete[] _adj; -    } - -    graph<H>* add_node(H x) { -        if(_index(x) > -1) return this; -        if(_nodes == _len) return this; -        _k[_nodes++] = new H(x); - -        return this; -    } -    graph<H>* add_edge(H u, H v) { -        int i = _index(u); -        int j = _index(v); -        if(i < 0 || j < 0) return this; - -        if(find(_adj[i].begin(), _adj[i].end(), j) == _adj[i].end()) { -            _adj[i].push_back(j); -        } -        return this; -    } -    void print() { -        for(int i = 0; i < _nodes; ++i) { -            cout << "(" << *_k[i] << ", " << i << "): "; -            for(auto const& j : _adj[i]) { -                cout << "(" << *_k[j] << ", " << j << ") "; -            } -            cout << endl; -        } -    } -    void dfsvisit(int u, bool visited[]) { -        visited[u] = true; -        cout << "(" << *_k[u] << ", " << u << ") "; -        for(auto const& i : _adj[u]) { -            if(!visited[i]) -                dfsvisit(i, visited); -        } -    } -    int dfsvisit(int u) { -        int cycle = 0; -        _colors[u] = G; -        _d[u] = _time++; - -        for(auto const& j : _adj[u]) { -            if(_colors[j] == W) -                cycle |= dfsvisit(j); -        } - -        _colors[u] = B; -        _stack.push(u); -        _f[u] = _time++; -        return cycle; -    } -    int dfs() { -        int cycle = 0; -        for(int i = 0; i < _nodes; ++i) { -            _colors[i] = W; -        } -        _time = 0; -        for(int i = 0; i < _nodes; ++i) { -            if(_colors[i] == W) -                cycle |= dfsvisit(i); -            else if(_colors[i] == G) -                cycle = 1; -        } -        for(int i = 0; i < _nodes; ++i) { -            cout << "(" << *_k[i] << ", " << i << "): [" << _d[i] << "," << _f[i] << "]" << endl; -        } -        return cycle; -    } - -    void top_sort() { -        int cycle = dfs(); -        if(cycle) { -            cout << "cyclic graph!" << endl; -            return; -        } -        int* s = new int[_nodes]; -        for(int i = 0; i < _nodes; ++i) s[i] = i; -        _sort(s, _nodes, _f); -        for(int i = 0; i < _nodes; ++i) { -            cout << "(" << s[i] << ", " << _f[s[i]] << ") "; -        } - -    } - -    void bfs(H v) { -        int s = _index(v); -        if(s < 0) return; - -        for(int i = 0; i < _nodes; ++i) { -            _colors[i] = W; -            _d[i] = INF; -            _p[i] = -1; -        } -        _colors[s] = G; -        _d[s] = 0; -        queue<int> q; -        q.push(s); -        while(!q.empty()) { -            int u = q.front(); -            q.pop(); -            for(auto const& j : _adj[u]) { -                if(_colors[j] == W) { -                    _colors[j] = G; -                    _d[j] = _d[u]+1; -                    _p[j] = u; -                    q.push(j); -                } -            } -            _colors[u] = B; -        } -        for(int i = 0; i < _nodes; ++i) { -            cout << "(" << *_k[i] << ", " << i << "): [" << _d[i] << "]" << endl; -        } -    } -    int ssc() { -        dfs(); -        cout << endl << endl; -        bool* visited = new bool[_nodes]; -        for(int i = 0; i < _nodes; ++i) -            visited[i] = false; -        int count = 0; -        while(!_stack.empty()) { -            int v = _stack.top(); -            _stack.pop(); -            if(!visited[v]) { -                dfsvisit(v, visited); -                count++; -                cout << endl; -            } -        } -        delete[] visited; -        return count; -    } -private: -    graph<H>* _transpose() { -        graph<H>* g = new graph<H>{_len}; -        for(int i = 0; i < _nodes; ++i) { -            g->add_node(*_k[i]); -        } - -        for(int i = 0; i < _nodes; ++i) { -            for(auto const& j : _adj[i]) { -                g->add_edge(j, i); -            } -        } - -        return g; -    } -    void _sort(int* d, int n, int* s) { -        for(int i = -1; i < n; ++i) { -            int j = i-1; -            while(j > -1 && s[d[j+1]]>s[d[j]]) { -                swap(d[s[j+1]], d[s[j]]); -                --j; -            } -        } -    } -    int _index(H x) { -        for(int i = 0; i < _nodes; ++i) -            if(*_k[i] == x) return i; - -        return -1; -    } -    stack<int> _stack; -    H** _k; -    vector<int>* _adj; -    int _len, _nodes, _edges; -    int* _colors; -    int _time; -    int* _d; -    int* _f; -    int* _p; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int n, e; -        in >> n>>e; -        string t; -        in >> t; -        char _t; -        switch(t.at(0)){ -            case 'd':{ -                graph<double>* g = new graph<double>{n}; -                double x, y; -                for(int i = 0; i < n; ++i) { -                    in >> x; -                    g->add_node(x); -                } -                for(int i = 0; i < e; ++i) { -                    in >>_t; -                    in >> x >> y; -                    in >> _t; -                    g->add_edge(x, y); -                    g->add_edge(y, x); -                } -                g->print(); -                cout << endl << endl; -                out << g->ssc()<<endl; -                delete g; -                break; -             } -            case 'i':{ - -                graph<int>* g = new graph<int>{n}; -                int x, y; -                for(int i = 0; i < n; ++i) { -                    in >> x; -                    g->add_node(x); -                } -                for(int i = 0; i < e; ++i) { -                    in >>_t; -                    in >> x >> y; -                    in >> _t; -                    g->add_edge(x, y); -                    g->add_edge(y, x); -                } -                g->print(); -                cout << endl << endl; -                out << g->ssc()<<endl; -                delete g; -                break; -                     } -            case 'c': { - -                graph<char>* g = new graph<char>{n}; -                char x, y; -                for(int i = 0; i < n; ++i) { -                    in >> x; -                    g->add_node(x); -                } -                for(int i = 0; i < e; ++i) { -                    in >>_t; -                    in >> x >> y; -                    in >> _t; -                    g->add_edge(x, y); -                    g->add_edge(y, x); -                } -                g->print(); -                cout << endl << endl; -                out << g->ssc()<<endl; -                delete g; -                break; -                      } -        } -    } -    in.close(); -    out.close(); -    return 0; -} - diff --git a/I_anno/Programmazione_2/exercises/inizia-con.cc b/I_anno/Programmazione_2/exercises/inizia-con.cc deleted file mode 100644 index 97f0c39..0000000 --- a/I_anno/Programmazione_2/exercises/inizia-con.cc +++ /dev/null @@ -1,33 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -string result(string s, char c) { -    if(s.at(0) == c) -        return s + ' '; - -    return ""; -} - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int _; -        string s; -        char c; -        in >> c; -        for(int i = 0; i < 3; ++i) { -            in >> _ >> s; -            out << result(s, c); -        } -        out << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/inserimento-coda.cc b/I_anno/Programmazione_2/exercises/inserimento-coda.cc deleted file mode 100644 index 6775ca2..0000000 --- a/I_anno/Programmazione_2/exercises/inserimento-coda.cc +++ /dev/null @@ -1,119 +0,0 @@ -#include<iostream> -#include<fstream> - -using namespace std; - -template<class T> -class node { -public: -    node(T key, node<T>* next) : _key{key}, _next{next} {} -    node(T key) : _key{key}, _next{nullptr} {} -    const T& key() const { return _key; } -    T& key() { return _key; } -    const node<T>*& next() const { return _next; } -    node<T>*& next() { return _next; } -private: -    T _key; -    node<T>* _next; -}; - -template<class T> -class Coda { -public: -    Coda() : _head{nullptr}, _tail{nullptr} {} -    ~Coda() { - -    } -    Coda<T>* enqueue(T val) { -        if(!_head) { -            _head = new node<T>{val, nullptr}; -            _tail = _head; -        } else { -            _tail->next() = new node<T>{val, nullptr}; -            _tail = _tail->next(); -        } - -        return this; -    } -    node<T>* pop() { -        if(!_head) return nullptr; -        node<T>* elem = _head; -        delete _head; -        _head = elem->next(); - -        return elem; -    } - -    bool is_empty() { return _head == nullptr; } -private: -    node<T>* _head; -    node<T>* _tail; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string t; -        int n; -        in >> t; -        switch(t.at(0)) { -        case 'b': { -            Coda<bool>* queue = new Coda<bool>{}; -            in >> n; -            bool e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                queue->enqueue(e); -            } -            while(!queue->is_empty()) -                out << queue->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'd': { -            Coda<double>* queue = new Coda<double>{}; -            in >> n; -            double e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                queue->enqueue(e); -            } -            while(!queue->is_empty()) -                out << queue->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'c': { -            Coda<char>* queue = new Coda<char>{}; -            in >> n; -            char e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                queue->enqueue(e); -            } -            while(!queue->is_empty()) -                out << queue->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'i': { -            Coda<int>* queue = new Coda<int>{}; -            in >> n; -            int e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                queue->enqueue(e); -            } -            while(!queue->is_empty()) -                out << queue->pop()->key() << ' '; -            out << endl; -            break; -        } -        } -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/inserimento-pila.cc b/I_anno/Programmazione_2/exercises/inserimento-pila.cc deleted file mode 100644 index 0dbe99b..0000000 --- a/I_anno/Programmazione_2/exercises/inserimento-pila.cc +++ /dev/null @@ -1,116 +0,0 @@ -#include<iostream> -#include<fstream> - -using namespace std; - -template<class T> -class node { -public: -    node(T key, node<T>* next) : _key{key}, _next{next} {} -    node(T key) : _key{key}, _next{nullptr} {} -    const T& key() const { return _key; } -    T& key() { return _key; } -    const node<T>*& next() const { return _next; } -    node<T>*& next() { return _next; } -private: -    T _key; -    node<T>* _next; -}; - -template<class T> -class Pila { -public: -    Pila() : _head{nullptr}{} -    ~Pila() { - -    } -    Pila<T>* push(T val) { -        if(!_head) { -            _head = new node<T>{val, nullptr}; -        } else { -            _head = new node<T>{val, _head}; -        } - -        return this; -    } -    node<T>* pop() { -        if(!_head) return nullptr; -        node<T>* elem = _head; -        delete _head; -        _head = elem->next(); - -        return elem; -    } - -    bool is_empty() { return _head == nullptr; } -private: -    node<T>* _head; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string t; -        int n; -        in >> t; -        switch(t.at(0)) { -        case 'b': { -            Pila<bool>* stack = new Pila<bool>{}; -            in >> n; -            bool e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                stack->push(e); -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'd': { -            Pila<double>* stack = new Pila<double>{}; -            in >> n; -            double e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                stack->push(e); -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'c': { -            Pila<char>* stack = new Pila<char>{}; -            in >> n; -            char e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                stack->push(e); -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'i': { -            Pila<int>* stack = new Pila<int>{}; -            in >> n; -            int e; -            for(int i = 0; i < n; ++i) { -                in >> e; -                stack->push(e); -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        } -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/matrice-adj.cc b/I_anno/Programmazione_2/exercises/matrice-adj.cc deleted file mode 100644 index 7830f97..0000000 --- a/I_anno/Programmazione_2/exercises/matrice-adj.cc +++ /dev/null @@ -1,151 +0,0 @@ -#include<iostream> -#include<vector> -#include<fstream> -#include<sstream> - -using namespace std; - -template<class H> -class matrix_graph { -public: -    ~matrix_graph() { -        delete[] _m; -        delete[] _k; -    } -    matrix_graph(int len) : _len{len}, _nodes{0}, _edges{0} { -        _m = new int*[len]; -        _k = new H*[len]; -        for(int i = 0; i < len; ++i) { -            _m[i] = new int[len]; -            _k[i] = nullptr; -            for(int j = 0; j < len; ++j) -                _m[i][j] = 0; -        } -    } - -    matrix_graph<H>* add_node(H k) { -        if(_len == _nodes) return this; // no more space for new nodes -        if(_index(k) > -1) return this; // nodes already exists - -        _k[_nodes++] = new H(k); - -        return this; -    } - -    matrix_graph<H>* add_edge(H x, H y) { -        int i = _index(x); -        int j = _index(y); -        if(i < 0 || j < 0) return this; -        if(!_m[i][j]) { -            _m[i][j] = 1; -            _edges++; -        } -        return this; -    } -    vector<vector<H>> print() { -        vector<vector<H>> v; -        for(int i = 0; i < _len; ++i) { -            v.push_back(vector<H>{*_k[i]}); -            vector<H> temp; -            for(int j = 0; j < _len; ++j) { -                if(_m[i][j]) { -                    temp.push_back(*_k[j]); -                } -            } -            sort(begin(temp), end(temp)); -            for(auto const& j : temp) -                v[i].push_back(j); -        } - -        sort(begin(v), end(v)); -        return v; -    } -private: -    int _len, _nodes, _edges; -    int** _m; -    H** _k; -    int _index(H x) { -        for(int i = 0; i < _nodes; ++i) -            if(*_k[i] == x) return i; -        return -1; -    } -}; - -template<class H> -string result(vector<vector<H>> v) { -    string s{""}; -    ostringstream ss; -    for(auto const& i : v) { -        s += "("; -        for(auto const& j : i) { -            ss << j; -            s+= ss.str(); -            s+= ' '; -            ss.str(""); ss.clear(); -        } -        s.pop_back(); -        s += ") "; -    } -    return s; -} - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); -    for(int ts = 0; ts < 100; ++ts) { -        int n, m; -        in >> n >> m; -        string t; -        in >> t; -        if(t == "int") { -            matrix_graph<int>* g = new matrix_graph<int>(n); -            int x,y; -            for(int i = 0; i < n; ++i) { -               in >> x; -               g->add_node(x); -            } -            char ex; -            for(int i = 0; i < m; ++i) { -                in >> ex >> x >> y >> ex; -                g->add_edge(x, y); -            } -            auto v = g->print(); -            out << result(v) << endl; -            delete g; -        } else if(t == "double") { -            matrix_graph<double>* g = new matrix_graph<double>(n); -            double x,y; -            for(int i = 0; i < n; ++i) { -               in >> x; -               g->add_node(x); -            } -            char ex; -            for(int i = 0; i < m; ++i) { -                in >> ex >> x >> y >> ex; -                g->add_edge(x, y); -            } -            auto v = g->print(); -            out << result(v) << endl; -            delete g; -        } else { -            matrix_graph<char>* g = new matrix_graph<char>(n); -            char x,y; -            for(int i = 0; i < n; ++i) { -               in >> x; -               g->add_node(x); -            } -            char ex; -            for(int i = 0; i < m; ++i) { -                in >> ex >> x >> y >> ex; -                g->add_edge(x, y); -            } - -            auto v = g->print(); -            out << result(v) << endl; -            delete g; -        } -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/minore.cc b/I_anno/Programmazione_2/exercises/minore.cc deleted file mode 100644 index 677da76..0000000 --- a/I_anno/Programmazione_2/exercises/minore.cc +++ /dev/null @@ -1,27 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string s; -        in >> s; -        int minor = stoi(s); -        for(in >> s; s != "STOP"; in >> s) { -            int si = stoi(s); -            if(si < minor) -                minor = si; -        } - -        out << minor << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/pop-stack.cc b/I_anno/Programmazione_2/exercises/pop-stack.cc deleted file mode 100644 index 3739450..0000000 --- a/I_anno/Programmazione_2/exercises/pop-stack.cc +++ /dev/null @@ -1,132 +0,0 @@ -#include<iostream> -#include<fstream> - -using namespace std; - -template<class T> -class node { -public: -    node(T key, node<T>* next) : _key{key}, _next{next} {} -    node(T key) : _key{key}, _next{nullptr} {} -    const T& key() const { return _key; } -    T& key() { return _key; } -    const node<T>*& next() const { return _next; } -    node<T>*& next() { return _next; } -private: -    T _key; -    node<T>* _next; -}; - -template<class T> -class Pila { -public: -    Pila() : _head{nullptr}{} -    ~Pila() { - -    } -    Pila<T>* push(T val) { -        if(!_head) { -            _head = new node<T>{val, nullptr}; -        } else { -            _head = new node<T>{val, _head}; -        } - -        return this; -    } -    node<T>* pop() { -        if(!_head) return nullptr; -        node<T>* elem = _head; -        delete _head; -        _head = elem->next(); - -        return elem; -    } - -    bool is_empty() { return _head == nullptr; } -private: -    node<T>* _head; -}; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string t; -        int n; -        in >> t; -        switch(t.at(0)) { -        case 'b': { -            Pila<bool>* stack = new Pila<bool>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    stack->push(s.at(1) - '0'); -                } else { -                    stack->pop(); -                } -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'd': { -            Pila<double>* stack = new Pila<double>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    stack->push(stod(s.substr(1, s.length()-1))); -                } else { -                    stack->pop(); -                } -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'c': { -            Pila<char>* stack = new Pila<char>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    stack->push(s.at(1)); -                } else { -                    stack->pop(); -                } -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        case 'i': { -            Pila<int>* stack = new Pila<int>{}; -            in >> n; -            string s; -            for(int i = 0; i < n; ++i) { -                in >> s; -                if(s.at(0) == 'i') { -                    stack->push(stoi(s.substr(1, s.length()-1))); -                } else { -                    stack->pop(); -                } -            } -            while(!stack->is_empty()) -                out << stack->pop()->key() << ' '; -            out << endl; -            break; -        } -        } -    } -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/prima-maiuscola.cc b/I_anno/Programmazione_2/exercises/prima-maiuscola.cc deleted file mode 100644 index 6273219..0000000 --- a/I_anno/Programmazione_2/exercises/prima-maiuscola.cc +++ /dev/null @@ -1,30 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -string result(string s) { -    s.at(0) = toupper(s.at(0)); - -    return s; -} - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int _; -        string s; -        for(int i = 0; i < 3; ++i) { -            in >> _ >> s; -            out << result(s) << ' '; -        } -        out << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/ripetute.cc b/I_anno/Programmazione_2/exercises/ripetute.cc deleted file mode 100644 index 23d151a..0000000 --- a/I_anno/Programmazione_2/exercises/ripetute.cc +++ /dev/null @@ -1,20 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string s; -        in >> s; -        out << s+s << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/sol-ripetute.cc b/I_anno/Programmazione_2/exercises/sol-ripetute.cc deleted file mode 100644 index 1518d76..0000000 --- a/I_anno/Programmazione_2/exercises/sol-ripetute.cc +++ /dev/null @@ -1,25 +0,0 @@ -#include<iostream> -#include<string> -#include<fstream> - -using namespace std; - -string result(string s) { -    int half = s.length()/2; -    return s.substr(0, half); -} - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        string s; -        in >> s; -        out << result(s) << '\n'; -    } - -    in.close(); -    out.close(); -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/sottosequenza.cc b/I_anno/Programmazione_2/exercises/sottosequenza.cc deleted file mode 100644 index 1d7c481..0000000 --- a/I_anno/Programmazione_2/exercises/sottosequenza.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include<iostream> -#include<fstream> - -using namespace std; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int n; string s; -        in >> n >> s; -        string tm; -        for(int i = 0; i < n; ++i) { -            in >> tm; -            if(tm.find(s) != string::npos) -                out << tm << ' '; -        } -        out << '\n'; -    } - -    in.close(); -    out.close(); - -    return 0; -} diff --git a/I_anno/Programmazione_2/exercises/stringa-inversa.cc b/I_anno/Programmazione_2/exercises/stringa-inversa.cc deleted file mode 100644 index 5c37718..0000000 --- a/I_anno/Programmazione_2/exercises/stringa-inversa.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include<iostream> -#include<fstream> - -using namespace std; - -int main() { -    ifstream in("input.txt"); -    ofstream out("output.txt"); - -    for(int ts = 0; ts < 100; ++ts) { -        int n; -        in >> n; -        for(int i = 0; i < 3; ++i) { -            string s; -            in >> s; -            for(int j = s.length()-1; j > -1; --j) { -                out << s.at(j); -            } -            out << ' '; -        } -        out << endl; -    } - -    out.close(); -    in.close(); -}  |