113 lines
3.4 KiB
Plaintext
113 lines
3.4 KiB
Plaintext
/*
|
|
Biorhythms task for Rosetta Code
|
|
https://rosettacode.org/wiki/Biorhythms
|
|
|
|
Translated from FreeBASIC to FutureBasic
|
|
Rich Love May 24, 2024
|
|
|
|
Oct 16, 2024 fixed the percentage amounts
|
|
|
|
*/
|
|
|
|
|
|
|
|
local fn Gregorian(db As str255) As short
|
|
short M, Y, D
|
|
Y = val(Left$(db,4)) : M = Val(Mid$(db,6,2)) : D = Val(Right$(db,2))
|
|
short N = (M+9) - Int((M+9)/12) * 12
|
|
short W = Y - Int(N/10)
|
|
short G = 365 * W + Int(W/4) - Int(W/100) + Int(W/400)
|
|
G += Int((N*306+5)/10)+(D-1)
|
|
end fn = G
|
|
|
|
|
|
void local fn Biorhythm(Birthdate As str255, Targetdate As str255)
|
|
|
|
str255 TextArray(4,2)
|
|
TextArray(0,0) = "up and rising"
|
|
TextArray(1,0) = "up but falling"
|
|
TextArray(2,0) = "down and falling"
|
|
TextArray(3,0) = "down but rising"
|
|
TextArray(0,1) = "peak"
|
|
TextArray(1,1) = "transition"
|
|
TextArray(2,1) = "valley"
|
|
TextArray(3,1) = "transition"
|
|
|
|
|
|
short DaysBetween = fn Gregorian(Targetdate) - fn Gregorian(Birthdate) + 1
|
|
short positionP = DaysBetween Mod 23
|
|
short positionE = DaysBetween Mod 28
|
|
short positionM = DaysBetween Mod 33
|
|
short quadrantP = Int(4 * positionP / 23)
|
|
short quadrantE = Int(4 * positionE / 28)
|
|
short quadrantM = Int(4 * positionM / 33)
|
|
short percentageP = int(100 * Sin(2 * (pi * positionP) / 23))
|
|
short percentageE = int(100 * Sin(2 * (pi * positionE) / 28))
|
|
short percentageM = int(100 * Sin(2 * (pi * positionM) / 33))
|
|
|
|
str255 textP, textE, textM, Header1Text, Header2Text
|
|
|
|
|
|
Select Case percentageP
|
|
Case > 95
|
|
textP = "Physical day " + str$(positionP) + " : " + "peak"
|
|
Case < -95
|
|
textP = "Physical day " + str$(positionP) + " : " + "valley"
|
|
Case -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
|
|
textP = "Physical day " + str$(positionP) + " : " + "critical transition"
|
|
Case Else
|
|
textP = "Physical day " + str$(positionP) + " : " + str$(percentageP) + "% (" + TextArray(quadrantP,0) + ")"
|
|
End Select
|
|
|
|
Select Case percentageE
|
|
Case > 95
|
|
textE = "Emotional day " + STR$(positionE) + " : " + "peak"
|
|
Case < -95
|
|
textE = "Emotional day " + STR$(positionE) + " : " + "valley"
|
|
Case -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
|
|
textE = "Emotional day " + STR$(positionE) + " : " + "critical transition"
|
|
Case Else
|
|
textE = "Emotional day " + STR$(positionE) + " : " + str$(percentageE) + "% (" + TextArray(quadrantE,0) + ")"
|
|
End Select
|
|
|
|
Select Case percentageM
|
|
Case > 95
|
|
textM = "Mental day " + str$(positionM)+ " : " + "peak"
|
|
Case < - 95
|
|
textM = "Mental day " + str$(positionM) + " : " + "valley"
|
|
Case -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
|
|
textM = "Mental day " + str$(positionM) + " : " + "critical transition"
|
|
Case Else
|
|
textM = "Mental day " + str$(positionM) + " : " + str$(percentageM) + "% (" + TextArray(quadrantM,0) + ")"
|
|
End Select
|
|
|
|
Header1Text = "Born " + Birthdate + ", Target " + Targetdate
|
|
Header2Text = "Day " + str$(DaysBetween)
|
|
|
|
Print Header1Text
|
|
Print Header2Text
|
|
Print textP
|
|
Print textE
|
|
Print textM
|
|
Print
|
|
end fn
|
|
|
|
window 1, @"Biorhythms"
|
|
windowcenter(1)
|
|
WindowSetBackgroundColor(1,fn ColorBlack)
|
|
|
|
print
|
|
|
|
// Lets do four different birthdates and target dates
|
|
text ,,fn colorCyan
|
|
fn Biorhythm("1943-03-09", "1972-07-11")
|
|
text ,,fn colorGreen
|
|
fn Biorhythm("1809-02-12", "1863-11-19") // DOB for Abraham Lincoln
|
|
text ,,fn colorYellow
|
|
fn Biorhythm("1809-01-12", "1863-11-19")
|
|
text ,,fn colorWhite
|
|
fn Biorhythm("1943-03-09", "1972-07-11") // Bobby Fisher Chess Tournament
|
|
|
|
|
|
handleevents
|