-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
algoritem za zalaganje je bil na novo napisan - linked to #5 algoritem za izbiro talona je bil spremenjen za podporo barvnemu valatu algoritem za rufanje je bil na novo napisan
- Loading branch information
Showing
4 changed files
with
299 additions
and
141 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// moje iskreno subjektivno mnenje je, da 3! = 6 ni tako veliko število, posledično si lahko privoščimo malo | ||
// podle rekurzije | ||
import 'package:stockskis/stockskis.dart'; | ||
|
||
double evaluacijaIzSkupka(List<int> skupek, int zaloziti) { | ||
var sum = skupek.fold(0, (p, c) => p + c); | ||
if (sum == zaloziti) { | ||
return skupek.length.toDouble(); | ||
} else if (sum > zaloziti) { | ||
return (sum - zaloziti) / skupek.last + skupek.length - 1; | ||
} else { | ||
return -1; | ||
} | ||
} | ||
|
||
List<int> rekurzivnaKombinatorika( | ||
List<int> steviloBarv, | ||
List<int> skupek, | ||
int zaloziti, | ||
) { | ||
var sum = skupek.fold(0, (p, c) => p + c); | ||
if (sum >= zaloziti) return skupek; | ||
|
||
List<int> novSkupek = [...skupek]; | ||
for (int i = 0; i < steviloBarv.length; i++) { | ||
int steviloBarve = steviloBarv[i]; | ||
if (steviloBarve == 0) continue; | ||
|
||
List<int> sb = [...steviloBarv]; | ||
sb.removeAt(i); | ||
List<int> s = [...skupek]; | ||
s.add(steviloBarve); | ||
|
||
s = rekurzivnaKombinatorika(sb, s, zaloziti); | ||
|
||
var sum = s.fold(0, (p, c) => p + c); | ||
|
||
debugPrint( | ||
"$s $sum $zaloziti ${evaluacijaIzSkupka(s, zaloziti)} $novSkupek"); | ||
|
||
// če je sum == tistemu, kolikor moramo založiti, potem smo prišli na plodna tla, si lahko na čist način založimo s.length števila barv. | ||
// če je sum > tistemu, kolikor smo morali založiti, potem nismo natančno založili, ena barva overflowa, zato jo tudi odštejemo iz tega izračuna. | ||
// hkrati pa moramo spet upoštevati, da četudi lahko založimo 2, bo še vedno bolje če založimo 1+2, z overflowom barve v 2. | ||
if (evaluacijaIzSkupka(s, zaloziti) > | ||
evaluacijaIzSkupka(novSkupek, zaloziti)) { | ||
novSkupek = s; | ||
} | ||
} | ||
|
||
return novSkupek; | ||
} |
Oops, something went wrong.