Advertisement
ToastyStoemp

ShuttleAIV0.1

Mar 18th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4.  
  5. void Print(const std::string & pallet)
  6. {
  7.     for (int i = 0; i < pallet.length(); ++i)
  8.     {
  9.         std::cout << pallet[i] << " ";
  10.     }
  11.     std::cout << std::endl;
  12. }
  13.  
  14. std::string CreatePallet(const int & size)
  15. {
  16.     std::string pallet = " ";
  17.     for (int i = 0; i < size; ++i)
  18.     {
  19.         pallet.insert(0, "B");
  20.         pallet.push_back('W');
  21.     }
  22.     return pallet;
  23. }
  24.  
  25. bool CheckState(std::string pallet, const std::string & originalPallet)
  26. {
  27.     std::reverse(pallet.begin(), pallet.end());
  28.     return (pallet == originalPallet);
  29. }
  30.  
  31. bool Jump(const std::string & pallet, const std::string & originalPallet);
  32.  
  33. bool Move(const std::string & pallet, const std::string & originalPallet)
  34. {
  35.     if (CheckState(pallet, originalPallet))
  36.     {
  37.         Print(pallet);
  38.         return true;
  39.     }
  40.  
  41.     std::string newPallet = pallet;
  42.  
  43.     for (int i = 0; i < newPallet.length(); ++i)
  44.     {
  45.         if (newPallet[i] == ' ')
  46.         {
  47.             if (i - 1 > 0)
  48.             {
  49.                 newPallet[i] = newPallet[i - 1];
  50.                 newPallet[i - 1] = ' ';
  51.                 if (Jump(newPallet, originalPallet))
  52.                     return true;
  53.                 else if (Move(newPallet, originalPallet))
  54.                     return true;
  55.             }
  56.             if (i + 1 < newPallet.length())
  57.             {
  58.                 newPallet[i] = newPallet[i + 1];
  59.                 newPallet[i + 1] = ' ';
  60.                 if (Jump(newPallet, originalPallet))
  61.                     return true;
  62.                 else if (Move(newPallet, originalPallet))
  63.                     return true;
  64.             }
  65.         }
  66.     }
  67. }
  68.  
  69. bool Jump(const std::string & pallet, const std::string & originalPallet)
  70. {
  71.     if (CheckState(pallet, originalPallet))
  72.     {
  73.         Print(pallet);
  74.         return true;
  75.     }
  76.  
  77.     std::string newPallet = pallet;
  78.  
  79.     for (int i = 0; i < newPallet.length(); ++i)
  80.     {
  81.         if (newPallet[i] == ' ')
  82.         {
  83.             if (i - 2 > 0)
  84.             {
  85.                 newPallet[i] = newPallet[i - 2];
  86.                 newPallet[i - 2] = ' ';
  87.                 if (Move(newPallet, originalPallet))
  88.                     return true;
  89.                 else if (Jump(newPallet, originalPallet))
  90.                     return true;
  91.             }
  92.             if (i + 2 < newPallet.length())
  93.             {
  94.                 newPallet[i] = newPallet[i + 2];
  95.                 newPallet[i + 2] = ' ';
  96.                 if (Move(newPallet, originalPallet))
  97.                     return true;
  98.                 else if (Jump(newPallet, originalPallet))
  99.                     return true;
  100.             }
  101.         }
  102.     }
  103. }
  104.  
  105.  
  106. int main()
  107. {
  108.     std::cout << "Enter size of each player ";
  109.     int size;
  110.     std::cin >> size;
  111.     std::string pallet = CreatePallet(size);
  112.  
  113.     Print(pallet);
  114.  
  115.     std::cin.get();
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement