89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <algorithm>
|
|
int main(int argc, char* argv[]){
|
|
std::cout<<"paste input followed by a ; IGNORE THE NUMBER LINE!!\n";
|
|
std::vector<std::vector<char>> stack = {{}};
|
|
std::vector<std::vector<int>> moves;
|
|
int step = 0;
|
|
std::string line = "";
|
|
while(getline(std::cin, line)){
|
|
if(line==";")
|
|
break;
|
|
|
|
if(line==""&&step==0){
|
|
step=1;
|
|
|
|
}
|
|
if(step==0){
|
|
//parsing initial boxes
|
|
for(int i = 0;i<=line.size();i+=4){
|
|
if(line[i+1]!=' '){
|
|
while(i/4>=stack.size()){
|
|
stack.push_back({});
|
|
|
|
}
|
|
stack[i/4].push_back(line[i+1]);
|
|
}
|
|
}
|
|
} else {
|
|
//command mode
|
|
if(line[0]!=' '){ //ignore the number line
|
|
std::string s1 = "";
|
|
int index = 0;
|
|
//moves.push_back({0,0,0});
|
|
std::vector<int> temp = {0,0,0};
|
|
std::vector<int> bu = temp;
|
|
for(int i = 0; i<=line.size();i++){
|
|
if(line[i]==' '){
|
|
|
|
for(int z = i+1; z!=line.size();z++){
|
|
if(line[z]==' ')
|
|
break;
|
|
s1+=line[z];
|
|
}
|
|
|
|
for(int z = 0; z!=temp.size();z++){
|
|
if(temp[z]==0){
|
|
temp[z]=stoi(s1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
i+=s1.size()+1;
|
|
s1 = "";
|
|
}
|
|
}
|
|
if(temp!=bu )
|
|
moves.push_back(temp);
|
|
}
|
|
//std::cout<<s1;
|
|
|
|
}
|
|
|
|
}
|
|
std::vector<std::vector<char>> p2_stack = stack;
|
|
for(int i = 0;i!=moves.size();i++){
|
|
//for(int z = 0; z!=moves[i].size();z++){
|
|
//std::cout<<stack[moves[i][1]-1][0];
|
|
for(int z = 0;z!=moves[i][0];z++){
|
|
stack[moves[i][2]-1].insert(stack[moves[i][2]-1].begin(),stack[moves[i][1]-1][0]);
|
|
stack[moves[i][1]-1].erase(stack[moves[i][1]-1].begin());
|
|
}
|
|
for(int z = moves[i][0]-1;z>=0;z--){
|
|
p2_stack[moves[i][2]-1].insert(p2_stack[moves[i][2]-1].begin(),p2_stack[moves[i][1]-1][z]);
|
|
p2_stack[moves[i][1]-1].erase(p2_stack[moves[i][1]-1].begin()+z);
|
|
}
|
|
//}
|
|
|
|
}
|
|
//std::cout<<moves.size();
|
|
std::cout<<"part 1 :";
|
|
for(int i = 0; i!=stack.size();i++)
|
|
std::cout<<stack[i][0];
|
|
std::cout<<std::endl<<"part 2 :";
|
|
for(int i = 0; i!=p2_stack.size();i++)
|
|
std::cout<<p2_stack[i][0];
|
|
return 0;
|
|
} |