Προς το περιεχόμενο
  • 0
Συνδεθείτε  
k33theod

Αλγόριθμος ζάρι

Ερώτηση

Προσπαθώ να  λύσω το εξής πρόβλημα

https://py.checkio.org/mission/unfair-dice/

 

Το περιγράφω λίγο γιατί είναι δυσνόητο

 

Ο αντίπαλος έχει 1 ζάρι όχι με έξι έδρες αλλά με όσες θέλει και όχι με στανταρ τιμές σε κάθε έδρα αλλά ότι 

αυτός θέλει

και εμείς θέλουμε να φτιάξουμε ένα ζάρι που να έχει περίσσοτερες πιθανότητες να κερδίσει με τους εξής περιορισμούς:

πρέπει να έχει ίδιο αριθμό εδρών και το άθροισμα των τιμών να είναι το ίδιο

πχ ο αντίπαλος έχει ένα ζάρι με τρείς έδρες με τιμές έστω 1,1,3 το δικό που πρέπει να έχει 3 έδρες και άθροισμα τιμών 1+1+3 εάν δηλαδή το δικό μου έχει τιμές 2,2,1 έχω περισσότερες πιθανότητες να κερδίσω

 

 

Σκέφτηκα αρχικά πως αν έχω μεγαλύτερη τιμή σε πάνω από τις μισές έδρες νικάω αλλά δεν μου βγαίνει πάντα πχ στο 1,2,3,4,5,6 εάν εγώ έχω 2,3,4,5 οι τιμές που μου μένουν είναι με άθροισμα 7 και εάν βάλω 1,6 έχω το ίδιο ζάρι ενώ εάν βάλω άλλες τιμές 3 και 4 πχ νομίζω οι πιθανότητες είναι ίδιες. 

Αν μεγαλώσω τις μέγιστες τιμές του δηλάδη έχω 4,5,6,7 πρέπει στις άλλες πλευρές να βάλω 1,1 και είμαι πάλι στα ίδια.

 

Έχω την εντύπωση πως αν οι τιμές είναι συνεχομένες δεν μπορείς να τον νικήσεις αλλά μόνο να έχεις 50/50 

Καμία ιδέα; 

κάπου με τις πιθανότητες το χάνω

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Προτεινόμενες αναρτήσεις

  • 0

Έχω την εντύπωση πως αν οι τιμές είναι συνεχομένες δεν μπορείς να τον νικήσεις αλλά μόνο να έχεις 50/50 

Καμία ιδέα; 

κάπου με τις πιθανότητες το χάνω

 

Το [3,3,3,1] νικάει το [1,2,3,4]

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Προσπαθώ να  λύσω το εξής πρόβλημα

https://py.checkio.org/mission/unfair-dice/

 

Το περιγράφω λίγο γιατί είναι δυσνόητο

 

Ο αντίπαλος έχει 1 ζάρι όχι με έξι έδρες αλλά με όσες θέλει και όχι με στανταρ τιμές σε κάθε έδρα αλλά ότι 

αυτός θέλει

και εμείς θέλουμε να φτιάξουμε ένα ζάρι που να έχει περίσσοτερες πιθανότητες να κερδίσει με τους εξής περιορισμούς:

πρέπει να έχει ίδιο αριθμό εδρών και το άθροισμα των τιμών να είναι το ίδιο

πχ ο αντίπαλος έχει ένα ζάρι με τρείς έδρες με τιμές έστω 1,1,3 το δικό που πρέπει να έχει 3 έδρες και άθροισμα τιμών 1+1+3 εάν δηλαδή το δικό μου έχει τιμές 2,2,1 έχω περισσότερες πιθανότητες να κερδίσω

 

 

Σκέφτηκα αρχικά πως αν έχω μεγαλύτερη τιμή σε πάνω από τις μισές έδρες νικάω αλλά δεν μου βγαίνει πάντα πχ στο 1,2,3,4,5,6 εάν εγώ έχω 2,3,4,5 οι τιμές που μου μένουν είναι με άθροισμα 7 και εάν βάλω 1,6 έχω το ίδιο ζάρι ενώ εάν βάλω άλλες τιμές 3 και 4 πχ νομίζω οι πιθανότητες είναι ίδιες. 

Αν μεγαλώσω τις μέγιστες τιμές του δηλάδη έχω 4,5,6,7 πρέπει στις άλλες πλευρές να βάλω 1,1 και είμαι πάλι στα ίδια.

 

Έχω την εντύπωση πως αν οι τιμές είναι συνεχομένες δεν μπορείς να τον νικήσεις αλλά μόνο να έχεις 50/50 

Καμία ιδέα; 

κάπου με τις πιθανότητες το χάνω

Όπως το βλέπω και εγώ ναι, έτσι γίνεται.

 

Για να κερδίζεις πρέπει να μοιράσεις τα παραπάνω ποντάκια για να είσαι τουλάχιστον (βασικά ακριβώς θέλει) +1 απο τις περισσότερες έδρες του, και να βάλεις πολύ μικρά νούμερα αναγκαστικά σε κάποιες έδρες (ιδανικό 1) για να έχεις ίσο άθροισμα συνολικά.

 

Προφανώς με συνεχόμενα νούμερα καταλήγεις στο ίδιο ζάρι.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεν είναι οι συνεχόμενοι αλλά τα κενά (στην αρχή ή ενδιάμεσα) που θα σου δώσουν ευκαιρία για καλύτερες πιθανότητες, πχ δε σε νοιάζει αν είναι 3,4,5 γιατί με 5,5,2 κερδίζεις.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Το [3,3,3,1] νικάει το [1,2,3,4]

Έχεις δίκιο

 

Επιπρόσθετα με μπερδεύουν κάποια στοιχεία που δίνει που λέει ας πούμε

winning_die([3, 3, 3, 3, 6, 6]) == [4, 4, 4, 4, 4, 4] # Or [3, 3, 4, 4, 5, 5] ενώ εμένα η δεύτερη λύση μου φένεται ισοπαλία

όπως και αυτό

winning_die([2, 3, 4, 5, 6, 7]) == [1, 1, 3, 7, 7, 8] # This can be beat though.

που άν αφαιρέσουμε τα κοινά στοιχεία μένουν 2,4,5,6 και 1,1,7,8 που μου φένεται πάλι ισσοπαλία

Ίσως χάνω κάτι από την εκφώνηση

ή δεν είναι σωστό το σκεπτικό μου για τις πιθανότητες

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

let decideWinner = (a, => {
let awins = 0,bwins = 0;
for(let i=0;i<a.length;i++) {
for(let ii = 0;ii<b.length;ii++) {
if(a[i] > b[ii]) {
awins ++;
} else if (a[i] < b[ii]) {
bwins ++;
}
}
}

return {awins: awins, bwins:bwins};
}

let c = [3, 3, 3, 3, 6, 6];
let d = [4, 4, 4, 4, 4, 4];
let e = [3, 3, 4, 4, 5, 5];
let f = [2, 3, 4, 5, 6, 7];
let g = [1, 1, 3, 7, 7, 8];

console.log(decideWinner(c,e));//{ awins: 12, bwins: 16 }
console.log(decideWinner(c,d));//{ awins: 12, bwins: 24 }
console.log(decideWinner(f,g));//{ awins: 16, bwins: 17 }

  • Like 2

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεν είναι γιατί αλλάζουν οι πιθανότητες


let decideWinner = (a, => {
	let awins = 0,bwins = 0;
	for(let i=0;i<a.length;i++) {
		for(let ii = 0;ii<b.length;ii++) {
			if(a[i] > b[ii]) {
				awins ++;
			} else if (a[i] < b[ii]) {
				bwins ++;
			}
		}
	}

	return {awins: awins, bwins:bwins};
}

let c = [3, 3, 3, 3, 6, 6];
let d = [4, 4, 4, 4, 4, 4];
let e = [3, 3, 4, 4, 5, 5];
let f = [2, 3, 4, 5, 6, 7];
let g = [1, 1, 3, 7, 7, 8];

console.log(decideWinner(c,e));//{ awins: 12, bwins: 16 }
console.log(decideWinner(c,d));//{ awins: 12, bwins: 24 }
console.log(decideWinner(f,g));//{ awins: 16, bwins: 17 }

 

Αν δεν κάνω λάθος αυτός είναι ο αλγόριθμος για την σύκριση , ο TS θέλει τον αλγόριθμο για την κατασκευή του ζαριού που θα νικάει το πρώτο , σωστά?

 

Ωραίο προβληματάκι πάντος :)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ναι απλά και εγώ έπαιζα τώρα και ήθελα να δείξω (αν είναι σωστό το σκεπτικό μου) ότι δεν ισχύει ο προβληματισμός του για την εκφώνηση, σκέψεις μοιράζομαι :)

  • Like 1

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
let decideWinner = (a, => {
	let awins = 0,bwins = 0;
	for(let i=0;i<a.length;i++) {
		for(let ii = 0;ii<b.length;ii++) {
			if(a[i] > b[ii]) {
				awins ++;
			} else if (a[i] < b[ii]) {
				bwins ++;
			}
		}
	}

	return {awins: awins, bwins:bwins};
}

let c = [3, 3, 3, 3, 6, 6];
let d = [4, 4, 4, 4, 4, 4];
let e = [3, 3, 4, 4, 5, 5];
let f = [2, 3, 4, 5, 6, 7];
let g = [1, 1, 3, 7, 7, 8];

console.log(decideWinner(c,e));//{ awins: 12, bwins: 16 }
console.log(decideWinner(c,d));//{ awins: 12, bwins: 24 }
console.log(decideWinner(f,g));//{ awins: 16, bwins: 17 }

Αυτό πιστεύω ότι είναι ευχαριστώ Δεν θα το σκεφτόμουν ότι οι πιθανότητες βγαίνουν έτσι

Τώρα που κατάλαβα πως βγαίνει ο νικητής θα κάνω τον αλγόριθμο να τον βρίσκω

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεν ξέρω αν είναι σωστή λύση (είμαι σκράπας στα μαθηματικά η αλήθεια είναι) απλά επειδή μου άρεσε σαν πρόβλημα και το ψάχνω, μάλλον πρέπει να αναπτύξεις έναν τύπο για να βρείς τις πιθανότητες και να παίξεις με αυτό.

 

Η λύση του alou κάνει σύγκριση στους αριθμούς που έχει κάθε πλευρά και αποφασίζει τον νικητή , δεν βλέπω να λαμβάνει υπόψιν την πιθανότητα που έχει κάθε αριθμός να βγεί

 

Σωστά?

 

Αυπνία θα μου προκαλέσεις ,άσε που ξαναβλέπω τύπους και καταλαβαίνω ότι έχω ξεχάσει τα πάντα :)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεν ξέρω αν είναι σωστή λύση (είμαι σκράπας στα μαθηματικά η αλήθεια είναι) απλά επειδή μου άρεσε σαν πρόβλημα και το ψάχνω, μάλλον πρέπει να αναπτύξεις έναν τύπο για να βρείς τις πιθανότητες και να παίξεις με αυτό.

 

Η λύση του alou κάνει σύγκριση στους αριθμούς που έχει κάθε πλευρά και αποφασίζει τον νικητή , δεν βλέπω να λαμβάνει υπόψιν την πιθανότητα που έχει κάθε αριθμός να βγεί

 

Σωστά?

 

Αυπνία θα μου προκαλέσεις ,άσε που ξαναβλέπω τύπους και καταλαβαίνω ότι έχω ξεχάσει τα πάντα :)

Η λύση του alou πιστεύω είναι σωστή έτσι πρέπει να υπολογίζονται οι πιθανότητες. 

Το μόνο που μένει να παράγουμε τον αριθμός που νικάει (αν υπάρχει)

αν όχι σήμερα  αύριο πιστεύω θα το βρώ  :X  (ας μη λεω πολλά)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Στο link που έβαλες

 

winning_die([3, 3, 3, 3, 6, 6]) == [4, 4, 4, 4, 4, 4] # Or [3, 3, 4, 4, 5, 5]

 

Αυτό σημαίνει ότι θα έχουν το ίδιο αποτέλεσμα? 

Είναι ακριβώς το παράδειγμα του alou

 

console.log(decideWinner(c,e));//{ awins: 12, bwins: 16 }

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Προσπαθώ να  λύσω το εξής πρόβλημα

https://py.checkio.org/mission/unfair-dice/

 

Το περιγράφω λίγο γιατί είναι δυσνόητο

 

Ο αντίπαλος έχει 1 ζάρι όχι με έξι έδρες αλλά με όσες θέλει και όχι με στανταρ τιμές σε κάθε έδρα αλλά ότι 

αυτός θέλει

και εμείς θέλουμε να φτιάξουμε ένα ζάρι που να έχει περίσσοτερες πιθανότητες να κερδίσει με τους εξής περιορισμούς:

πρέπει να έχει ίδιο αριθμό εδρών και το άθροισμα των τιμών να είναι το ίδιο

πχ ο αντίπαλος έχει ένα ζάρι με τρείς έδρες με τιμές έστω 1,1,3 το δικό που πρέπει να έχει 3 έδρες και άθροισμα τιμών 1+1+3 εάν δηλαδή το δικό μου έχει τιμές 2,2,1 έχω περισσότερες πιθανότητες να κερδίσω

 

 

Σκέφτηκα αρχικά πως αν έχω μεγαλύτερη τιμή σε πάνω από τις μισές έδρες νικάω αλλά δεν μου βγαίνει πάντα πχ στο 1,2,3,4,5,6 εάν εγώ έχω 2,3,4,5 οι τιμές που μου μένουν είναι με άθροισμα 7 και εάν βάλω 1,6 έχω το ίδιο ζάρι ενώ εάν βάλω άλλες τιμές 3 και 4 πχ νομίζω οι πιθανότητες είναι ίδιες. 

Αν μεγαλώσω τις μέγιστες τιμές του δηλάδη έχω 4,5,6,7 πρέπει στις άλλες πλευρές να βάλω 1,1 και είμαι πάλι στα ίδια.

 

Έχω την εντύπωση πως αν οι τιμές είναι συνεχομένες δεν μπορείς να τον νικήσεις αλλά μόνο να έχεις 50/50 

Καμία ιδέα; 

κάπου με τις πιθανότητες το χάνω

Γιατι να εχεις μεγαλυτερες τιμες στις μισες εδρες; Ο σκοπος ειναι να εχεις μεγαλυτερη πιθανοτητα απο τον αντιπαλο.

 

Αυτο που θες ειναι περισσοτερες εδρες νικης απο τον αντιπαλο. Για να το πετυχεις αυτο, θες μια εδρα που να χανει απο ολες τις εδρες του αντιπαλου.

Πχ αν ο αντιπαλος εχει 1,2,3,4 και εσυ 1,2,3,4

Τοτε οι πιθανότητες ειναι 50-50

Εαν ομως εχεις 1,3,3,3

Τοτε εχεις 50% να κεδρισεις και 25% να χασεις.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε έναν λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι εύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
Συνδεθείτε  
×
×
  • Δημιουργία νέου...

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.