-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathProbability.tact
More file actions
24 lines (18 loc) · 1.05 KB
/
Probability.tact
File metadata and controls
24 lines (18 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
trait Probability {
const BASE_THRESHOLD: Int = 10;
const MAX_PROBABILITY: Int = 100;
const MIN_PROBABILITY: Int = 1;
fun calculateBlockProbability(minutesSinceLastBlock: Int, attemptsSinceLastBlock: Int): Int {
let timeFactor: Int = (minutesSinceLastBlock * self.MAX_PROBABILITY) / self.BASE_THRESHOLD;
let adjustedTimeFactor: Int = min(self.MAX_PROBABILITY, max(self.MIN_PROBABILITY, timeFactor));
let attemptsFactor: Int = attemptsSinceLastBlock > 0
? self.MAX_PROBABILITY / attemptsSinceLastBlock
: self.MAX_PROBABILITY;
let rawProbability: Int = (adjustedTimeFactor * attemptsFactor) / self.MAX_PROBABILITY;
let linearGrowth: Int = minutesSinceLastBlock > self.BASE_THRESHOLD
? (minutesSinceLastBlock - self.BASE_THRESHOLD) * self.BASE_THRESHOLD
: 0;
let finalProbability: Int = rawProbability + (minutesSinceLastBlock / self.BASE_THRESHOLD) + linearGrowth;
return max(self.MIN_PROBABILITY, min(self.MAX_PROBABILITY, finalProbability));
}
}