/*
    第2種情報処理技術者試験    平成8年度・秋期・午後 問7
                                BohYoh Shibata PREPARATION
*/

#include  <stdio.h>
#include  <string.h>

#define   ADSIZE   66
#define   LOGMAX   128

typedef struct  { int cnt; char *urlp; } ADDR;
typedef struct  { int cnt; int hour; } JI;
typedef struct  { long yymmdd; int hhmm; char arec[ADSIZE]; } LOG;

void    sort_addr( ADDR*, int );
void    sort_ji( JI*, int );

ADDR    loginf[LOGMAX];
char    logbuf[LOGMAX*ADSIZE];
JI      ji_t[24];

main()
{
    LOG    ibuf;
    char   *cp, sbuf[ADSIZE];
    FILE   *wfp;
    int    rcnt=0, idx= -1 , i;

    for ( i=0; i<24; i++ ) {
        ji_t[i].cnt  = 0;
        ji_t[i].hour = i;
    }
    wfp = fopen( "www.log", "r" );
    sbuf[0] = '\0';
    cp = logbuf;
    while ( fscanf( wfp, "%ld %d %s\n",
             &ibuf.yymmdd, &ibuf.hhmm, ibuf.arec) != EOF) {
        rcnt++;
        ji_t[ ibuf.hhmm / 100 ].cnt++;
        if ( strcmp( sbuf, ibuf.arec ) == 0 )
            loginf[idx-1].cnt++;
        else {
            loginf[idx].urlp = cp;
            loginf[idx].cnt = 1;
            strcpy( loginf[idx].urlp, ibuf.arec );
            cp += (strlen( ibuf.arec )+1 );
            strcpy( sbuf, ibuf.arec );
            idx++;
        }
    }
    fclose(wfp);

    sort_addr( loginf, idx );
    printf( "    ***  アクセス回数表 ***\n" );
    printf( " 順位 アクセス回数    アクセス先\n" );
    for( i=0; i<5; i++, idx-- ){
        if ( idx == 0 ) break;
        printf( "  %d  %6d回 %s\n", i+1, loginf[i].cnt, loginf[i].urlp );
    }
    sort_ji( ji_t, 24 );
    printf( "\n    *** アクセス時間帯表 ***\n" );
    printf( " 順位 時間帯 アクセス比率\n" );
    for( i=0; i<5; i++ ) {
        if ( ji_t[i].cnt == 0 ) break;
        printf( "   %d  %2d時台   %3ld%%\n",
                 i+1, ji_t[i].hour, ji_t[i].cnt*100L/ rcnt );
    }
}