Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-06-2009, 16:24   #21
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4421
...qui viene proposta una applet con diversi sistemi di solver...l'algoritmo proposto risolve il caso richiesto dal thread in una manciata di secondi...volevo chiedere all'autore del thread se la difficoltà di risoluzione di questo sudoku sta solo nella scelta di usare una scala di valori decrescente per la prima riga (un brute force incrementando il valore per ogni riquadro arriverà a ricostruire la sequenza 9-8-7... nel maggior tempo possibile) o ci sono altri giochini dietro?...

...ciao Andrea...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 16:30   #22
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Ok, dai, posto la mia: il codice è per lo più una traduzione di un post che ho trovato, ma solo per una questione di eleganza. Infatti ho sempre reputato l'uso di un po' di constraint programming la via più comoda e dunque appoggiarsi a un solver era secondo me naturale
Il codice è come al solito in F# (4.0), ed in questo caso è richiesta la presenza di Microsoft Solver Foundation (l'express edition gratuita basta).
Il tempo impiegato sul mio misero T7700 @ 2.4ghz è 500ms e gran parte del tempo è spesa per il caricamento/inizializzazione del solver e non per la ricerca della soluzione.
Codice:
open System
open System.IO
open Microsoft.SolverFoundation.Common
open Microsoft.SolverFoundation.Services

module Sudoku =
    type SudokuCell(row, col, value) =
        let mutable _value = value
        member x.Row = row
        member x.Col = col
        member x.Value with get() = _value and set(v) = _value <- v
        member x.FloatValue with get() = float _value and set(v:float) = _value <- int v
    
    type Block = { KeyRow : int; KeyCol : int; IsIn : Rational }
                
    let Solve(src:int array array) =
        let rational (i:int) = Rational.op_Implicit i
        let ctx = SolverContext.GetContext()
        let model = ctx.CreateModel()
        let line = Set(Domain.IntegerRange(rational 0, rational 9), "line")
        let board = Array2D.init 9 9 (fun r c -> SudokuCell(r, c, src.[r].[c]))
        let boardDec = Decision(Domain.IntegerRange(rational 1, rational 9), "board", line, line)
        boardDec.SetBinding(board |> Seq.cast<SudokuCell>, "FloatValue", "Row", "Col")
        let presetBoard = Parameter(Domain.IntegerRange(rational 0, rational 9), "presetBoard", line, line)
        presetBoard.SetBinding(board |> Seq.cast<SudokuCell>, "Value", "Row", "Col")
        model.AddDecision boardDec
        model.AddParameter presetBoard
        model.AddConstraint(null,  Model.ForEach(line, fun i -> Model.ForEachWhere(line, (fun j -> Term.op_Equality(boardDec.[i,j],presetBoard.[i, j])), fun j -> Term.op_GreaterThan(presetBoard.[i, j], 0 |> rational |> Term.op_Implicit)))) |> ignore
        model.AddConstraint(null, Model.ForEach(line, fun j -> Model.AllDifferent (Model.ForEach(line, fun i -> boardDec.[i,j])))) |> ignore
        model.AddConstraint(null, Model.ForEach(line, fun i -> Model.AllDifferent (Model.ForEach(line, fun j -> boardDec.[i,j])))) |> ignore
        let isInBlock i j row col = if i * 3 <= row && row <= i * 3 + 2 && j * 3 <= col && col <= j * 3 + 2 then rational 1 else rational 0
        for i in 0..2 do 
            for j in 0..2 do
                let boardBlock = Parameter(Domain.IntegerNonnegative, "boardBlock", line, line)
                model.AddParameters boardBlock
                boardBlock.SetBinding(board |> Seq.cast<SudokuCell> |> Seq.map(fun c -> { KeyRow = c.Row; KeyCol = c.Col; IsIn = isInBlock i j c.Row c.Col }), "IsIn", "KeyRow", "KeyCol")
                model.AddConstraint(null, Model.AllDifferent(Model.ForEach(line, fun keyi -> Model.ForEachWhere(line, (fun keyj -> boardDec.[keyi, keyj]), fun keyj -> boardBlock.[keyi,keyj])))) |> ignore
        let solution = ctx.Solve()
        if solution.Quality = SolverQuality.Feasible then
            ctx.PropagateDecisions()
            Some [| for i in 0..8 -> [| for j in 0..8 -> board.[i,j].Value |] |]
        else None
        
let main() =
    let puzzle = "sudoku.csv" |> File.ReadAllLines |> Array.Parallel.map(fun ln -> ln.Split([|','|], StringSplitOptions.RemoveEmptyEntries) |> Array.Parallel.map(int))
    let sw = System.Diagnostics.Stopwatch.StartNew()
    match Sudoku.Solve puzzle with
    | Some b -> sw.Stop()
                let lines = b |> Array.Parallel.map(fun r -> (r |> Array.fold(fun acc b -> sprintf "%s,%i" acc b) String.Empty).Substring 1)
                File.WriteAllLines("solved.csv", lines)
                lines |> Seq.iter(fun ln -> printfn "%s" ln)
                printfn "Parsed and solved in %ims" sw.ElapsedMilliseconds
    | None -> printfn "failed"
    Console.ReadKey() |> ignore
    
do main();;

Ultima modifica di !k-0t1c! : 08-06-2009 alle 18:22.
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 16:39   #23
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
@ally: Il puzzle proposto è preso da QUI e l'ho scelto apposta perché ero curioso di vedere quanto avrebbe stimolato la gente ad andare 1po' oltre il mero brute force
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 16:43   #24
ally
Bannato
 
L'Avatar di ally
 
Iscritto dal: Jan 2003
Città:
Messaggi: 4421
Quote:
Originariamente inviato da !k-0t1c! Guarda i messaggi
Codice:
1,4,5,7,8,2,6,3,9
3,7,9,1,6,4,5,2,8
2,6,8,3,9,5,4,1,7
5,2,1,4,7,8,3,9,6
4,3,7,6,1,9,2,8,5
8,9,6,2,5,3,1,7,4
7,8,4,5,2,1,9,6,3
6,1,3,9,4,7,8,5,2
9,5,2,8,3,6,7,4,1
Codice:
0,0,0,0,0,0,0,0,0
0,0,0,0,0,3,0,8,5
0,0,1,0,2,0,0,0,0
0,0,0,5,0,7,0,0,0
0,0,4,0,0,0,1,0,0
0,9,0,0,0,0,0,0,0
5,0,0,0,0,0,0,7,3
0,0,2,0,1,0,0,0,0
0,0,0,0,4,0,0,0,9
...le grigle sembrano diverse...prendo come riferimento la posizione del numero uno sul primo quadrante...

...ciao Andrea...
ally è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 18:24   #25
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
http://tbn3.google.com/images?q=tbn:...y-facepalm.jpg
Mi ero dimenticato una riga, quella che impone che i valori iniziali diversi da 0 ed i valori finali nelle stesse posizioni coincidano...Fixed, il tempo è salito di qualche millisecondo ma siamo sempre li
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 18:40   #26
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da !k-0t1c! Guarda i messaggi
Applicando solo le regole, senza "indovinare" mai, la cosa è fattibile in 15righe Tutto sta nel saper usare le regole inizialmente e poi "indovinare" intelligentemente. Se comunque hai la parte di verifica delle regole e di riempimento secondo le regole implementare la parte che "indovina" ed eventualmente fa backtracking non dovrebbe essere traumatico
Vero.
Un'altro conto è invece fare che ci mette 13 ms a risolverlo

Ora provo a metterci il "guessing" spero che non faccia aumentare assurdamente i tempi...
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 20:46   #27
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:35.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 20:57   #28
d_traveler
Junior Member
 
Iscritto dal: Jun 2009
Messaggi: 14
Quote:
Originariamente inviato da rеpne scasb Guarda i messaggi
Linguaggio: C
Algoritmo: Non utilizza la forza bruta.
Tempo: Il tempo impiegato e molto minore di 1 millesimo di secondo

Codice:
#include <stdio.h>
#include <time.h>

#define N_CLK 10
#define INPUT_FILE_NAME "SUDOKU.DAT"
#define SIZE 9
#define CELL (SIZE/3)

int main(void)

{
    clock_t clk[N_CLK];
    FILE *input_file_handle;
    int b,i,j,k,l,m,n,o,s,sp,sv=SIZE*SIZE,sk[SIZE][SIZE],ts[SIZE][SIZE];

    if((input_file_handle=fopen(INPUT_FILE_NAME,"rt"))==NULL)
    {
	fprintf(stderr,"Non trovo il file " INPUT_FILE_NAME "\n");
	return 1;
    }

    for(i=0;i<SIZE;i++)
    {
	for(j=0;j<SIZE;j++)
	{
	    fscanf(input_file_handle,"%d,",&sk[i][j]);
	    if(sk[i][j])
		sv--;
	}
    }

    if(fclose(input_file_handle))
    {
	fprintf(stderr,"Errore durante fclose\n");
	return 1;
    }

    printf("*** Input ***\n\n");

    for(i=0;i<SIZE;i++)
    {
	for(j=0;j<SIZE;j++)
	    printf("%d ",sk[i][j]);
	printf("\n");
    }

    clk[0]=clock();

    do
    {
	for(i=0;i<SIZE;i++)
	{
	    for(j=0;j<SIZE;j++)
	    	ts[i][j]=0;
	}
	for(i=0;i<SIZE;i++)
	{
	    for(j=0;j<SIZE;j++)
	    {
		if(sk[i][j])
		{
		    for(k=0;k<SIZE;k++)
			ts[k][j]|=1<<(sk[i][j]-1);
		    for(k=0;k<SIZE;k++)
			ts[i][k]|=1<<(sk[i][j]-1);
		    for(k=(i/CELL)*CELL;k<((i/CELL)*CELL+CELL);k++)
		    {
		        for(l=(j/CELL)*CELL;l<((j/CELL)*CELL+CELL);l++)
		            ts[k][l]|=1<<(sk[i][j]-1);
		    }
		}
	    }
	}
	for(b=0;b<SIZE;b++)
	{
	    for(i=0;i<SIZE;i++)
	    {
	        for(l=j=0;j<SIZE;j++)
		{
		    if(sk[i][j]==0)
		    {
		        if((ts[i][j]&(1<<b))==0)
			{
			    l++;
			    m=j;
			}
		    }
		}
		if(l==1)
		{
		    sk[i][m]=b+1;
		    sv--;
		    for(k=0;k<SIZE;k++)
			ts[k][m]|=1<<b;
		    for(k=0;k<SIZE;k++)
			ts[i][k]|=1<<b;
		    for(k=(i/CELL)*CELL;k<((i/CELL)*CELL+CELL);k++)
		    {
		        for(l=(m/CELL)*CELL;l<((m/CELL)*CELL+CELL);l++)
		            ts[k][l]|=1<<b;
		    }
		}
	    }
	    for(j=0;j<SIZE;j++)
	    {
	        for(l=i=0;i<SIZE;i++)
	        {
	    	    if(sk[i][j]==0)
		    {
		        if((ts[i][j]&(1<<b))==0)
			{
			    l++;
			    m=i;
			}
		    }
		}
	        if(l==1)
		{
		    sk[m][j]=b+1;
		    sv--;
		    for(k=0;k<SIZE;k++)
			ts[k][j]|=1<<b;
		    for(k=0;k<SIZE;k++)
			ts[m][k]|=1<<b;
		    for(k=(m/CELL)*CELL;k<((m/CELL)*CELL+CELL);k++)
		    {
		        for(l=(j/CELL)*CELL;l<((j/CELL)*CELL+CELL);l++)
		            ts[k][l]|=1<<b;
		    }
		}
	    }
	    for(i=0;i<SIZE;i+=CELL)
	    {
		for(j=0;j<SIZE;j+=CELL)
		{
		    for(n=0,k=i;k<(i+CELL);k++)
		    {
			for(l=j;l<(j+CELL);l++)
			{
	    	    	    if(sk[k][l]==0)
		    	    {
		                if((ts[k][l]&(1<<b))==0)
			        {
			    	    n++;
			    	    m=k;
				    o=l;
			  	}
			    }
			}
		    }			
	            if(n==1)
		    {
		        sk[m][o]=b+1;
		        sv--;
		        for(k=0;k<SIZE;k++)
			    ts[k][o]|=1<<b;
		        for(k=0;k<SIZE;k++)
			    ts[m][k]|=1<<b;
		        for(k=(m/CELL)*CELL;k<((m/CELL)*CELL+CELL);k++)
		        {
		            for(l=(o/CELL)*CELL;l<((o/CELL)*CELL+CELL);l++)
		                ts[k][l]|=1<<b;
		        }
		    }
		}
	    }
	}

        for(sp=i=0;i<SIZE;i++)
        {
	    for(j=0;j<SIZE;j++)
	    {
	        if(sk[i][j]==0)
	        {
		    for(s=k=0;k<SIZE;k++)
		        s|=1<<sk[k][j];
		    for(k=0;k<SIZE;k++)
		        s|=1<<sk[i][k];
		    for(k=(i/CELL)*CELL;k<((i/CELL)*CELL+CELL);k++)
		    {
		        for(l=(j/CELL)*CELL;l<((j/CELL)*CELL+CELL);l++)
		            s|=1<<sk[k][l];
		    }
		    for(s>>=1,l=k=0;k<SIZE;k++)
		    {
			if(s&(1<<k))
			    l++;
			else
			    m=k;
		    }
		    if(l==(SIZE-1))
		    {
		        sk[i][j]=m+1;
			sv--;
			sp=1;
			break;
		    }		
	        }	    
	        if(sp)
		    break;
	    }
	    if(sp)
	        break;
        }

    } while (sv);

    clk[1]=clock();

    printf("\n*** Soluzione ***\n\n");

    for(i=0;i<SIZE;i++)
    {
	for(j=0;j<SIZE;j++)
	    printf("%d ",sk[i][j]);
	printf("\n");
    }

    printf("\nTempo per ricercare la soluzione: %7.3f secondi\n",(double)(clk[1]-clk[0])/CLK_TCK);

    return 0;
}
Tipico Output:

Codice:
*** Input ***

0 0 0 0 0 0 0 0 0 
0 0 0 0 0 3 0 8 5 
0 0 1 0 2 0 0 0 0 
0 0 0 5 0 7 0 0 0 
0 0 4 0 0 0 1 0 0 
0 9 0 0 0 0 0 0 0 
5 0 0 0 0 0 0 7 3 
0 0 2 0 1 0 0 0 0 
0 0 0 0 4 0 0 0 9 

*** Soluzione ***

9 8 7 6 5 4 3 2 1 
2 4 6 1 7 3 9 8 5 
3 5 1 9 2 8 7 4 6 
1 2 8 5 3 7 6 9 4 
6 3 4 8 9 2 1 5 7 
7 9 5 4 6 1 8 3 2 
5 1 9 2 8 6 4 7 3 
4 7 2 3 1 9 5 6 8 
8 6 3 7 4 5 2 1 9 

Tempo per ricercare la soluzione:   0.000 secondi
P.S. Se riscontrare errori avvertitemi.
P.P.S. Se c'e' un numero sufficiente di persone interessare a sapere come funziona, saro' lieta di spiegarlo.
in c, difficilissimo.
d_traveler è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 20:57   #29
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da rеpne scasb Guarda i messaggi
P.S. Se riscontrare errori avvertitemi.
P.P.S. Se c'e' un numero sufficiente di persone interessare a sapere come funziona, saro' lieta di spiegarlo.
Per me o hai un pc sperimentale oppure usi magia nera
Mi interesserebbe capire da dove iniziare per leggerlo più che altro

Ma c'è qualche "guideline" per avere dei risultati prestazionali eccellenti come fai sempre oppure serve solamente un'esperienza eccessiva?
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 21:05   #30
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:35.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 21:10   #31
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:35.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 21:38   #32
d_traveler
Junior Member
 
Iscritto dal: Jun 2009
Messaggi: 14
Quote:
Originariamente inviato da rеpne scasb Guarda i messaggi
Affatto, il tempo stimato per scrivere il sorgente e' stato di circa 30 minuti (non ti fare impressionare c'e' un sacco di copia&incolla).
in poco tempo anche. mi sembra difficilissimo il c, io non riesco a farlo neanche in java o in python che conosco un pò meglio.
d_traveler è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 22:02   #33
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Bene bene, festa delle bitmasks
Codice illeggibile, specie senza commenti, ma è comunque comprensibile il principio, complimenti

Direi che questo contest è stato risolto interessantemente, il prossimo lo penserò per qualcosa di molto parallelizzabile

P.S.: "lieta" <- donna in questo campo? doppi complimenti. Anche se qualcuno potrebbe fare la classica battuta "ecco perché scrive codice così contorto"
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2009, 22:48   #34
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:35.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 01:34   #35
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
@rеpne scasb: Una domanda: gli or + shift servono a segnare in una casella che il numero corrente non può starci? Molto interessante, io nel risolvere i sudoku a mano ho sempre fatto il contrario invece con questo metodo una volta segnata la casella non devi più cancellare il segno che fai. Anche se in effetti facendolo a mano quando i segni diventano tanti diventa un po' un pasticcio...
E un'altra cosa: pensavo che senza il bruteforce non si potesse risolvere qualsiasi schema. Sbaglio?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 08:44   #36
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:36.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 09:24   #37
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Bravissima, repne
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 09:52   #38
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:36.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 09:54   #39
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Bravissima, repne
Vero. Non possiamo che inchinarci.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 10:10   #40
rеpne scasb
Senior Member
 
Iscritto dal: May 2008
Messaggi: 533

Ultima modifica di rеpne scasb : 18-06-2012 alle 15:36.
rеpne scasb è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Abbiamo i processori più veloci d...
Inizia agosto, nuovi coupon nascosti Ama...
Dyson o low cost? Tutte le offerte sulle...
Linus Torvalds usa ancora una Radeon RX ...
Roborock Q7 L5+ è imperdibile a 2...
Identikit della scheda video perfetta, p...
SUV, 100% elettrico e costa meno di un b...
Hai mai caricato un referto su ChatGPT? ...
Apple vuole un nuovo campus nella Silico...
DJI Osmo 360, la nuova action cam a 360&...
Lo strumento anti-requisiti per Windows ...
Utenti di Claude in rivolta: 'I bei vecc...
Rocket Lab Mars Telecommunications Orbit...
NVIDIA GeForce RTX: supporto driver su W...
iliad ha iniziato a vendere smartphone d...
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: 07:53.


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