k33theod Δημοσ. 16 Νοεμβρίου 2016 Μέλος Δημοσ. 16 Νοεμβρίου 2016 Εδώ είναι μερικές λύσεις από άλλους χρήστες σε python from random import randintdef fitness(m,n):l=len(m)**2p=lambda m,n:sum(i>j for j in m for i in n)q=lambda m,n:sum(i==j for j in m for i in n)return (q(m,n)!=l) and p(m,n)*1/(l-q(m,n)) or 0def winning_die(m):res =list(m)k = 0l = len(m)while(fitness(m,res)<=1/2 and k<1000):i = randint(0,l-1)j = randint(0,l-1)temp = resif(res>1 and res[j] temp -= 1temp[j] += 1if(fitness(m,temp)>fitness(m,res)):res = tempk += 1return (k<1000)*res or [] (m)+1): import randomdef winning_die(enemy_die):my_die = random_win(enemy_die)return my_diedef random_win(enemy_die):my_die = []max_number = max(enemy_die) + 1enemy_sum = sum(enemy_die)for i in range(1000):for index in range(len(enemy_die) - 1):my_die.append(random.randrange(1, max_number + 1))last_number = enemy_sum - sum(my_die)if last_number <= 0:my_die = []continuemy_die.append(last_number)if check_win_solution(my_die, enemy_die):breakelse:my_die = []return my_diedef check_win_solution(player, enemy):total = 0for p in player:for e in enemy:if p > e:total += 1elif p < e:total -= 1return total > 0 from itertools import combinationsdef judge(p, e):return sum((xp > xe) - (xp < xe) for xp in p for xe in e)def winning_die(e):n = len(e)for i in range(n):for j, k in combinations(range(n), 2):p = e[:]p -= 2p[j] += 1p[k] += 1if p > 0 and judge(p, e) > 0: return preturn [] Επιπρόσθετα εγώ έκανα αυτή τη λύση αλλά έχει προβλήματα μνήμης from itertools import combinations_with_replacement def winning_die(a): psols=list(combinations_with_replacement(list(range(1,sum(a)-len(a)+1)),len(a))) solutions=[i for i in psols if sum(i)==sum(a)] for i in solutions: awins,bwins=decideWinner (a,i) if bwins>awins: return i return [] def decideWinner (a,: awins = 0 bwins = 0 for i in range(len(a)): for j in range(len(): if(a[i] > b[j]): awins +=1 elif a[i] < b[j]: bwins +=1 return awins, bwins Για μικρά νούμερα είναι εντάξει όταν όμως την έβαλα για έλεγχο στην πλατφόρμα μου γύριζε στα μεγάλα νούμερα (10 και πάνω) memory error. Νόμιζα ότι ο server μου έδινε περιορισμένη μνήμη και το έτρεξα με μεγάλο νούμερο στον υπολογιστή μου με το [10,10,10,10,10,10,10,10,10,10] μετά από 10 λεπτά έκανα hard reset οπότε μην το δοκιμάσετε
tsofras Δημοσ. 16 Νοεμβρίου 2016 Δημοσ. 16 Νοεμβρίου 2016 Μήπως να καθαρίζεις την μνήμη? Έχει λύση από Java για να την δω?
k33theod Δημοσ. 16 Νοεμβρίου 2016 Μέλος Δημοσ. 16 Νοεμβρίου 2016 Μήπως να καθαρίζεις την μνήμη? Έχει λύση από Java για να την δω? Όχι μόνο python και ίσως javascript αλλά για να δώ λύσεις σε js πρέπει πρώτα να το λύσω σε js οπότε ...
albNik Δημοσ. 16 Νοεμβρίου 2016 Δημοσ. 16 Νοεμβρίου 2016 Αυτές είναι brute force υλοποιήσεις που δοκιμάζουν όλους τους συνδυασμούς και μετράνε νίκες.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα