Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package mor_sylvanmessenger;
- import java.util.Random;
- public class MOR_SylvanMessenger {
- public static void main(String[] args) {
- int NrSims=10000000;
- //CardType1=Empath
- //CardType2=Other Elf
- //CardType3=Non-Elf, Non-Land
- //CardType4=Land
- //CardType5=N/A
- //CardType6=N/A
- for (int NrOtherElves=20; NrOtherElves<=34; NrOtherElves++){
- int[] NrFlipsWithXElves= new int[5];
- Deck deck=new Deck();
- deck.SetDeck(4, NrOtherElves, 34-NrOtherElves, 22, 0, 0);
- for (int i=1; i<=NrSims; i++){
- int Outcome=Simulate(deck);
- for (int NrElves=0; NrElves<=4; NrElves++){
- if (Outcome==NrElves) {NrFlipsWithXElves[NrElves]++;}
- }
- }
- double EV=0;
- System.out.println("-----The results for a deck with "+NrOtherElves+" other Elves-----");
- for (int NrElves=0; NrElves<=4; NrElves++){
- System.out.println("P["+NrElves+" Elves]= "+NrFlipsWithXElves[NrElves]/(NrSims+0.0));
- EV=EV+NrElves*NrFlipsWithXElves[NrElves]/(NrSims+0.0);
- }
- System.out.println("EV="+EV);
- System.out.println();
- }
- }
- static int Simulate(Deck deck) {
- int TypeOfCardDrawn=0;
- Random generator = new Random();
- int NrLands=0;
- int NrEmpaths=0;
- Deck remainingdeck=new Deck();
- remainingdeck.SetDeck(deck.NrCardType1, deck.NrCardType2, deck.NrCardType3, deck.NrCardType4, 0, 0);
- for (int i=1; i<=10; i++){
- TypeOfCardDrawn=remainingdeck.DrawCard(generator);
- if (TypeOfCardDrawn==1) {NrEmpaths++;}
- if (TypeOfCardDrawn==4) {NrLands++;}
- }
- int NrCardsDrawn=10;
- boolean WeCanCastEmpath=false;
- if (NrEmpaths>=1 && NrLands>=4) {WeCanCastEmpath=true;}
- if (!WeCanCastEmpath){
- do {
- TypeOfCardDrawn=remainingdeck.DrawCard(generator);
- NrCardsDrawn++;
- if (TypeOfCardDrawn==1) {NrEmpaths++;}
- if (TypeOfCardDrawn==4) {NrLands++;}
- if (NrEmpaths>=1 && NrLands>=4) {WeCanCastEmpath=true;}
- } while (!WeCanCastEmpath);
- }
- //We'll now cast Empath
- int NrElvesHit=0;
- for (int i=1; i<=Math.min(4, 60-NrCardsDrawn); i++) {
- TypeOfCardDrawn=remainingdeck.DrawCard(generator);
- if (TypeOfCardDrawn==1) {NrElvesHit++;}
- if (TypeOfCardDrawn==2) {NrElvesHit++;}
- }
- return NrElvesHit;
- }
- static class Deck {
- int NrCardType1;
- int NrCardType2;
- int NrCardType3;
- int NrCardType4;
- int NrCardType5;
- int NrCardType6;
- void SetDeck (int Nr1, int Nr2, int Nr3, int Nr4, int Nr5, int Nr6) {
- NrCardType1=Nr1;
- NrCardType2=Nr2;
- NrCardType3=Nr3;
- NrCardType4=Nr4;
- NrCardType5=Nr5;
- NrCardType6=Nr6;
- }
- int NrOfCards(){
- return NrCardType1+NrCardType2+NrCardType3+NrCardType4+NrCardType5+NrCardType6;
- }
- int DrawCard (Random generator){
- int RandomIntegerBetweenOneAndDeckSize=generator.nextInt( this.NrOfCards() )+1;
- int CardType=0;
- int OneCutoff=NrCardType1;
- int TwoCutoff=OneCutoff+NrCardType2;
- int ThreeCutoff=TwoCutoff+NrCardType3;
- int FourCutoff=ThreeCutoff+NrCardType4;
- int FiveCutoff=FourCutoff+NrCardType5;
- int SixCutoff=FiveCutoff+NrCardType6;
- if (RandomIntegerBetweenOneAndDeckSize<=OneCutoff) {CardType=1; this.NrCardType1--;}
- if (RandomIntegerBetweenOneAndDeckSize>OneCutoff && RandomIntegerBetweenOneAndDeckSize<=TwoCutoff) {CardType=2; this.NrCardType2--;}
- if (RandomIntegerBetweenOneAndDeckSize>TwoCutoff && RandomIntegerBetweenOneAndDeckSize<=ThreeCutoff) {CardType=3; this.NrCardType3--;}
- if (RandomIntegerBetweenOneAndDeckSize>ThreeCutoff && RandomIntegerBetweenOneAndDeckSize<=FourCutoff) {CardType=4; this.NrCardType4--;}
- if (RandomIntegerBetweenOneAndDeckSize>FourCutoff && RandomIntegerBetweenOneAndDeckSize<=FiveCutoff) {CardType=5; this.NrCardType5--;}
- if (RandomIntegerBetweenOneAndDeckSize>FiveCutoff) {CardType=6; this.NrCardType6--;}
- return CardType;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement