From eeec149f96a11141f8ae6fc417de6620b821b773 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 12 Jan 2021 22:46:16 +0100 Subject: Consider valid day of week when handling duplicates --- bin/db-zugbildung-to-json | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/bin/db-zugbildung-to-json b/bin/db-zugbildung-to-json index 3010ad9..af22818 100755 --- a/bin/db-zugbildung-to-json +++ b/bin/db-zugbildung-to-json @@ -53,6 +53,12 @@ sub range_is_today { return; } +sub weekday_is_today { + my ($weekdys) = @_; + + return ( ${ $weekdys->[ $now->day_of_week - 1 ] } == 1 ); +} + my @weekdays = (qw(Mo Di Mi Do Fr Sa So)); my @months = (qw(0 I II III IV V VI VII VIII IX X XI XII)); my %weekday = map { ( $weekdays[$_] => $_ ) } ( 0 .. $#weekdays ); @@ -787,6 +793,36 @@ for my $train_no ( keys %map ) { if ( $valid_count == 1 ) { $smap{$train_no} = $latest_valid; } + else { + $valid_count = 0; + $latest_valid = undef; + for my $train ( @{ $map{$train_no} } ) { + my $is_valid = 0; + for my $schedule ( @{ $train->{schedules} // [] } ) { + for my $valid ( @{ $schedule->{valid} // [] } ) { + if ( range_is_today($valid) + and weekday_is_today( $schedule->{weekdays} ) ) + { + $is_valid = 1; + } + } + + # invalid may override valid for certain days + for my $invalid ( @{ $schedule->{invalid} // [] } ) { + if ( range_is_today($invalid) ) { + $is_valid = 0; + } + } + } + if ($is_valid) { + $latest_valid = $train; + $valid_count++; + } + } + if ( $valid_count == 1 ) { + $smap{$train_no} = $latest_valid; + } + } } } -- cgit v1.2.3