Sto provando a scrivere un algoritmo (specificamente in Ruby) che classificherà le squadre in base al loro record l'uno contro l'altro. Se una squadra A e una squadra B hanno vinto la stessa quantità di giochi l'una contro l'altra, allora va giù per puntare ai differenziali.
Ecco un esempio:
A beat B two times
B beats C one time
A beats D three times
C bests D two times
D beats C one time
B beats A one time
Che tipo di riduce a
A[B] = 2
B[C] = 1
A[D] = 3
C[D] = 2
D[C] = 1
B[A] = 1
Che tipo di riduce a
A[B] = 1
B[C] = 1
A[D] = 3
C[D] = 1
D[C] = -1
B[A] = -1
Che è su quanto lontano ho
Penso che i risultati di questo specifico algoritmo sarebbero:
A, B, C, D
Ma sono bloccato su come passare dalla struttura nidificata ad hash ai risultati.
Il mio psuedo-code è il seguente (posso postare anche il mio codice ruby se qualcuno vuole):
For each game(g):
hash[g.winner][g.loser] += 1
Questo lascia hash
come prima riduzione sopra
hash2 = clone of hash
For each key(winner), value(losers hash) in hash:
For each key(loser), value(losses against winner):
hash2[loser][winner] -= losses
Che lascia hash2
come seconda riduzione
Sentitevi liberi di chiedere o modificare questo per essere più chiari, non sono sicuro di come metterlo in un modo molto eloquente. Grazie!