Advertisement
andreisophie

FF14 AST Cards Simulator

Sep 25th, 2019
464
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. /*
  2. This is a simulator that simulates card Draws/Redraws for lv 80 astrologian opener
  3. It consists of 5 Draws (2 normal and 3 from Sleeve Draw) and 3 Redraws
  4. It uses the optimal strategy of playing the card you're holding if you don't already have its seal
  5. or redrawing if you have the seal and Redraw stacks
  6. It doesn't account for Lord/Ladies since they don't influence seals
  7. For now it doesn't account Melee/Ranged composition either, will possibly update later
  8.  
  9. My results:
  10. Sample size: 10000000
  11. 1 seal:  0.0103%
  12. 2 seals: 8.52441%
  13. 3 seals: 91.4653%
  14.  
  15. To use just select the sample size (100000 by default)
  16. and wether you want to print the results to console or file
  17. File will be named "cards.out"
  18. !!! Absurdly large sample sizes may not work correctly due to overflow !!!
  19. */
  20.  
  21. #define sample_size 100000
  22. #define write_to_file true
  23.  
  24. //Copyright Sirk'al Alis @ Shiva of Wololo wipefest
  25.  
  26. //Code below this line, DON'T EDIT!!!
  27.  
  28. #include <iostream>
  29. #include <fstream>
  30. #include <stdlib.h>
  31. #include <time.h>
  32.  
  33. using namespace std;
  34.  
  35. unsigned long long int results[4]={0};
  36.  
  37. int draw()
  38. {
  39.     int card;
  40.     card=rand()%6;
  41.     return card;
  42. }
  43.  
  44. int redraw(int icard)
  45. {
  46.     int card;
  47.     card=rand()%5;
  48.     if (card<icard)
  49.         return card;
  50.     else
  51.         return card+1;
  52. }
  53.  
  54. int sim()
  55. {
  56.     bool seals[3]={0};
  57.     int card,seal,stacks=3;
  58.     for (int i=1;i<=5;i++)
  59.     {
  60.         card=draw();
  61.         seal=card/2;
  62.         if (seals[seal]==false)
  63.             seals[seal]=true;
  64.         else
  65.             while (stacks)
  66.             {
  67.                 stacks--;
  68.                 card=redraw(card);
  69.                 seal=card/2;
  70.                 if (seals[seal]==false)
  71.                 {
  72.                     seals[seal]=true;
  73.                     break;
  74.                 }
  75.             }
  76.     }
  77.     int p=0;
  78.     for (int i=0;i<3;i++)
  79.         if (seals[i])
  80.             p++;
  81.     return p;
  82. }
  83.  
  84. void printf()
  85. {
  86.     ofstream g("cards.out");
  87.     g<<"Sample size: "<<sample_size<<'\n';
  88.     g<<"1 seal:  "<<100*results[1]/(float)sample_size<<"%\n";
  89.     g<<"2 seals: "<<100*results[2]/(float)sample_size<<"%\n";
  90.     g<<"3 seals: "<<100*results[3]/(float)sample_size<<"%\n";
  91. }
  92.  
  93. void printc()
  94. {
  95.     cout<<"Sample size: "<<sample_size<<'\n';
  96.     cout<<"1 seal:  "<<100*results[1]/(float)sample_size<<"%\n";
  97.     cout<<"2 seals: "<<100*results[2]/(float)sample_size<<"%\n";
  98.     cout<<"3 seals: "<<100*results[3]/(float)sample_size<<"%\n";
  99. }
  100.  
  101. void simulation()
  102. {
  103.     int rez;
  104.     for(unsigned long long int i=1;i<=sample_size;i++)
  105.     {
  106.         rez=sim();
  107.         results[rez]++;
  108.     }
  109.     if (write_to_file)
  110.         printf();
  111.     else
  112.         printc();
  113. }
  114.  
  115. int main()
  116. {
  117.     srand(time(NULL));
  118.     simulation();
  119.     return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement