Scraper Bots X34719


Statement
 

pdf   zip

thehtml

L’empresa Digital Pond disposa del registre de visites a la seva web (també anomenat el log) des de tots els ordinadors del món. El registre és cronològic i té el següent format:

72.91.13.24  /favicon.ico  11797
62.55.11.182 /index.html   15244
13.13.4.81   /js/main.js   17912
171.82.6.28  /login        21892
72.91.13.24  /index.html   29265
171.82.6.28  /detail?id=13 54401
...

A cada línia del registre hi ha un accés a una pàgina del servidor web, amb la IP (adreça d’internet numèrica de l’ordinador que inicia la connexió), la ruta o path dins de la web (p.e. /index.html), i finalment l’instant de temps de la connexió (que es mesura en mil·lisegons des del moment d’iniciar el servidor web).

Digital Pond ens demana que fem un programa per detectar scraper bots, que són programes que rastregen la web a molta velocitat, descarregant totes les pàgines que van trobant. Aquests programes poden ser ben intencionats(com el Google Bot), però també poden ser utilitzats per a l’extracció de dades de la web sense permís.

Sigui a1, a2, …, an la seqüència d’accessos des d’una IP donada, per exemple, 89.68.225.93. Considerarem que aquesta IP és un bot si la seqüència d’accessos conté una subseqüència de 20 accessos consecutius ai, …, ai+19 amb 1 ≤ in−19 tal que time(ak+1) − time(ak) < 100, amb iki+18, i a on time(a) és el temps de l’accés a. Un reguitzell d’accessos amb diferències de temps tan petites és un ritme de visites impossible per a un humà i per tant demostra que l’accés prové d’una màquina.

Entrada

El llistat d’accessos a la web, un per línia: la IP, el path i un temps en mil·lisegons, que representa el temps transcorregut des de l’inici de l’execució del servidor.

Sortida

Si no hi ha bots, una línia amb "No bots". En cas contrari, tantes línies com bots s’hagin trobat, i en cadascuna la IP seguida de tots els paths consultats pel bot (incloent els que estan fora de la subseqüència que l’ha delatat), separats per un espai, i per ordre lexicogràfic. Les diferents IPs també s’han desciure per ordre lexicogràfic, malgrat les IPs siguin numèriques.(En ordre lexicogràfic, la IP "111.2.2.2" és més petita que "2.2.2.2", perquè, si es miren els dígits com lletres, el dígit 1 és més petit que el dígit 2.)

Public test cases
  • Input

      63.244.195.58 /help/faq/shipping 76
    235.184.182.163 /products/142 77
    235.184.182.163 /products/142 103
      63.244.195.58 /products/97 351
    235.184.182.163 /index.html 612
      63.244.195.58 /help/faq/shipping 949
    235.184.182.163 /login 1246
    235.184.182.163 /index.html 1323
      63.244.195.58 /login 1876
      63.244.195.58 /help/faq/shipping 1886
    235.184.182.163 /products/142 2256
    235.184.182.163 /products/97 2496
      63.244.195.58 /help/faq/shipping 2553
      63.244.195.58 /checkout 2738
      63.244.195.58 /login 3332
    235.184.182.163 /products/142 3372
    

    Output

    No bots
    
  • Input

       191.55.50.46 /h 121
       191.55.50.46 /2 173
       191.55.50.46 /g 583
       191.55.50.46 /a 1180
       191.55.50.46 /3 1430
     212.207.160.47 /3 2016
     212.207.160.47 /b 2042
     212.207.160.47 /3 2048
     212.207.160.47 /d 2128
       191.55.50.46 /h 2175
     212.207.160.47 /c 2209
     212.207.160.47 /3 2249
     212.207.160.47 /c 2266
     212.207.160.47 /f 2365
     212.207.160.47 /2 2422
     212.207.160.47 /3 2483
     212.207.160.47 /3 2537
     212.207.160.47 /2 2542
     212.207.160.47 /2 2558
     212.207.160.47 /e 2639
     212.207.160.47 /2 2670
     212.207.160.47 /c 2700
     212.207.160.47 /f 2798
     212.207.160.47 /a 2823
     212.207.160.47 /g 2922
     212.207.160.47 /3 3009
       191.55.50.46 /b 3114
       191.55.50.46 /g 4052
       191.55.50.46 /2 4546
       191.55.50.46 /3 5526
    

    Output

    212.207.160.47 /2 /3 /a /b /c /d /e /f /g
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++