46 lines
1.6 KiB
Text
46 lines
1.6 KiB
Text
import "./date" for Date
|
|
import "./fmt" for Fmt
|
|
|
|
var cycles = ["Physical day ", "Emotional day", "Mental day "]
|
|
var lengths = [23, 28, 33]
|
|
var quadrants = [
|
|
["up and rising", "peak"],
|
|
["up but falling", "transition"],
|
|
["down and falling", "valley"],
|
|
["down but rising", "transition"]
|
|
]
|
|
|
|
var biorhythms = Fn.new { |birthDate, targetDate|
|
|
var bd = Date.parse(birthDate)
|
|
var td = Date.parse(targetDate)
|
|
var days = (td - bd).days
|
|
Date.default = Date.isoDate
|
|
System.print("Born %(birthDate), Target %(targetDate)")
|
|
System.print("Day %(days)")
|
|
for (i in 0..2) {
|
|
var length = lengths[i]
|
|
var cycle = cycles[i]
|
|
var position = days % length
|
|
var quadrant = (position / length * 4).floor
|
|
var percent = ((2 * Num.pi * position / length).sin * 1000).floor / 10
|
|
var descript = (percent > 95) ? " peak" :
|
|
(percent < -95) ? " valley" :
|
|
(percent.abs < 5) ? " critical transition" : "other"
|
|
if (descript == "other") {
|
|
var transition = td.addDays(((quadrant + 1) / 4 * length).floor - position)
|
|
var tn = quadrants[quadrant]
|
|
var trend = tn[0]
|
|
var next = tn[1]
|
|
descript = Fmt.swrite("$5.1f\% ($s, next $s $s)", percent, trend, next, transition)
|
|
}
|
|
Fmt.print("$s $2d : $s", cycle, position, descript)
|
|
}
|
|
System.print()
|
|
}
|
|
|
|
var datePairs = [
|
|
["1943-03-09", "1972-07-11"],
|
|
["1809-01-12", "1863-11-19"],
|
|
["1809-02-12", "1863-11-19"] // correct DOB for Abraham Lincoln
|
|
]
|
|
for (datePair in datePairs) biorhythms.call(datePair[0], datePair[1])
|