Data Update
This commit is contained in:
parent
015c2add84
commit
e50b5c3114
206 changed files with 6337 additions and 523 deletions
78
Task/Biorhythms/C++/biorhythms.cpp
Normal file
78
Task/Biorhythms/C++/biorhythms.cpp
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
#include <chrono>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <numbers>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
const double tau = 2 * std::numbers::pi;
|
||||
const std::vector<std::string> cycles { "PHYSICAL", "EMOTIONAL", "MENTAL" };
|
||||
const std::vector<std::int32_t> cycle_lengths { 23, 28, 33 };
|
||||
const std::vector<std::vector<std::string>> descriptions { { "up and rising", "peak" },
|
||||
{ "up but falling", "transition" },
|
||||
{ "down and falling", "valley" },
|
||||
{ "down but rising", "transition" } };
|
||||
|
||||
std::string to_string(const std::chrono::sys_days& sys_date) {
|
||||
std::stringstream stream;
|
||||
stream << sys_date;
|
||||
std::string iso_date;
|
||||
stream >> iso_date;
|
||||
return iso_date;
|
||||
}
|
||||
|
||||
std::chrono::sys_days create_date(const std::string& iso_date) {
|
||||
const int year = std::stoi(iso_date.substr(0, 4));
|
||||
const unsigned int month = std::stoi(iso_date.substr(5, 7));
|
||||
const unsigned int day = std::stoi(iso_date.substr(8, 10));
|
||||
|
||||
std::chrono::year_month_day date{std::chrono::year{year}, std::chrono::month{month}, std::chrono::day{day}};
|
||||
return std::chrono::sys_days(date);
|
||||
}
|
||||
|
||||
void biorhythms(const std::vector<std::string>& date_pair) {
|
||||
std::chrono::sys_days birth_date = create_date(date_pair[0]);
|
||||
std::chrono::sys_days target_date = create_date(date_pair[1]);
|
||||
int32_t days_between = ( target_date - birth_date ).count();
|
||||
std::cout << "Birth date " << birth_date << ", Target date " << target_date << std::endl;
|
||||
std::cout << "Days between: " << days_between << std::endl;
|
||||
|
||||
for ( int32_t i = 0; i < 3; ++i ) {
|
||||
const int32_t cycle_length = cycle_lengths[i];
|
||||
const int32_t position_in_cycle = days_between % cycle_length;
|
||||
const int32_t quadrant_index = 4 * position_in_cycle / cycle_length;
|
||||
const int32_t percentage = round(100 * sin(tau * position_in_cycle / cycle_length));
|
||||
|
||||
std::string description;
|
||||
if ( percentage > 95 ) {
|
||||
description = "peak";
|
||||
} else if ( percentage < -95 ) {
|
||||
description = "valley";
|
||||
} else if ( abs(percentage) < 5 ) {
|
||||
description = "critical transition";
|
||||
} else {
|
||||
const int32_t days_to_transition = ( cycle_length * ( quadrant_index + 1 ) / 4 ) - position_in_cycle;
|
||||
std::chrono::sys_days transition_date = target_date + std::chrono::days{days_to_transition};
|
||||
std::string trend = descriptions[quadrant_index][0];
|
||||
std::string next_transition = descriptions[quadrant_index][1];
|
||||
description = std::to_string(percentage) + "% (" + trend + ", next " + next_transition
|
||||
+ " " + to_string(transition_date) + ")";
|
||||
}
|
||||
|
||||
std::cout << cycles[i] << " day " << position_in_cycle << ": " << description << std::endl;
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
int main() {
|
||||
const std::vector<std::vector<std::string>> date_pairs = {
|
||||
{ "1943-03-09", "1972-07-11" },
|
||||
{ "1809-01-12", "1863-11-19" },
|
||||
{ "1809-02-12", "1863-11-19" } };
|
||||
|
||||
for ( const std::vector<std::string>& date_pair : date_pairs ) {
|
||||
biorhythms(date_pair);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,4 +3,3 @@ gcc -o cbio cbio.c -lm
|
|||
Age: 10717 days
|
||||
Physical cycle: -27%
|
||||
Emotional cycle: -100%
|
||||
Intellectual cycle: -100%
|
||||
|
|
|
|||
76
Task/Biorhythms/Java/biorhythms.java
Normal file
76
Task/Biorhythms/Java/biorhythms.java
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
|
||||
public final class Biorythms {
|
||||
|
||||
public static void main(String[] aArgs) {
|
||||
List<List<String>> datePairs = List.of(
|
||||
List.of( "1943-03-09", "1972-07-11" ),
|
||||
List.of( "1809-01-12", "1863-11-19" ),
|
||||
List.of( "1809-02-12", "1863-11-19" ));
|
||||
|
||||
for ( List<String> datePair : datePairs ) {
|
||||
biorhythms(datePair);
|
||||
}
|
||||
}
|
||||
|
||||
private static void biorhythms(List<String> aDatePair) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
|
||||
LocalDate birthDate = LocalDate.parse(aDatePair.get(0), formatter);
|
||||
LocalDate targetDate = LocalDate.parse(aDatePair.get(1), formatter);
|
||||
final int daysBetween = (int) ChronoUnit.DAYS.between(birthDate, targetDate);
|
||||
System.out.println("Birth date " + birthDate + ", Target date " + targetDate);
|
||||
System.out.println("Days between: " + daysBetween);
|
||||
|
||||
for ( Cycle cycle : Cycle.values() ) {
|
||||
final int cycleLength = cycle.length();
|
||||
final int positionInCycle = daysBetween % cycleLength;
|
||||
final int quadrantIndex = 4 * positionInCycle / cycleLength;
|
||||
final int percentage = (int) Math.round(100 * Math.sin(2 * Math.PI * positionInCycle / cycleLength));
|
||||
|
||||
String description;
|
||||
if ( percentage > 95 ) {
|
||||
description = "peak";
|
||||
} else if ( percentage < -95 ) {
|
||||
description = "valley";
|
||||
} else if ( Math.abs(percentage) < 5 ) {
|
||||
description = "critical transition";
|
||||
} else {
|
||||
final int daysToTransition = ( cycleLength * ( quadrantIndex + 1 ) / 4 ) - positionInCycle;
|
||||
LocalDate transitionDate = targetDate.plusDays(daysToTransition);
|
||||
List<String> descriptions = cycle.descriptions(quadrantIndex);
|
||||
String trend = descriptions.get(0);
|
||||
String nextTransition = descriptions.get(1);
|
||||
description = percentage + "% (" + trend + ", next " + nextTransition + " " + transitionDate + ")";
|
||||
}
|
||||
|
||||
System.out.println(cycle + " day " + positionInCycle + ": " + description);
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private enum Cycle {
|
||||
PHYSICAL(23), EMOTIONAL(28), MENTAL(33);
|
||||
|
||||
public int length() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public List<String> descriptions(int aNumber) {
|
||||
return DESCRIPTIONS.get(aNumber);
|
||||
}
|
||||
|
||||
private Cycle(int aLength) {
|
||||
length = aLength;
|
||||
}
|
||||
|
||||
private final int length;
|
||||
|
||||
private static final List<List<String>> DESCRIPTIONS = List.of(
|
||||
List.of( "up and rising", "peak" ), List.of( "up but falling", "transition" ),
|
||||
List.of( "down and falling", "valley" ), List.of( "down but rising", "transition" ));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,23 +1,67 @@
|
|||
/*REXX pgm shows the states of a person's biorhythms (physical, emotional, intellectual)*/
|
||||
parse arg birthdate targetDate . /*obtain one or two dates from the C.L.*/
|
||||
days= daysbet2(birthdate targetDate) /*invoke the 2nd version of a REXX pgm.*/
|
||||
if days==0 then do; say; say 'The two dates specified are exacty the same.'; exit 1
|
||||
end
|
||||
cycles= 'physical emotional intellectual' /*the names of each biorhythm cycle*/
|
||||
cycle = 'negative neutral positive' /* " states of " " " */
|
||||
@.1= 23; @.2= 28; @.3= 33 /* " # of days in " " " */
|
||||
pid2= pi() * 2 * days /*calculate pi * t * number─of─days. */
|
||||
/*REXX pgm shows the states of a person's biorhythms */
|
||||
/* (physical, emotional, intellectual) */
|
||||
Parse Arg birthdate targetdate . /* obtain one or two dates from CL */
|
||||
If birthdate='?' Then Do
|
||||
Say 'rexx bio birthdate (yyyymmdd) shows you today''s biorhythms'
|
||||
Say 'or enter your birthday now'
|
||||
Parse Pull birthdate
|
||||
If birthdate='' Then Exit
|
||||
End
|
||||
If birthdate='' Then
|
||||
Parse Value 19460906 20200906 With birthdate targetdate
|
||||
If targetdate='' Then
|
||||
targetdate=Date('S')
|
||||
days=daysbet2(birthdate,targetdate)
|
||||
If days==0 Then Do
|
||||
Say
|
||||
Say 'The two dates specified are exacty the same.'
|
||||
Exit 1
|
||||
End
|
||||
cycles='physical emotional intellectual' /*the biorhythm cycle names */
|
||||
cycle='negative neutral positive'
|
||||
period.1=23
|
||||
period.2=28
|
||||
period.3=33
|
||||
pid2=pi()*2*days
|
||||
say 'Birthdate: ' birthdate '('translate('gh.ef.abcd',birthdate,'abcdefgh')')'
|
||||
say 'Today: ' targetdate '('translate('gh.ef.abcd',targetdate,'abcdefgh')')'
|
||||
Say 'Elapsed days:' days
|
||||
Do j=1 To 3
|
||||
state=2+sign(sin(pid2/period.j)) /* obtain state for each biorhythm */
|
||||
Say 'biorhythm for the' right(word(cycles,j),12) 'cycle is',
|
||||
word(cycle,state)
|
||||
End
|
||||
Exit
|
||||
/*---------------------------------------------------------------------*/
|
||||
pi:
|
||||
pi=3.1415926535897932384626433832795028841971693993751058209749445923078
|
||||
Return pi
|
||||
r2r:
|
||||
Return arg(1)//(pi()*2) /* normalize radians --? a unit ci*/
|
||||
/*--------------------------------------------------------------------------------------*/
|
||||
sin: Procedure
|
||||
Parse Arg x
|
||||
x=r2r(x)
|
||||
_=x
|
||||
Numeric Fuzz min(5,max(1,digits()-3))
|
||||
If x=pi*.5 Then
|
||||
Return 1
|
||||
If x==pi*1.5 Then
|
||||
Return-1
|
||||
If abs(x)=pi|x=0 Then
|
||||
Return 0
|
||||
q=x*x
|
||||
z=x
|
||||
Do k=2 By 2 Until p=z
|
||||
p=z
|
||||
_=-_*q/(k*k+k)
|
||||
z=z+_
|
||||
End
|
||||
Return z
|
||||
|
||||
do j=1 for 3
|
||||
state= 2 + sign( sin( pid2 / @.j) ) /*obtain state for each biorhythm cycle*/
|
||||
say 'biorhythm for the' right(word(cycles,j),12) "cycle is" word(cycle, state)
|
||||
end /*j*/ /* [↑] get state for each biorhythm. */
|
||||
exit 0 /*stick a fork in it, we're all done. */
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
pi: pi= 3.1415926535897932384626433832795028841971693993751058209749445923078; return pi
|
||||
r2r: return arg(1) // (pi() * 2) /*normalize radians ──► a unit circle. */
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
sin: procedure; parse arg x; x= r2r(x); _= x; numeric fuzz min(5, max(1, digits() -3))
|
||||
if x=pi * .5 then return 1; if x==pi*1.5 then return -1
|
||||
if abs(x)=pi | x=0 then return 0; q= x*x; z= x
|
||||
do k=2 by 2 until p=z; p= z; _= -_ *q/(k*k+k); z= z+_; end; return z
|
||||
daysbet2: Procedure
|
||||
/* compute the number of days between fromdate and todate */
|
||||
Parse Arg fromdate,todate
|
||||
fromday=date('B',fromdate,'S')
|
||||
today=date('B',todate,'S')
|
||||
Return today-fromday
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue