Facile con un po' di Perl!
Anzitutto la definizione: per distanza interessante intendo un numero di giorni multiplo di 10, anzi meglio, potenza di 10, ovvero
100
, 1000
, ecc.Detto questo, costruiamo la struttura base:
#!env perl
use v5.20;
use DateTime;
my $begin = DateTime->new( year => ..., month => .., day => .. );
my $now = $begin->clone();
my $dates = [
{ day => 4, month => 7 }
, { day => 19, month => 7 }
...
];
push @$dates, { day => $begin->day, month => $begin->month };
my $base = 10;
Con
$begin
si indica la data di partenza, mentre in $dates
si inseriscono giorno e mese di alcune date a voi significative.Per capirsi,
$begin
potrebbe essere la data di nascita di vostro figlio e $dates
contenere il vostro matrimonio, laurea, ecc.Da notare che inserisco automaticamente la data di partenza nell'array delle date da cercare, così da valutare la data contro se stessa
spostata chiaramente di alcuni anni.
Fino a qui, nulla di sorprendente. Beh, anche il resto è abbstanza noioso:
for ( 1 .. 100 ){
$now->add( years => 1 );
for my $when ( @$dates ){
$now->set( day => $when->{ day }, month => $when->{month} );
my $delta = ( $now->epoch - $begin->epoch ) / ( 60 * 60 * 24 );
next if ( $delta % $base != 0 );
say "La data " . $now->dmy . " si trova a $delta giorni da " . $begin->dmy
if ( ( log( $delta )/log( $base ) ) =~ /^\d+$/ );
}
}
In un ciclo di 100 anni (perché oltre diventa poco interessante, almeno per voi visto che non ci sarete piu') si processa un anno alla volta
sommandolo alla data di partenza
$now
(clone della vera data). Contro tale "annata" si testano tutte le date ricercate per vedere sela distanza in giorni
$delta
è multiplo di 10 ($base
) e piu' precisamente se è un logaritmo in base 10.Solo di quelle date si effettua una stampa a video.