Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * Solution to homework assignment 2
- * Introduction to programming course
- * Faculty of Mathematics and Informatics of Sofia University
- * Winter semester 2021/2022
- *
- * @author Kaloyan Kateliev
- * @idnumber 8MI0600049
- * @task 4
- * @compiler VC
- *
- */
- #include <iostream>
- #include <vector>
- using namespace std;
- int getVectorElement(vector<int> vector, int index) {
- if (index < vector.size()) {
- return vector[index];
- }
- return -1;
- }
- void fillVector(vector<int> &numArray, int number) {
- while (number > 0) {
- int tempNumber = number % 10;
- numArray.insert(numArray.begin(),tempNumber);
- number /= 10;
- }
- }
- int indexOf(vector<int> numArray, int number) {
- int result = -1;
- for (int i = 0; i < numArray.size(); i++) {
- if (numArray[i] == number) {
- return i;
- }
- }
- return -1;
- }
- int countMatchingNumbers(vector<int>& numberArray, int number) {
- int counter = 0;
- for (int i = 0; i < numberArray.size(); i++) {
- if (numberArray[i] == number) {
- counter++;
- }
- }
- return counter;
- }
- int checkForNoMatchingNumbers(vector<int>& numberAArray, vector<int> numberBArray) {
- int lastElement = getVectorElement(numberAArray, numberAArray.size() - 1);
- int numberDoesntExsist = indexOf(numberBArray, lastElement);
- if (numberDoesntExsist == -1) {
- return numberDoesntExsist;
- }
- else {
- int counterA = countMatchingNumbers(numberAArray, lastElement);
- int counterB = countMatchingNumbers(numberBArray, lastElement);
- if (counterA > counterB) {
- return -1;
- }
- return 0;
- }
- }
- int removeLastElementIfNoMatch(vector<int> &numberAArray, vector<int> numberBArray, int moves) {
- while (numberAArray.size() && checkForNoMatchingNumbers(numberAArray, numberBArray) == -1) {
- moves++;
- numberAArray.pop_back();
- }
- return moves;
- }
- int findIndex(vector<int>& numberAArray, vector<int> numberBArray, int currentNumber, int startPosition) {
- for (int i = startPosition; i < numberAArray.size(); i++) {
- if (getVectorElement(numberAArray, i) == currentNumber) {
- if (getVectorElement(numberBArray, i) != getVectorElement(numberAArray, i)) {
- return i;
- }
- }
- }
- return -1;
- }
- void swapPositions(vector<int>& numberAArray, int foundIndex, int currentIndex) {
- int currentValue = numberAArray[currentIndex];
- numberAArray[currentIndex] = numberAArray[foundIndex];
- numberAArray[foundIndex] = currentValue;
- }
- int countAddNumbersMoves(vector<int>& numberAArray, vector<int>& numberBArray, int currentNumber, int currentIndex, int moves) {
- numberAArray.push_back(currentNumber);
- moves++;
- if (numberBArray.size() < currentIndex && numberAArray[currentIndex] != numberBArray[currentIndex]) {
- swapPositions(numberAArray, numberAArray.size() - 1, currentIndex);
- moves++;
- }
- return moves;
- }
- int main() {
- vector<int> numberAArray;
- vector<int> numberBArray;
- int moves = 0;
- int numberA, numberB;
- cin >> numberA >> numberB;
- fillVector(numberAArray, numberA);
- fillVector(numberBArray, numberB);
- for (int i = 0; i < numberBArray.size(); i++) {
- int currentElement = numberBArray[i];
- moves = removeLastElementIfNoMatch(numberAArray, numberBArray, moves);
- while (getVectorElement(numberBArray, i) != getVectorElement(numberAArray, i)) {
- int foundIndex = findIndex(numberAArray, numberBArray, currentElement, i);
- if (foundIndex > -1) {
- moves ++;
- swapPositions(numberAArray, foundIndex, i);
- }
- else {
- moves = countAddNumbersMoves(numberAArray, numberBArray, currentElement, i, moves);
- }
- moves = removeLastElementIfNoMatch(numberAArray, numberBArray, moves);
- }
- }
- cout << moves;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement