MaxObznyi

Untitled

Jul 15th, 2022
761
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3. #include <chrono>
  4. using namespace std;
  5.  
  6. const int I = 5, J = 8, K = 7;
  7. mt19937 gen;
  8. const int CNT_TRIES = 1000000;
  9. const int CNT_STEPS = 1000;
  10.  
  11.  
  12. int getRandom(int mx) {
  13.     return gen() % mx;
  14. }
  15.  
  16. enum State{
  17.     Left,
  18.     Right,
  19.     Both,
  20.     River,
  21.     Spears
  22. };
  23.  
  24. State makeMoveLeft() {
  25.     if (getRandom(I + J) < J)
  26.         return State::Both;
  27.     else
  28.         return State::River;
  29. }
  30.  
  31.  
  32. State makeMoveRight() {
  33.     if (getRandom(J + K) < J)
  34.         return State::Both;
  35.     else
  36.         return State::Spears;
  37. }
  38.  
  39.  
  40. State makeMoveBoth() {
  41.     int res = getRandom(I + J + K);
  42.     if (res < I)
  43.         return State::Left;
  44.     else if (res < I + J)
  45.         return State::Both;
  46.     else
  47.         return State::Right;
  48. }
  49.  
  50. State makeMove(State current) {
  51.     switch (current) {
  52.     case State::Left:
  53.         return makeMoveLeft();
  54.     case State::Right:
  55.         return makeMoveRight();
  56.     case State::Both:
  57.         return makeMoveBoth();
  58.     case State::River:
  59.         return State::River;
  60.     case State::Spears:
  61.         return State::Spears;
  62.     }
  63. }
  64.  
  65. State makeTry() {
  66.     State current = State::Left;
  67.     for (int i = 0; i < CNT_STEPS && current != State::River && current != State::Spears; i++)
  68.         current = makeMove(current);
  69.     return current;
  70. }
  71.  
  72. void makeTries() {
  73.     int river = 0, spears = 0, other = 0;
  74.     for (int i = 0; i < CNT_TRIES; i++) {
  75.         State current = makeTry();
  76.         if (current == State::River)
  77.             river++;
  78.         else if (current == State::Spears)
  79.             spears++;
  80.         else
  81.             other++;
  82.     }
  83.     printf("River: %d\nSpears: %d\nOther: %d\n", river, spears, other);
  84.     printf("Probability of falling into the river: %f\nProbability of falling into spears: %f\n", river * 1.0 / CNT_TRIES, spears * 1.0 / CNT_TRIES);
  85. }
  86.  
  87. int main()
  88. {
  89.     gen.seed(time(0));
  90.     makeTries();
  91.     return 0;
  92. }
  93.  
Advertisement
Add Comment
Please, Sign In to add comment