Tre Tärningar

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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!
:)
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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}%")
Användarvisningsbild
AndLi
Inlägg: 17045
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tre Tärningar

Inlägg 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
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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.
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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.
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Tre Tärningar

Inlägg 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
Skriv svar