Torna indietro   Hardware Upgrade Forum > Software > Programmazione

GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2013, 12:57   #1
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
[Vari] Contest 19: Full Text Search(e non solo).

Scaricate i file di input da qui:

https://github.com/hwupgradecontest/...ree/master/All

Si tratta di una serie di opere letterarie che ho preso da qui:

http://www.liberliber.it/

Grazie a Msangi e The_Ouroboros, il link su github dove potete mettere i vostri sorgenti:
https://github.com/hwupgradecontest/contest19

Per aggiungere il proprio codice du github:

The_Ouroboros:
http://www.hwupgrade.it/forum/showpo...&postcount=784

Vicius:
https://github.com/hwupgradecontest/README



Punto A:
Il programma dovrà leggere i file .txt fondendoli e creandone uno solo delle dimensioni specificate dall'utente. Il file di output sarà poi utilizzato per il Punto B: algoritmi di Full Text Seach.
La fusione dei vari file txt va effettuata prendendo le singole righe di ogni file di input e mescolandole, in modo casuale, con quelle di tutti gli altri file.
Vanno escluse, nel file di output, le righe vuote. Vanno inoltre eliminati gli spazi superflui. Due o più spazi consecutivi andranno sostituiti con uno spazio solo. Le tabulazioni vanno sostituite con uno spazio.
Per il punto B utilizzeremo il programma che si rivelerà il migliore dal punto di vista delle prestazioni ma soprattutto dalla qualità dell'output.
Il programma, CUI o GUI, a vostra scelta, dovrà dunque permettere all'utente di specificare il nome del file di output e la dimensione. Nel caso l'utente scelga una dimensione maggiore di quella del totale dei file di input, si ricominci dal primo file e via via con tutti gli altri, mescolando sempre in modo casuale le righe.

Esempio(CUI):


Punto B:
Da definire più in la. Ci occuperemo degli algoritmi per la Full Text Seach e confronteremo le prestazioni(e la qualità dei risultati) con alcuni programmi che vanno per la maggiore nel settore: Lucene, Zettair, Indri.
Punto B.1:
Quote:
B.1:
Si realizzi un programmino che, data in input una stringa di ricerca, indichi l'esatta posizione (riga e colonna) nel file creato al punto A.

Si prendano separatamente i tempi per la creazione dell'indice e quelli per la ricerca.

Se volete utilizzare un algoritmo brute force, senza creare l'indice, siete liberi di farlo.
L'esempio qui: http://www.hwupgrade.it/forum/showpo...&postcount=180


Punto B.2:
Quote:
Si scriva un programmino simile a quello presente nella distribuzioni Linux per contare i caratteri, le parole, le righe, la riga più lunga e la parola più lunga(quest'ultima cosa il comando wc non la fa):


Le parole dovranno essere parole di senso compiuto. "---------" o "........" o "£$%*/*&&&" non sono parole di senso compiuto.
"parola", "ciao", "hello" invece si, sono parole di senso compiuto.
Si veda, inoltre, questo post(grazie a msangi): http://www.hwupgrade.it/forum/showpo...&postcount=618.
E questo(grazie a clockover): http://www.hwupgrade.it/forum/showpo...&postcount=645

Punto B.3
Si modifichi il programmino di cui al punto B.2 in modo da fargli accettare due argomenti dalla riga di comando(oltre al nome del file):

1) Il parametro "-L=d" dove d sta per la dimensione minima delle parole che l'utente desidera per il conteggio. Per esempio, -L=5 significa che l'utente desidera che vengano conteggiate le parole con lunghezza >= 5.

2) Il parametro "-F=file" dove file sta per il nome di un file specificato dall'utente dove sono listati, una parola per riga, le parole che l'utente desidera escludere dalla ricerca. Per esempio:
Codice:
il
lo
la
i
gli
le
Col suddetto file passato come argomento, il programmino dovrà escludere dal conteggio le parole "il", "lo", "la", "i", "gli", "le".

------------------------------------------------------------------------------------------------------------------------------------------------------

E, a cura dell'utente Marco.r:
Punto C:
Catene Markoviane. In preparazione.

Ultima modifica di Vincenzo1968 : 20-02-2013 alle 18:25. Motivo: Aggiornato link file input
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2013, 13:29   #2
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Per esempio, se abbiamo questi file in input:

File 1:
Codice:
file 1 riga 1
file 1      riga 2
file 1 riga 3
File 2:
Codice:
file 2 riga 1

file 2           riga 2
file 2 riga 3
File 3:
Codice:
file 3 riga 1
     file 3        riga 2
file 3 riga 3
Il file risultante dovrà essere, per esempio, così:
Codice:
file 3 riga 2
file 2 riga 2
file 3 riga 1
file 3 riga 3
file 1 riga 3
file 1 riga 1
file 2 riga 3
file 2 riga 1
file 1 riga 2
Come vedete, nel file di output, sono stati eliminati gli spazi superflui e le righe vuote.
Le righe debbono risultare disposte in modo casuale. Una nuova esecuzione del programma darà, ovvviamente, una nuova disposizione delle righe.

Per esempio:
Codice:
file 3 riga 1
file 1 riga 3
file 3 riga 3
file 1 riga 2
file 2 riga 2
file 1 riga 1
file 2 riga 3
file 3 riga 2
file 2 riga 1

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:48.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2013, 13:51   #3
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Dall'incipit del Cap. IV de I Promessi Sposi di Alessandro Manzoni:

Quote:
Il sole non era ancor tutto apparso sull'orizzonte, quando il padre Cristoforo uscì dal suo convento di Pescarenico, per salire alla casetta dov'era aspettato.
Dall'incipit del Cap. VIII di Quer pasticiaccio brutto de via Merulana di Carlo Emilio Gadda:
Quote:
Il sole non aveva ancora la minima intenzione di apparire all'orizzonte che già il brigadiere Pestalozzi usciva(in motocicletta) dalla caserma degli erre erre ci ci di Marino per catapultarsi alla bottega-laboratorio dove non era minimamente aspettato, almeno in quanto brigadiere fungente.

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:06.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 09:29   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Leggendo il contest una cosa non mi è chiara.

Dici che il programma deve mischiare insieme le righe dei due file in ordine casuale, ma nell'esempio mescoli i file anche partendo da metà di quella che io considererei una riga (un qualcosa che va da newline a newline), quindi vorrei capire: qual'è la tua idea di riga in questo caso?

Ciao

EDIT: Un altra cosa che non ho capito bene è cosa succede quando l'output è maggiore dell'input. Cosa intendi per "si ricomincia dal primo file" ? Intendi che riscrive il testo in ordine dal primo file in poi o intendi che si resetta il mescolamento e si riparte a mescolare i file?
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 14-01-2013 alle 09:39.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 15:54   #5
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Vi anticipo già 50 ms per un file da 2 mb

Ero partito usando C++11 e la stl eccetera, e per quanto sia diventata parecchio veloce in sè mi forzava a copiare la memoria in giro... sotto 500 ms non si scendeva.
Il buon vecchio C è ancora imbattuto

EDIT: ok, 43 ms e sto, almeno sul mio SSD.
Un'esecuzione usa ~40 ms per fopen/fread, ~2 ms per fare il parsing dei file e ~0.1 ms per scrivere l'output (questo grazie allo SSD che è una bestia ), probabilmente nel caso dello SSD sarebbe molto più veloce leggendo tutti i file in parallelo, ma d'altra parte nel caso di un HDD meccanico sarebbe molto peggio, e vincerebbe alla grande accorpare tutti i files in un file solo per minimizzare il seek time.

Odio un pò sti problemi che esce Vincenzo1968 perchè finiscono sempre a fare a botte con l'HD
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 14-01-2013 alle 16:20.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:18   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Vi anticipo già 50 ms per un file da 2 mb

Ero partito usando C++11 e la stl eccetera, e per quanto sia diventata parecchio veloce in sè mi forzava a copiare la memoria in giro... sotto 500 ms non si scendeva.
Il buon vecchio C è ancora imbattuto
Non puoi sperare di usare la STL e di andare veloce ...
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:22   #7
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Non puoi sperare di usare la STL e di andare veloce ...
In realtà il problema era che non esiste un modo per assegnare memoria preesistente a std::string, e quindi non avrei potuto usare il "trucco" che ha tagliato di 10 volte il tempo...
ma come dicevo, a pari algoritmo non sono più lente di C, e di sicuro il codice esce molto più bello a vedersi (e la condivisione di memoria che ho usato è come chiedere bug a manetta )

EDIT: ecco il codice

main.cpp

LineBuffer.h

common_header.h

EDIT2: ho provato a farlo girare su un disco in rete (lag come se piovesse, 13 mb/s max) e come previsto ci mette quasi 1.6 secondi... un dettaglio interessante però è che già alla 3a run ci metteva solo 66 ms, il che prova che Windows è abbastanza furbo da mettere in cache i file usati di recente sul disco più veloce
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 14-01-2013 alle 17:36.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:44   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Se qualcuno avesse avuto gli stessi dubbi riguardo al testo del contest queste sono state le risposte di Vincenzo alle mie domande:

Quote:
Quando l'output è maggiore dell'input si riparte dall'inizio. Si prendono tutti i file e si ricomincia a mescolare le righe(di tutti i file) fino a quando il file di output non raggiunge la dimensione voluta.
Non ho capito bene la prima domanda. Considera che nell'esempio ho mescolato le righe a mano; il programma lo devo ancora finire.

T'ho scritto in privato perché m'hanno sospeso e non posso postare nel thread. Potresti cortesemente postare tu la mia risposta?
Al limite specifica che te l'ho chiesto io tramite pm.
A quel punto ho riformulato la mia prima domanda e lui ha risposto che si , bisogna identificare ogni riga e mescolarle insieme (le righe vanno da newline a newline)
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2013, 14:53   #9
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
Comunicazione di servizio da Vincenzo1968:

http://classes.soe.ucsc.edu/ism293/S...mp_3_Lemur.pdf

http://ciir.cs.umass.edu/~strohman/indri/

http://www.lemurproject.org/lemur/In...ryLanguage.php

http://myweb.uiowa.edu/cgharris/images/indri.pdf

Serviranno per il punto B.
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:07   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Questa la mia versione in Java: Generate.java.

A leggere tutti i file da disco ci mette circa 800ms. Per creare un file di 5 gb ci impiega poco più di 4 minuti.

Codice:
➜ Contest  time java contest.Generate file -D5GiB
java contest.Generate file -D5GiB  78.23s user 159.79s system 98% cpu 4:01.87 total
Non ho potuto provare la versione di tommo perché stdafx.h cozza un po' con osx e linux. Fare un confronto sullo stesso hardware sarebbe interessante ma non credo che ci sia una grande differenza tra i due. Una vota passato una certa dimensione il limite dovrebbe essere il disco.

Si potrebbe passare a nio per evitare di scopiazzare stringhe qua e là. Eliminare la regex e ripulirsi a mano il testo. Ed usare un executor per distribuire il lavoro tra i vari core. Ma non credo ne valga la pena.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:22   #11
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ragazzi, una cortesia:

per facilitare il compito agli utenti che volessere provare i programmi postati(e soprattutto a me che devo scaricare i sorgenti di tutti e stilare le classifiche), bisognerebbe zippare i sorgenti e metterli su un sito di file sharing.

Ce ne sono un fottìo. Uno dei miei preferiti è:

http://www.filedropper.com/

Non richiede iscrizione e soprattutto, quando uno clicca sul link per scaricare il file, non bisogna aspettare i maledetti trenta secondi di pubblicità(c'è solo da inserire 4 caratteri per il riconoscimento umano).

Edit: Ho visto ora che nel link di Vicius c'è il link diretto che permette di scaricare il file compresso. Ma, se il programma è composto da più file sorgenti?

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:31.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:30   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Questa la mia versione in Java: Generate.java.

A leggere tutti i file da disco ci mette circa 800ms. Per creare un file di 5 gb ci impiega poco più di 4 minuti.

Codice:
➜ Contest  time java contest.Generate file -D5GiB
java contest.Generate file -D5GiB  78.23s user 159.79s system 98% cpu 4:01.87 total
Non ho potuto provare la versione di tommo perché stdafx.h cozza un po' con osx e linux. Fare un confronto sullo stesso hardware sarebbe interessante ma non credo che ci sia una grande differenza tra i due. Una vota passato una certa dimensione il limite dovrebbe essere il disco.

Si potrebbe passare a nio per evitare di scopiazzare stringhe qua e là. Eliminare la regex e ripulirsi a mano il testo. Ed usare un executor per distribuire il lavoro tra i vari core. Ma non credo ne valga la pena.
Io sono riuscito a compilare la versione di Tommo su Linux ma ho dovuto togliere i file afx e inserire manualmente gli include.

Quindi ragazzuoli, quando utilizzate Visual Studio, create un progetto vuoto altrimenti vengono inseriti gli afx e poi li debbo modificare a mano(per compilarli su Linux). A meno che non decidiate che la vostra versione debba girare solo su Windows.



Comunque il file prodotto dalla versione di Tommo ha qualche problemino(lascia qualche riga vuota e qualche spazio superfluo). Lo sta sistemando.

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:57.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:55   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 11:17   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ah dimenticavo: il tempo dev'essere espresso in secondi.

Quindi non
Quote:
825 ms
ma
Quote:
0.825 secondi
"secondi" scritto per esteso, non abbreviato "s.".

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 11:33   #15
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi


I package di java proprio non ti entrano in testa . I file .class devono stare nella cartella contest. Devi lanciarlo da fuori dando il nome completo contest.Generate.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:44   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
I package di java proprio non ti entrano in testa . I file .class devono stare nella cartella contest. Devi lanciarlo da fuori dando il nome completo contest.Generate.


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:52   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Spiegatemi una cosa. Le funzioni per la gestione dei file in C a 64 bit sono standard(e quindi posso tranquillamente compilare e in Windows e in Linux)?

Per esempio, la funzione "_ftelli64" è standard o è specifica del compilatore Microsoft?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:56   #18
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quando hai compilato i sorgenti ti deve aver creato due file class. Il primo è Generate.class che è il programma principale. E poi c'è anche un Generate$1.class che è la classe anonima creata per TXT_FILES.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 13:26   #19
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515




Non è standard. Mo debbo arrangiarmi con le macro per la compilazione condizionale.

Che debbo usare per GCC/Linux?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 13:28   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Quando hai compilato i sorgenti ti deve aver creato due file class. Il primo è Generate.class che è il programma principale. E poi c'è anche un Generate$1.class che è la classe anonima creata per TXT_FILES.
Ok. Se non funziona nemmeno così le urla le sentirete fin lassù al nord.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Nuova Renault Clio: listino, motorizzazi...
Samsung cambia tutto: i lavoratori potra...
L'ex CEO di Intel avverte: la bolla dell...
Un milione di chilometri garantiti e 100...
AMD sfida Qualcomm? Nuovi indizi sul pri...
YouTube si rinnova: nuovo video player c...
Windows 11, arriva il Patch Tuesday di o...
Serve un minuto per risparmiare davvero ...
Windows 10 riceve l'ultimo Patch Tuesday...
Europa alla riscossa, Dragon LLM è...
Bluetti lancia la nuova Pioneer Na, powe...
Microsoft interrompe il supporto a Offic...
HUAWEI FreeBuds 7i: un'ottima cancellazi...
Olivetti Programma 101 compie 60 anni: q...
Settembre da primato per le auto elettri...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v