• Put 2 million random dates in RAM:

    From Relf@21:1/5 to All on Sun Dec 31 08:46:16 2023
    DFS
    Challenge me to do ANYTHING computing/OS-related that you're also willing to do.

    Put 2 million random dates in RAM:
    // 0.852 Seconds. 1999-05-09, 2031-06-17, 2021-09-11, 1977-08-11, 2021-02-21,

    const int NumDates = 2000000, StartYear = 1970, Years = 100, szDate = 12 ; wchar_t *Out, *D; D = Out = MallocTmp( NumDates*szDate*szChr + szChr ); __int64 Sec, TotalSecs, Min, Max ;
    tm Rec, rTimeB = {}, rTimeE ;
    rTimeB.tm_mday = 1, rTimeB.tm_year = StartYear - 1900, rTimeB.tm_isdst = -1 ; rTimeE = rTimeB, rTimeE.tm_year += Years ;
    Min = mktime( &rTimeB ), Max = mktime( &rTimeE ), TotalSecs = Max - Min ; double Mark = UpSecs ;
    LoopJ(NumDates) { Sec = Min + float(TotalSecs)*rand()/RAND_MAX ;
    Rec = *localtime( ( time_t * ) &Sec ); D += swprintf( D, L"%d-%02d-%02d, ",
    Rec.tm_year + 1900, Rec.tm_mon, Rec.tm_mday ); }

    Out[5*szDate] = 0, Sh( L"%.3f Seconds. %s", UpSecs - Mark, Out );

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From DFS@21:1/5 to Relf on Sun Dec 31 14:23:27 2023
    On 12/31/2023 11:46 AM, Relf wrote:
    DFS
    Challenge me to do ANYTHING computing/OS-related that you're also willing to do.

    Put 2 million random dates in RAM:
    // 0.852 Seconds. 1999-05-09, 2031-06-17, 2021-09-11, 1977-08-11, 2021-02-21,

    const int NumDates = 2000000, StartYear = 1970, Years = 100, szDate = 12 ; wchar_t *Out, *D; D = Out = MallocTmp( NumDates*szDate*szChr + szChr ); __int64 Sec, TotalSecs, Min, Max ;
    tm Rec, rTimeB = {}, rTimeE ;
    rTimeB.tm_mday = 1, rTimeB.tm_year = StartYear - 1900, rTimeB.tm_isdst = -1 ; rTimeE = rTimeB, rTimeE.tm_year += Years ;
    Min = mktime( &rTimeB ), Max = mktime( &rTimeE ), TotalSecs = Max - Min ; double Mark = UpSecs ;
    LoopJ(NumDates) { Sec = Min + float(TotalSecs)*rand()/RAND_MAX ;
    Rec = *localtime( ( time_t * ) &Sec ); D += swprintf( D, L"%d-%02d-%02d, ",
    Rec.tm_year + 1900, Rec.tm_mon, Rec.tm_mday ); }

    Out[5*szDate] = 0, Sh( L"%.3f Seconds. %s", UpSecs - Mark, Out );


    We need the whole working program.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Relf@21:1/5 to All on Sun Dec 31 11:33:02 2023
    You (DFS) replied ( to me ):
    Put 2 million random dates in RAM:
    // 0.852 Seconds. 1999-05-09, 2031-06-17, 2021-09-11, 1977-08-11, 2021-02-21,
    Out[5*szDate] = 0, Sh( L"%.3f Seconds. %s", UpSecs - Mark, Out );

    We need the whole working program.

    You see the output, I got the idea from you, that's enough.

    For added context, see "z1.CPP" in "Jeff-Relf.Me/z1.ZIP".

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From DFS@21:1/5 to Relf on Sun Dec 31 16:02:55 2023
    On 12/31/2023 11:46 AM, Relf wrote:
    DFS
    Challenge me to do ANYTHING computing/OS-related that you're also willing to do.

    Put 2 million random dates in RAM:
    // 0.852 Seconds. 1999-05-09, 2031-06-17, 2021-09-11, 1977-08-11, 2021-02-21,

    const int NumDates = 2000000, StartYear = 1970, Years = 100, szDate = 12 ; wchar_t *Out, *D; D = Out = MallocTmp( NumDates*szDate*szChr + szChr ); __int64 Sec, TotalSecs, Min, Max ;
    tm Rec, rTimeB = {}, rTimeE ;
    rTimeB.tm_mday = 1, rTimeB.tm_year = StartYear - 1900, rTimeB.tm_isdst = -1 ; rTimeE = rTimeB, rTimeE.tm_year += Years ;
    Min = mktime( &rTimeB ), Max = mktime( &rTimeE ), TotalSecs = Max - Min ; double Mark = UpSecs ;
    LoopJ(NumDates) { Sec = Min + float(TotalSecs)*rand()/RAND_MAX ;
    Rec = *localtime( ( time_t * ) &Sec ); D += swprintf( D, L"%d-%02d-%02d, ",
    Rec.tm_year + 1900, Rec.tm_mon, Rec.tm_mday ); }

    Out[5*szDate] = 0, Sh( L"%.3f Seconds. %s", UpSecs - Mark, Out );



    ----------------------------------------------------------------------
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <Windows.h>

    LARGE_INTEGER frequency,start,end;
    double elapsedtime(LARGE_INTEGER startingtimer)
    {
    QueryPerformanceCounter(&end);
    return (end.QuadPart - startingtimer.QuadPart) /
    (double)frequency.QuadPart;
    }


    int main(int argc, char *argv[])
    {

    int rdates = atoi(argv[1]);
    int startYear = atoi(argv[2]);
    int endYear = atoi(argv[3]);

    int daysRange = 365 * (endYear - startYear + 1);
    int secsYear = 86400;

    struct tm sdt = {0,0,0,1,0,(startYear-1900)};
    time_t sdts = mktime(&sdt);

    struct tm *rdt;
    char rdate[15];
    srand(time(NULL));

    int toscreen = 0; //0 = print a few dates to screen

    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&start);

    int *datearray = malloc(sizeof(int) * rdates);

    for(int i=0; i<rdates; i++)
    {
    time_t rsecs = sdts + (secsYear * (rand() % daysRange));
    datearray[i] = rsecs;

    //if printing to screen
    if (toscreen==0) {
    if (i < 5 || i > (rdates - 6)) {
    rdt = localtime(&rsecs);
    strftime(rdate,sizeof(rdate),"%Y-%m-%d %a",rdt);
    printf("%d. %s\n",i+1,rdate);
    }
    }
    }
    printf("\n\n%.2fs to generate %d random dates in the years %d to %d\n",elapsedtime(start),rdates,startYear,endYear);

    return 0;
    }
    ----------------------------------------------------------------------

    $ tcc -Wall randomdates.c -o randomdates.exe

    $ randomdates 2000000 2020 2030
    1. 2026-04-24 Fri
    2. 2021-05-21 Fri
    3. 2022-07-22 Fri
    4. 2025-12-27 Sat
    5. 2029-04-09 Mon
    1999996. 2020-06-09 Tue
    1999997. 2027-03-05 Fri
    1999998. 2030-07-30 Tue
    1999999. 2023-04-28 Fri
    2000000. 2023-11-12 Sun

    0.02s to generate 2000000 random dates in the years 2020 to 2030

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From candycanearter07@21:1/5 to DFS on Sun Dec 31 17:20:40 2023
    On 12/31/23 15:02, DFS wrote:
    int main(int argc, char *argv[])
    {

       int rdates    = atoi(argv[1]);
       int startYear = atoi(argv[2]);
       int endYear   = atoi(argv[3]);

    Shouldn't you check argc to prevent a segfault when running with fewer arguments?
    --
    user <candycane> is generated from /dev/urandom

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From DFS@21:1/5 to All on Sun Dec 31 19:10:41 2023
    On 12/31/2023 6:20 PM, candycanearter07 wrote:
    On 12/31/23 15:02, DFS wrote:
    int main(int argc, char *argv[])
    {

        int rdates    = atoi(argv[1]);
        int startYear = atoi(argv[2]);
        int endYear   = atoi(argv[3]);

    Shouldn't you check argc to prevent a segfault when running with fewer arguments?


    If it was public-facing code I would put in validations, some help, a
    version, a date, and a public domain declaration.

    I am curious about the randomness of the data. I may add some code to
    write the data to a SQLite table and do some querying against it.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Relf@21:1/5 to All on Sun Dec 31 18:29:59 2023
    Re: Put 2 million random dates in RAM.

    DFS:
    int daysRange = 365 * (endYear - startYear + 1);
    int secsYear = 86400;

    There are 365.2425 days/year.

    int *datearray = malloc( sizeof(int) * rdates );
    struct tm sdt = {0,0,0,1,0,(startYear-1900)};
    time_t sdts = mktime(&sdt);
    time_t rsecs = sdts + (secsYear * (rand() % daysRange));
    datearray[i] = rsecs;

    "time_t", a 64-bit integer, doesn't fit in an array of 32-bit integers.

    Whereas you're ATTEMPTING to store seconds since the UNIX epoch (1970),
    I was storing 12 character strings.

    $ randomdates 2000000 2020 2030
    1999996. 2020-06-09 Tue
    1999997. 2027-03-05 Fri
    1999998. 2030-07-30 Tue
    1999999. 2023-04-28 Fri
    2000000. 2023-11-12 Sun

    0.02s to generate 2000000 random dates in the years 2020 to 2030

    Sh( L"%.3f Seconds. %s", UpSecs - Mark, Console );
    0.032 Seconds. 2027-08-22, 2022-04-26, 2028-04-15, 2029-04-09, 2028-00-27

    const int NumDates = 2000000, StartYear = 2020, Years = 10 ;
    int *Out; Out = (pInt)MallocTmp( NumDates*szInt );
    __int64 Sec, TotalSecs, Min, Max ;
    wchar_t Console[100], *D = Console;
    tm Rec, rTimeB = {}, rTimeE ;
    rTimeB.tm_mday = 1, rTimeB.tm_year = StartYear - 1900, rTimeB.tm_isdst = -1 ; rTimeE = rTimeB, rTimeE.tm_year += Years ;
    Min = mktime( &rTimeB ), Max = mktime( &rTimeE ), TotalSecs = Max - Min ; double Mark = UpSecs ;
    LoopJ(NumDates) { Sec = Out[ J ] = float(TotalSecs)*rand()/RAND_MAX ;
    if ( J < NumDates - 5 ) continue ; Sec += Min ;
    Rec = *localtime( ( time_t * ) &Sec ); D += swprintf( D, L"%d-%02d-%02d, ",
    Rec.tm_year + 1900, Rec.tm_mon, Rec.tm_mday ); }

    Sh( L"%.3f Seconds. %s", UpSecs - Mark, Console );

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From candycanearter07@21:1/5 to DFS on Mon Jan 1 16:30:07 2024
    On 12/31/23 18:10, DFS wrote:
    On 12/31/2023 6:20 PM, candycanearter07 wrote:
    On 12/31/23 15:02, DFS wrote:
    int main(int argc, char *argv[])
    {

        int rdates    = atoi(argv[1]);
        int startYear = atoi(argv[2]);
        int endYear   = atoi(argv[3]);

    Shouldn't you check argc to prevent a segfault when running with fewer
    arguments?


    If it was public-facing code I would put in validations, some help, a version, a date, and a public domain declaration.

    I am curious about the randomness of the data.  I may add some code to
    write the data to a SQLite table and do some querying against it.

    Fair enough.
    --
    user <candycane> is generated from /dev/urandom

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From rbowman@21:1/5 to All on Mon Jan 1 23:35:06 2024
    On Mon, 1 Jan 2024 16:30:07 -0600, candycanearter07 wrote:

    On 12/31/23 18:10, DFS wrote:

    I am curious about the randomness of the data.  I may add some code to
    write the data to a SQLite table and do some querying against it.

    Fair enough.

    Caution: you're about to go down a statistical rabbit hole.

    https://en.wikipedia.org/wiki/Diehard_tests

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)