Sida 2 av 2

Re: Tre Tärningar

Postat: 6 november 2020, 12:12:32
av 4kTRB
Nu kan man ge sig i kast med vadslagning!
Man ska slå vad med personer som har mindre koll än en själv!
:)

Re: Tre Tärningar

Postat: 6 november 2020, 12:21:51
av 4kTRB
Vet inte om detta ger rättvisande resultat.
Men sedan beror det väl på vilken dator man har.
Finns det sätt att modifiera min kod en aning och få bättre prestanda?

Kod: Markera allt

public class Dice {
	public static void main(String[] args) {
		
		long startTime = System.nanoTime();	
		
		Dices dices;
		dices = new Dices();
		int[] allDices = new int[216];
		int antalProdukter;
		int produkt;

		int[] twoDiceProduct = dices.twoDiceProduct();
		allDices = dices.allDices(twoDiceProduct);
		produkt = 24;
		antalProdukter = dices.search(produkt, allDices);
		long endTime = System.nanoTime();
		System.out.println("Antal Tärningskast som ger " + produkt + " är " + antalProdukter);
		
        long timeElapsed = endTime - startTime;
        System.out.println("Execution time in microseconds : " + timeElapsed / 1000);
	}
}
I energisparläge:

Kod: Markera allt

Antal Tärningskast som ger 24 är 15
Execution time in microseconds : 609
I högprestandaläge:

Kod: Markera allt

Antal Tärningskast som ger 24 är 15
Execution time in microseconds : 353

Re: Tre Tärningar

Postat: 6 november 2020, 12:55:44
av 4kTRB
Sedan om man mäter tiden utan att ta med variabeldeklarationerna så blr det betydlig skillnad.
Hur ska man mäta egentligen?

Kod: Markera allt

public class Dice {
	public static void main(String[] args) {		
		Dices dices;
		dices = new Dices();
		int[] allDices = new int[216];
		int[] twoDiceProduct = new int[36];
		int antalProdukter;
		int produkt =24;
				
		long startTime = System.nanoTime();	
			
		twoDiceProduct = dices.twoDiceProduct();
		allDices = dices.allDices(twoDiceProduct);
		antalProdukter = dices.search(produkt, allDices);
		
		long endTime = System.nanoTime();
		
		System.out.println("Antal Tärningskast som ger " + produkt + " är " + antalProdukter);
		
        long timeElapsed = endTime - startTime;
        System.out.println("Execution time in microseconds : " + timeElapsed / 1000);
	}		
}

Kod: Markera allt

Antal Tärningskast som ger 24 är 15
Execution time in microseconds : 14

Re: Tre Tärningar

Postat: 6 november 2020, 15:18:29
av 4kTRB
Det skulle vara kul att testa din kod i Java men vet inte hur det ska översättas.
Kan man teckna den koden som en generell algoritm?

Kod: Markera allt

from itertools import product
from operator import mul
from functools import reduce
from collections import defaultdict
sols = defaultdict(list)
N_dice = 3
dices = (range(1,7),)*N_dice
for vals in product(*dices):
    sols[reduce(mul, vals)].append(vals)
for k,v in sorted(sols.items()):
    if len(v):
        print(f"For {k} there are {len(v)} combinations, {len(v)/6**N_dice*100:0.2f}%")

Re: Tre Tärningar

Postat: 6 november 2020, 18:19:10
av AndLi
4kTRB skrev: 4 november 2020, 23:44:11 Antar att formeln blir snarlik om produkten tex ska bli 18.
Jag trigga lite på det och sannolikt en felläsning.. och gjorde en liten graf över alla summorna och hur många kombinationer som fanns för varje (ja brute force i excel...)
det är lite svår att se exakt vilket värde varje stapel motsvara

Kod: Markera allt

1	1
2	3
3	3
4	6
5	3
6	9
8	7
9	3
10	6
12	15
15	6
16	6
18	9
20	9
24	15
25	3
27	1
30	12
32	3
36	12
40	6
45	3
48	9
50	3
54	3
60	12
64	1
72	9
75	3
80	3
90	6
96	3
100	3
108	3
120	6
125	1
144	3
150	3
180	3
216	1

Re: Tre Tärningar

Postat: 6 november 2020, 19:51:17
av 4kTRB
Det blev tjusigt.
Ger bra överblick.
Nu skulle varje stapel ha ggr pengarna också.
Om man slår vad med 3 tal per spelare så är det
kanske idé att lägga pengarna till vänstra delen av kurvan.

Re: Tre Tärningar

Postat: 6 november 2020, 22:07:25
av 4kTRB
Här är ett sätt som borde gå att struta ner till en kod,

Kod: Markera allt

produkt = 24

24, 12, 8, 6, 4, 2 och 1 delar 24 jämt upp.

Tärningar A, B och C

AxB	C	
-----------
24	1	
12	2
8	3
6	4
4	6
2	-
1	-

Sedan räcker det med att ta reda på hur många
sätt AxB kan bli 24, 12, 8, 6 resp. 4 och det
är 2, 4, 2, 4 och 3 summan blir 15.

Re: Tre Tärningar

Postat: 7 november 2020, 00:14:31
av 4kTRB
Så här blir det på mer matematiskt nivå.
Addera sannolikheter.
Först sannolikheten att få olika produkter av 2 tärningar och
sedan de kombinationer som med tärning 3 ger det sökta talet.
Samma som innan men lite tydligare kanske,

Kod: Markera allt

1	1/36
2	2/36
3	1/36
4	3/36
5	2/36
6	4/36
7	0
8	2/36
9	1/36
10	2/36
11	0
12	4/36
13	0
14	0
15	2/36
16	1/36
17	0
18	2/36
19	0
20	2/36
21	0
22	0
23	0
24	2/36
25	1/36
26	0
27	0
28	0
29	0
30	2/36
31	0
32	0
33	0
34	0
35	0
36	1/36

24 

24 x 1
12 x 2
8 x 3
6 x 4
4 x 6
3 x -
2 x -
1 x -

2/36 + 4/36 + 2/36 + 4/36 + 3/36 = 15/36