Προς το περιεχόμενο

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


k33theod

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

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

 

 

from random import randint

def fitness(m,n):
l=len(m)**2
p=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 0

def winning_die(m):
res =list(m)
k = 0
l = len(m)
while(fitness(m,res)<=1/2 and k<1000):
i = randint(0,l-1)
j = randint(0,l-1)
temp = res
if(res>1 and res[j] temp -= 1
temp[j] += 1
if(fitness(m,temp)>fitness(m,res)):
res = temp
k += 1
return (k<1000)*res or []

(m)+1):

 

 

import random

def winning_die(enemy_die):
my_die = random_win(enemy_die)
return my_die

def random_win(enemy_die):
my_die = []
max_number = max(enemy_die) + 1
enemy_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 = []
continue

my_die.append(last_number)
if check_win_solution(my_die, enemy_die):
break
else:
my_die = []

return my_die


def check_win_solution(player, enemy):
total = 0
for p in player:
for e in enemy:
if p > e:
total += 1
elif p < e:
total -= 1
return total > 0

 

 

 

from itertools import combinations

def 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 -= 2
p[j] += 1
p[k] += 1
if p > 0 and judge(p, e) > 0: return p
return []

 

Επιπρόσθετα εγώ έκανα αυτή τη λύση αλλά έχει προβλήματα μνήμης

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 οπότε μην το δοκιμάσετε

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 33
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Μήπως να καθαρίζεις την μνήμη?

Έχει λύση από Java για να την δω?

Όχι μόνο python και ίσως javascript αλλά για να δώ λύσεις σε js πρέπει πρώτα να το λύσω σε js οπότε ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...