diff options
author | Daniel Friesel <derf@finalrewind.org> | 2020-04-19 17:40:39 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2020-04-19 17:40:39 +0200 |
commit | 5ce4bc6995da0b49783c15a66075e5e4f1545875 (patch) | |
tree | aeea7da0654d49bf62f9ffb8ba0c2e75159b9087 /lib/Travelynx | |
parent | a3cfa598a6de9e053a5228be3ee5088ea0eabc18 (diff) |
improve commute station heuristic
Select top station on work days (Mo .. Fr) with arrival < 13:00 or
departure >= 13:00.
Diffstat (limited to 'lib/Travelynx')
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index db70368..1eef0c8 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -5,7 +5,7 @@ use DateTime; use DateTime::Format::Strptime; use JSON; use List::Util qw(uniq min max); -use List::UtilsBy qw(uniq_by); +use List::UtilsBy qw(max_by uniq_by); use List::MoreUtils qw(first_index); use Travel::Status::DE::IRIS::Stations; @@ -517,22 +517,27 @@ sub commute { ); my $interval_end = $interval_start->clone->add( years => 1 ); - if ( not $station ) { - my @top_station_ids = $self->get_top_destinations( - after => $interval_start, - before => $interval_end, - ); - if (@top_station_ids) { - $station = $top_station_ids[0][1]; - } - } - my @journeys = $self->get_user_travels( after => $interval_start, before => $interval_end, with_datetime => 1, ); + if ( not $station ) { + my %candidate_count; + for my $journey (@journeys) { + my $dep = $journey->{rt_departure}; + my $arr = $journey->{rt_arrival}; + if ( $arr->dow <= 5 and $arr->hour <= 12 ) { + $candidate_count{ $journey->{to_name} }++; + } + elsif ( $dep->dow <= 5 and $dep->hour > 12 ) { + $candidate_count{ $journey->{from_name} }++; + } + } + $station = max_by { $candidate_count{$_} } keys %candidate_count; + } + my %journeys_by_month; my %count_by_month; my $total = 0; |