yay
mark_remaining = eta - mark_time
next_mark_time = (
mark_remaining * (mark_time - 3 * min_delay + 2 * mark_remaining /
remaining_count) -
(mark_time - min_delay) * min_delay * remaining_count
) / (mark_remaining - min_delay * remaining_count)
i did 34 manual iterations to expand and factor it as if it was old c
code. they are attached.
likely done poorly but it's what i did.
def reversetimepoints(idx, mark_time, min_delay, eta, remaining_count):
# reversetimepoints[remaining_count] = mark_time
# reversetimepoints[1] = eta - min_delay
# reversetimepoints[0] = eta
# y(x) = ax^2 + bx + c
a = -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
b = -(a + min_delay)
c = eta
return (a * idx + b) * idx + c
def timepoint(mark_time, min_delay, eta, remaining_count):
return reversetimepoints(remaining_count - 1, mark_time, min_delay, eta, remaining_count)
def timepoint2(mark_time, min_delay, eta, remaining_count):
a = -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
b = -(a + min_delay)
c = eta
idx = remaining_count - 1
return (a * idx + b) * idx + c
def timepoint3(mark_time, min_delay, eta, remaining_count):
a = -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
b = -(a + min_delay)
idx = remaining_count - 1
return (a * idx + b) * idx + eta
def timepoint4(mark_time, min_delay, eta, remaining_count):
a = -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
b = -(a + min_delay)
return eta + (remaining_count - 1) * ((remaining_count - 1) * a + b)
def timepoint5(mark_time, min_delay, eta, remaining_count):
a = -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
return eta + (remaining_count - 1) * (
(remaining_count - 1) * a +
-(a + min_delay)
)
def timepoint6(mark_time, min_delay, eta, remaining_count):
a = -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
return eta + (remaining_count - 1) * a * (
(remaining_count - 1) +
-(1 + min_delay / a)
)
def timepoint7(mark_time, min_delay, eta, remaining_count):
return eta + (remaining_count - 1) * -((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1) * (
(remaining_count - 1) +
-(1 + min_delay / (
-((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
))
)
def timepoint8(mark_time, min_delay, eta, remaining_count):
return eta + -((eta - mark_time) / remaining_count - min_delay) * (
(remaining_count - 1) +
-(1 + min_delay / (
-((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
))
)
def timepoint9(mark_time, min_delay, eta, remaining_count):
return eta + (min_delay - (eta - mark_time) / remaining_count) * (
(remaining_count - 1) +
-(1 + min_delay / (
-((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
))
)
def timepoint10(mark_time, min_delay, eta, remaining_count):
return eta + (min_delay - (eta - mark_time) / remaining_count) * (
remaining_count - 2 +
min_delay / (
((eta - mark_time) / remaining_count - min_delay) / (remaining_count - 1)
)
)
def timepoint11(mark_time, min_delay, eta, remaining_count):
return eta + (min_delay - (eta - mark_time) / remaining_count) * (
remaining_count +
min_delay * (remaining_count - 1) / (((eta - mark_time) / remaining_count - min_delay))
- 2
)
def timepoint12(mark_time, min_delay, eta, remaining_count):
return eta + (min_delay - (eta - mark_time) / remaining_count) * (
remaining_count +
min_delay * (remaining_count - 1) * remaining_count / (eta - mark_time - min_delay * remaining_count)
- 2
)
def timepoint13(mark_time, min_delay, eta, remaining_count):
return eta + (min_delay - (eta - mark_time) / remaining_count) * (
remaining_count +
min_delay * remaining_count * remaining_count / (eta - mark_time - min_delay * remaining_count)
- min_delay * remaining_count / (eta - mark_time - min_delay * remaining_count)
- 2
)
def timepoint14(mark_time, min_delay, eta, remaining_count):
return eta + (min_delay * remaining_count - eta + mark_time) * (
1 +
min_delay * remaining_count / (eta - mark_time - min_delay * remaining_count)
- min_delay / (eta - mark_time - min_delay * remaining_count)
- 2 / remaining_count
)
def timepoint15(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count - eta + mark_time +
(min_delay * remaining_count - eta + mark_time) * (min_delay * remaining_count / (eta - mark_time - min_delay * remaining_count)) -
(min_delay * remaining_count - eta + mark_time) * min_delay / (eta - mark_time - min_delay * remaining_count) -
(min_delay * remaining_count - eta + mark_time) * 2 / remaining_count
)
def timepoint16(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count - eta + mark_time +
(min_delay * remaining_count - eta + mark_time) * min_delay * remaining_count / (eta - mark_time - min_delay * remaining_count) -
(min_delay * remaining_count - eta + mark_time) * min_delay / (eta - mark_time - min_delay * remaining_count) -
min_delay * 2 + (eta - mark_time) * 2 / remaining_count
)
def timepoint17(mark_time, min_delay, eta, remaining_count):
return eta + (
(min_delay * remaining_count - eta + mark_time) * (eta - mark_time - min_delay * remaining_count) +
(min_delay * remaining_count - eta + mark_time) * min_delay * remaining_count +
(min_delay * remaining_count - eta + mark_time) * -min_delay +
(min_delay * -2 + (eta - mark_time) * 2 / remaining_count) * (eta - mark_time - min_delay * remaining_count)
) / (eta - mark_time - min_delay * remaining_count)
def timepoint18(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * (eta - mark_time - min_delay * remaining_count) -
eta * (eta - mark_time - min_delay * remaining_count) +
mark_time * (eta - mark_time - min_delay * remaining_count)
+
(min_delay * remaining_count - eta + mark_time) * min_delay * remaining_count +
(min_delay * remaining_count - eta + mark_time) * -min_delay +
(min_delay * -2 + (eta - mark_time) * 2 / remaining_count) * (eta - mark_time - min_delay * remaining_count)
) / (eta - mark_time - min_delay * remaining_count)
def timepoint19(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * (eta - mark_time - min_delay * remaining_count) +
-eta * (eta - mark_time - min_delay * remaining_count) +
mark_time * (eta - mark_time - min_delay * remaining_count) +
(min_delay * remaining_count - eta + mark_time) * min_delay * remaining_count +
(min_delay * remaining_count - eta + mark_time) * -min_delay +
min_delay * -2 * (eta - mark_time - min_delay * remaining_count) +
(eta - mark_time) * 2 / remaining_count * (eta - mark_time - min_delay * remaining_count)
) / (eta - mark_time - min_delay * remaining_count)
def timepoint20(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
(min_delay * remaining_count - eta + mark_time) * -min_delay +
min_delay * -2 * (eta - mark_time - min_delay * remaining_count) +
(eta - mark_time) * 2 / remaining_count * (eta - mark_time - min_delay * remaining_count)
) / (eta - mark_time - min_delay * remaining_count)
def timepoint21(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay * min_delay * remaining_count - -min_delay * eta + -min_delay * mark_time +
min_delay * -2 * eta +
min_delay * -2 * -mark_time +
min_delay * -2 * -min_delay * remaining_count +
(eta - mark_time) * 2 / remaining_count * (eta - mark_time - min_delay * remaining_count)
) / (eta - mark_time - min_delay * remaining_count)
def timepoint22(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay * min_delay * remaining_count - -min_delay * eta + -min_delay * mark_time +
min_delay * -2 * eta +
min_delay * -2 * -mark_time +
min_delay * -2 * -min_delay * remaining_count +
(eta - mark_time) * (2 * eta + -2 * mark_time + -2 * min_delay * remaining_count) / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint23(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay * min_delay * remaining_count - -min_delay * eta + -min_delay * mark_time +
min_delay * -2 * eta +
min_delay * -2 * -mark_time +
min_delay * -2 * -min_delay * remaining_count +
((eta + -mark_time) * 2 * eta + (eta + -mark_time) * -2 * mark_time + (eta + -mark_time) * -2 * min_delay * remaining_count) / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint24(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay * min_delay * remaining_count - -min_delay * eta + -min_delay * mark_time +
min_delay * -2 * eta +
min_delay * -2 * -mark_time +
min_delay * -2 * -min_delay * remaining_count +
(eta * 2 * eta + -mark_time * 2 * eta + eta * -2 * mark_time + -mark_time * -2 * mark_time + eta * -2 * min_delay * remaining_count + -mark_time * -2 * min_delay * remaining_count) / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint25(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay * min_delay * remaining_count - -min_delay * eta + -min_delay * mark_time +
min_delay * -2 * eta +
min_delay * -2 * -mark_time +
min_delay * -2 * -min_delay * remaining_count +
(eta * 2 * eta + -mark_time * 2 * eta + eta * -2 * mark_time + -mark_time * -2 * mark_time) / remaining_count + eta * -2 * min_delay + -mark_time * -2 * min_delay
) / (eta - mark_time - min_delay * remaining_count)
def timepoint26(mark_time, min_delay, eta, remaining_count):
return eta + (
min_delay * remaining_count * eta +
min_delay * remaining_count * -mark_time +
min_delay * remaining_count * -min_delay * remaining_count +
-eta * eta +
-eta * -mark_time +
-eta * -min_delay * remaining_count +
mark_time * eta + mark_time * -mark_time + mark_time * -min_delay * remaining_count +
min_delay * remaining_count * min_delay * remaining_count + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay * min_delay * remaining_count - -min_delay * eta + -min_delay * mark_time +
min_delay * -2 * eta +
min_delay * -2 * -mark_time +
min_delay * -2 * -min_delay * remaining_count +
eta * -2 * min_delay + -mark_time * -2 * min_delay +
(eta - mark_time)**2 * 2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint27(mark_time, min_delay, eta, remaining_count):
return eta + (
eta * min_delay * remaining_count +
-mark_time * min_delay * remaining_count +
-min_delay**2 * remaining_count**2 +
-eta**2 +
eta * mark_time +
eta * min_delay * remaining_count +
eta * mark_time + -mark_time**2 + -mark_time * min_delay * remaining_count +
min_delay**2 * remaining_count**2 + -eta * min_delay * remaining_count + mark_time * min_delay * remaining_count +
-min_delay**2 * remaining_count + eta * min_delay + -mark_time * min_delay +
-2 * eta * min_delay +
2 * mark_time * min_delay +
2 * min_delay**2 * remaining_count +
-2 * eta * min_delay + 2 * mark_time * min_delay +
(eta - mark_time)**2 * 2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint28(mark_time, min_delay, eta, remaining_count):
return eta + (
-eta**2 +
eta * mark_time +
eta * mark_time +
eta * min_delay +
-2 * eta * min_delay +
-2 * eta * min_delay +
eta * min_delay * remaining_count +
eta * min_delay * remaining_count +
-eta * min_delay * remaining_count +
-mark_time**2 +
-mark_time * min_delay +
2 * mark_time * min_delay +
2 * mark_time * min_delay +
-mark_time * min_delay * remaining_count +
-mark_time * min_delay * remaining_count +
mark_time * min_delay * remaining_count +
-min_delay**2 * remaining_count +
2 * min_delay**2 * remaining_count +
-min_delay**2 * remaining_count**2 +
min_delay**2 * remaining_count**2 +
(eta - mark_time)**2 * 2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint29(mark_time, min_delay, eta, remaining_count):
return eta + (
-eta**2 +
2 * eta * mark_time +
-3 * eta * min_delay +
eta * min_delay * remaining_count +
-mark_time**2 +
3 * mark_time * min_delay +
-mark_time * min_delay * remaining_count +
min_delay**2 * remaining_count +
(eta - mark_time)**2 * 2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint30(mark_time, min_delay, eta, remaining_count):
return eta + (
-eta**2 +
2 * eta * mark_time +
-3 * eta * min_delay +
eta * min_delay * remaining_count +
-mark_time**2 +
3 * mark_time * min_delay +
-mark_time * min_delay * remaining_count +
min_delay**2 * remaining_count +
2 * (eta - mark_time)**2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint31(mark_time, min_delay, eta, remaining_count):
return (
eta * mark_time +
-3 * eta * min_delay +
-mark_time * mark_time +
3 * mark_time * min_delay +
-mark_time * min_delay * remaining_count +
min_delay * min_delay * remaining_count +
2 * (eta - mark_time)**2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint32(mark_time, min_delay, eta, remaining_count):
return (
(eta - mark_time) * mark_time +
(eta - mark_time) * -3 * min_delay +
(min_delay - mark_time) * (min_delay * remaining_count) +
2 * (eta - mark_time)**2 / remaining_count
) / (eta - mark_time - min_delay * remaining_count)
def timepoint33(mark_time, min_delay, eta, remaining_count):
return (
(eta - mark_time) * (mark_time - 3 * min_delay + (eta - mark_time) * 2 / remaining_count) -
(mark_time - min_delay) * (min_delay * remaining_count)
) / (eta - mark_time - min_delay * remaining_count)
def timepoint34(mark_time, min_delay, mark_remaining, remaining_count):
# mark_remaining = eta - mark_time
return (
mark_remaining * (mark_time - 3 * min_delay + 2 * mark_remaining / remaining_count) -
(mark_time - min_delay) * min_delay * remaining_count
) / (mark_remaining - min_delay * remaining_count)
import random
mark_time = random.random()
min_delay = random.random() * random.random()
eta = mark_time + random.random()
remaining_count = int(64*random.random())
print(timepoint(mark_time, min_delay, eta, remaining_count))
print(timepoint2(mark_time, min_delay, eta, remaining_count))
print(timepoint3(mark_time, min_delay, eta, remaining_count))
print(timepoint4(mark_time, min_delay, eta, remaining_count))
print(timepoint5(mark_time, min_delay, eta, remaining_count))
print(timepoint6(mark_time, min_delay, eta, remaining_count))
print(timepoint7(mark_time, min_delay, eta, remaining_count))
print(timepoint8(mark_time, min_delay, eta, remaining_count))
print(timepoint9(mark_time, min_delay, eta, remaining_count))
print(timepoint10(mark_time, min_delay, eta, remaining_count))
print(timepoint11(mark_time, min_delay, eta, remaining_count))
print(timepoint12(mark_time, min_delay, eta, remaining_count))
print(timepoint13(mark_time, min_delay, eta, remaining_count))
print(timepoint14(mark_time, min_delay, eta, remaining_count))
print(timepoint15(mark_time, min_delay, eta, remaining_count))
print(timepoint16(mark_time, min_delay, eta, remaining_count))
print(timepoint17(mark_time, min_delay, eta, remaining_count))
print(timepoint18(mark_time, min_delay, eta, remaining_count))
print(timepoint19(mark_time, min_delay, eta, remaining_count))
print(timepoint20(mark_time, min_delay, eta, remaining_count))
print(timepoint21(mark_time, min_delay, eta, remaining_count))
print(timepoint22(mark_time, min_delay, eta, remaining_count))
print(timepoint23(mark_time, min_delay, eta, remaining_count))
print(timepoint24(mark_time, min_delay, eta, remaining_count))
print(timepoint25(mark_time, min_delay, eta, remaining_count))
print(timepoint26(mark_time, min_delay, eta, remaining_count))
print(timepoint27(mark_time, min_delay, eta, remaining_count))
print(timepoint28(mark_time, min_delay, eta, remaining_count))
print(timepoint29(mark_time, min_delay, eta, remaining_count))
print(timepoint30(mark_time, min_delay, eta, remaining_count))
print(timepoint31(mark_time, min_delay, eta, remaining_count))
print(timepoint32(mark_time, min_delay, eta, remaining_count))
print(timepoint33(mark_time, min_delay, eta, remaining_count))
print(timepoint34(mark_time, min_delay, eta - mark_time, remaining_count))