Advertisement
Guest User

MontyHall

a guest
Feb 20th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.14 KB | None | 0 0
  1. using System;
  2. using System.Security.Cryptography;
  3.  
  4. public class Program
  5. {
  6.     static int GetRandomNumber(byte max){
  7.         //random generation
  8.         byte[] buffer = new byte[1];
  9.         RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
  10.         rng.GetBytes(buffer);
  11.        
  12.         return buffer[0]%max;
  13.     }
  14.     static bool[] InitGame(ref int boxIndex,  ref int toBeRemovedBox, ref int playerChoice){
  15.  
  16.         //init the random variables
  17.         boxIndex = GetRandomNumber(3);
  18.         toBeRemovedBox = GetRandomNumber(2);
  19.         playerChoice = GetRandomNumber(3);
  20.        
  21.         //game init
  22.         bool[] boxes = new bool[3];
  23.         for(int i = 0; i < 3; i++)
  24.         {
  25.             boxes[i] = false;
  26.         }
  27.         boxes[boxIndex] = true;
  28.        
  29.         return boxes;
  30.     }
  31.    
  32.     static bool NotChanging(){
  33.        
  34.         int boxIndex = -1,
  35.             toBeRemovedBox = -1,
  36.             playerChoice = -1;
  37.         bool[] boxes = InitGame(ref boxIndex, ref toBeRemovedBox, ref playerChoice);
  38.        
  39.         return boxes[playerChoice];
  40.     }
  41.    
  42.     static bool ChangingEveryTime(){
  43.        
  44.         int boxIndex = -1,
  45.             toBeRemovedBox = -1,
  46.             playerChoice = -1;
  47.         bool[] boxes = InitGame(ref boxIndex, ref toBeRemovedBox, ref playerChoice);
  48.        
  49.         return !boxes[playerChoice];
  50.        
  51.     }
  52.     static bool OnlyChoosingSecondTime(){
  53.         int boxIndex = -1,
  54.             toBeRemovedBox = -1,
  55.             playerChoice = -1;
  56.         bool[] boxes = InitGame(ref boxIndex, ref toBeRemovedBox, ref playerChoice);
  57.        
  58.         bool[] secondTurnBoxes = new bool[2];
  59.         for(int i = 0, counter = 0; i < 3; i++){
  60.             if(i == toBeRemovedBox) continue;
  61.             secondTurnBoxes[counter++] = boxes[i];
  62.         }
  63.        
  64.         int secondChoice = GetRandomNumber(2);
  65.         return secondTurnBoxes[secondChoice];
  66.     }
  67.     public static void Main()
  68.     {
  69.         int noChange = 0,
  70.             alwaysChange = 0,
  71.             rechoose = 0;
  72.         int numberOfGames= 10000;
  73.         for(int i = 0; i < numberOfGames; i++){
  74.             if(NotChanging()) noChange++;
  75.             if(ChangingEveryTime()) alwaysChange++;
  76.             if(OnlyChoosingSecondTime()) rechoose++;
  77.         }
  78.         Console.WriteLine("nc: " + noChange.ToString() + " /"+ numberOfGames.ToString() );
  79.         Console.WriteLine("cet: "+ alwaysChange.ToString()+ " /"+ numberOfGames.ToString());
  80.         Console.WriteLine("ocst: "+ rechoose.ToString()+ " /"+ numberOfGames.ToString());
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement