Sub Activity_Create(FirstTime As Boolean)
Log(FindClosetSum(Array As Float(0.147, 0.148, 0.149, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1), _
1.997))
Log(FindClosetSum(Array As Float(1, 2, 3, 4), 5.6))
End Sub
Sub FindClosetSum(Nums() As Float, Target As Float) As List
Dim minDistance = 3.4028235E38 As Float 'max value
Dim minI As Int = 0
For i = 1 To Bit.ShiftLeft(1, Nums.Length) - 1
Dim sum As Float = 0
For n = 0 To Nums.Length - 1
If Bit.AND(Bit.ShiftLeft(1, n), i) <> 0 Then
If sum > Target Then Exit
sum = sum + Nums(n)
End If
Next
If Abs(sum - Target) < minDistance Then
minDistance = Abs(sum - Target)
minI = i
If minDistance = 0 Then Exit
End If
Next
Log("Distance: " & minDistance)
Dim l1 As List
l1.Initialize
For n = 0 To Nums.Length - 1
If Bit.AND(Bit.ShiftLeft(1, n), minI) <> 0 Then
l1.Add(Nums(n))
End If
Next
Return l1
End Sub