forked from ernop/coil-levels
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TweakPicker.cs
71 lines (59 loc) · 2.49 KB
/
TweakPicker.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
namespace coil
{
public class TweakPicker
{
public TweakPicker(Func<List<Tweak>, System.Random, Tweak> picker, string name, int? maxLen1 = null, int? maxLen2 = null, int? maxLen3 = null, int? tweaklim = null)
{
//wrap in the tweakpicker's random
Picker = (List<Tweak> tweaks) => picker(tweaks, Random);
Init(name, maxLen1, maxLen2, maxLen3, tweaklim);
}
public TweakPicker(Func<List<Tweak>, Tweak> picker, string name, int? maxLen1 = null, int? maxLen2 = null, int? maxLen3 = null, int? tweaklim = null)
{
Picker = picker;
Init(name, maxLen1, maxLen2, maxLen3, tweaklim);
}
public TweakPicker(Func<Tweak, int> scoringFunction, string name, int? maxLen1 = null, int? maxLen2 = null, int? maxLen3 = null, int? tweaklim = null)
{
Picker = (List<Tweak> tweaks) => tweaks.OrderByDescending(tt => scoringFunction(tt)).FirstOrDefault();
Init(name, maxLen1, maxLen2, maxLen3, tweaklim);
}
public TweakPicker(Func<Tweak, Random, int> scoringFunction, string name, int? maxLen1 = null, int? maxLen2 = null, int? maxLen3 = null, int? tweaklim = null)
{
Picker = (List<Tweak> tweaks) => tweaks.OrderByDescending(tt => scoringFunction(tt, Random)).FirstOrDefault();
Init(name, maxLen1, maxLen2, maxLen3, tweaklim);
}
private void Init(string name, int? maxLen1 = null, int? maxLen2 = null, int? maxLen3 = null, int? tweaklim = null)
{
Name = name;
MaxLen1 = maxLen1;
MaxLen2 = maxLen2;
MaxLen3 = maxLen3;
TweakLim = tweaklim;
}
public Random Random { get; set; }
public void Init(int seed)
{
Random = new System.Random(seed);
}
public override string ToString()
{
return $"TweakPicker:{Name} {MaxLen1},{MaxLen2},{MaxLen3},{TweakLim}";
}
public Func<List<Tweak>, Tweak> Picker;
public string Name;
//metadata to feed into getTweaks to limit the size of the generated list of choices.
public int? MaxLen1;
public int? MaxLen2;
public int? MaxLen3;
public int? TweakLim;
public string GetStr()
{
return Name;
}
}
}