From 92dfd9abde40972ab5a7d449c37e6a3478336fcf Mon Sep 17 00:00:00 2001 From: Quatrani Paul Date: Sun, 21 Nov 2021 15:25:53 -0500 Subject: [PATCH 1/2] added dice class and tests --- pom.xml | 12 ++++++++++++ src/main/java/Dice.java | 28 ++++++++++++++++++++++++++++ src/test/java/BinsTest.java | 2 ++ src/test/java/DiceTest.java | 19 +++++++++++++++++++ src/test/java/SimulationTest.java | 2 ++ 5 files changed, 63 insertions(+) create mode 100644 src/test/java/BinsTest.java create mode 100644 src/test/java/DiceTest.java create mode 100644 src/test/java/SimulationTest.java diff --git a/pom.xml b/pom.xml index 7219542..107e8e9 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ com.zipcodewilmington Dicey-Lab 1.0-SNAPSHOT + + + junit + junit + RELEASE + test + + + + 8 + 8 + \ No newline at end of file diff --git a/src/main/java/Dice.java b/src/main/java/Dice.java index 2283c96..c488622 100644 --- a/src/main/java/Dice.java +++ b/src/main/java/Dice.java @@ -1,4 +1,32 @@ +import java.util.ArrayList; +import java.util.List; + public class Dice { + private static class Die{ + private int result; + private Die(){ + this.result =(int) (Math.random()*(6 - 1 + 1) + 1); + } + private int roll(){ + return (this.result = (int) (Math.random()*(6 - 1 + 1) + 1)); + } + } + private List dice = new ArrayList<>(); + public Dice(int numberOfDice){ + for (int i = 0; i < numberOfDice; i++) { + this.dice.add(new Die()); + } + } + public int tossAndSum(){ + int sum = 0; + for (int i = 0; i < dice.size(); i++) { + sum += this.dice.get(i).roll(); + } + return sum; + } + public List getDice(){ + return dice; + } } diff --git a/src/test/java/BinsTest.java b/src/test/java/BinsTest.java new file mode 100644 index 0000000..ba22eec --- /dev/null +++ b/src/test/java/BinsTest.java @@ -0,0 +1,2 @@ +public class BinsTest { +} diff --git a/src/test/java/DiceTest.java b/src/test/java/DiceTest.java new file mode 100644 index 0000000..93c63b9 --- /dev/null +++ b/src/test/java/DiceTest.java @@ -0,0 +1,19 @@ +import org.junit.Assert; +import org.junit.Test; + +public class DiceTest { + @Test + public void constructorTest(){ + //when + Dice dice = new Dice(2); + //then + Assert.assertEquals(2,dice.getDice().size()); + } + @Test + public void tossAndSumTest(){ + //given + Dice dice = new Dice(2); + Assert.assertTrue(dice.tossAndSum() >= 2 && dice.tossAndSum() <= 12); + } + +} diff --git a/src/test/java/SimulationTest.java b/src/test/java/SimulationTest.java new file mode 100644 index 0000000..75e0034 --- /dev/null +++ b/src/test/java/SimulationTest.java @@ -0,0 +1,2 @@ +public class SimulationTest { +} From d0286cfcb63bc67e1c5b70f36e22d35167e86122 Mon Sep 17 00:00:00 2001 From: Quatrani Paul Date: Sat, 4 Dec 2021 14:48:06 -0500 Subject: [PATCH 2/2] Finished Lab --- PaulResults.md | 16 +++++++++ src/main/java/Bins.java | 16 +++++++++ src/main/java/Dice.java | 19 ++++++----- src/main/java/Simulation.java | 55 ++++++++++++++++++++++++++++++- src/test/java/BinsTest.java | 26 +++++++++++++++ src/test/java/SimulationTest.java | 14 ++++++++ 6 files changed, 136 insertions(+), 10 deletions(-) create mode 100644 PaulResults.md diff --git a/PaulResults.md b/PaulResults.md new file mode 100644 index 0000000..be9f8ee --- /dev/null +++ b/PaulResults.md @@ -0,0 +1,16 @@ +*** +Simulation of 2 dice tossed for 1000000 times. +*** + + 2: 27588: 0.03 ** + 3: 55346: 0.06 ***** + 4: 83377: 0.08 ******** + 5: 110439: 0.11 *********** + 6: 139244: 0.14 ************* + 7: 167051: 0.17 **************** + 8: 139601: 0.14 ************* + 9: 111389: 0.11 *********** + 10: 82921: 0.08 ******** + 11: 55351: 0.06 ***** + 12: 27693: 0.03 ** + diff --git a/src/main/java/Bins.java b/src/main/java/Bins.java index b9da83e..bab4754 100644 --- a/src/main/java/Bins.java +++ b/src/main/java/Bins.java @@ -1,4 +1,20 @@ +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class Bins { + Map binmap; + public Bins(int min , int max){ + this.binmap = Stream + .iterate(min,q -> q + 1) + .limit(max) + .collect(Collectors.toMap( q -> q, q-> 0)); + } + public Integer getBin(int bin){ + return this.binmap.get(bin); + } + public void increment(int bin){ + this.binmap.replace(bin,this.binmap.get(bin)+1); + } } diff --git a/src/main/java/Dice.java b/src/main/java/Dice.java index c488622..985e3fc 100644 --- a/src/main/java/Dice.java +++ b/src/main/java/Dice.java @@ -1,5 +1,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class Dice { private static class Die{ @@ -11,18 +13,17 @@ private int roll(){ return (this.result = (int) (Math.random()*(6 - 1 + 1) + 1)); } } - private List dice = new ArrayList<>(); + private final List dice; public Dice(int numberOfDice){ - for (int i = 0; i < numberOfDice; i++) { - this.dice.add(new Die()); - } + dice = Stream + .generate(Die::new) + .limit(numberOfDice) + .collect(Collectors.toList()); } public int tossAndSum(){ - int sum = 0; - for (int i = 0; i < dice.size(); i++) { - sum += this.dice.get(i).roll(); - } - return sum; + return dice.stream() + .mapToInt(Die::roll) + .sum(); } public List getDice(){ return dice; diff --git a/src/main/java/Simulation.java b/src/main/java/Simulation.java index 73d86e8..f16e711 100644 --- a/src/main/java/Simulation.java +++ b/src/main/java/Simulation.java @@ -1,5 +1,58 @@ -public class Simulation { +import com.sun.nio.sctp.SctpMultiChannel; + +import java.util.stream.Stream; +public class Simulation { + private final Bins bins; + private final Dice dice; + private final int rolls; + private final int numDice; + public Simulation(int dice, int rolls) { + this.numDice = dice; + this.dice = new Dice(dice); + this.bins = new Bins(dice,dice * 6); + this.rolls = rolls; + } + public void runSimulation(){ + Stream + .iterate(0,q-> q+1) + .limit(rolls) + .forEach(q-> { + int bin = dice.tossAndSum(); + bins.increment(bin); + }); + } + public String printResults() { + StringBuilder sb = new StringBuilder(); + sb + .append("***\n" + "Simulation of ") + .append(this.numDice) + .append(" dice tossed for ") + .append(this.rolls) + .append(" times.\n") + .append("***\n") + .append("\n"); + Stream + .iterate(this.numDice,q -> q + 1) + .limit((this.numDice) * 6L - 1) + .forEach(q -> { + sb + .append(String.format("%3s",q)) + .append(String.format(":%9s",this.bins.getBin(q))) + .append(String.format(":%5.2f ", (double)(this.bins.getBin(q))/(double)(this.rolls))); + Stream + .iterate(0,r->r+1) + .limit(this.bins.getBin(q)/10_000) + .forEach(r -> sb.append("*")); + sb.append("\n"); + }); + return sb.toString(); + } + public static void main(String[] args) { + Simulation sim = new Simulation(2,1_000_000); + sim.runSimulation(); + System.out.println(sim.printResults()); + } } diff --git a/src/test/java/BinsTest.java b/src/test/java/BinsTest.java index ba22eec..78460c2 100644 --- a/src/test/java/BinsTest.java +++ b/src/test/java/BinsTest.java @@ -1,2 +1,28 @@ +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.Optional; +import java.util.stream.Stream; + public class BinsTest { + private Bins bins; + @Before + public void setUp(){ + bins = new Bins(2,12); + } + @Test + public void constructorAndGetTest(){ + Stream + .iterate(2,q -> q+1) + .limit(12) + .forEach(q-> Assert.assertEquals(Integer.valueOf(0), bins.getBin(q))); + } + @Test + public void incrementTest(){ + bins.increment(2); + Assert.assertEquals(Integer.valueOf(1),bins.getBin(2)); + } + + } diff --git a/src/test/java/SimulationTest.java b/src/test/java/SimulationTest.java index 75e0034..45927a6 100644 --- a/src/test/java/SimulationTest.java +++ b/src/test/java/SimulationTest.java @@ -1,2 +1,16 @@ +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + public class SimulationTest { + private Simulation sim; + @Before + public void setUp(){ + sim = new Simulation(2,1_000_000); + } + @Test + public void simulatorTest(){ + sim.runSimulation(); + Assert.assertNotNull(sim.printResults()); + } }