Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Il nuovo Deebot X12 OmniCyclone abbina un sistema di raccolta dello sporco senza sacchetto, un rullo di lavaggio esteso e la tecnologia FocusJet per intervenire più efficacemente sulle macchie più persistenti. Un robot completo e preciso che aiuta a tenere puliti i pavimenti di casa con il minimo sforzo
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-12-2008, 23:07   #1
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
[vari] Contest 10: Numeri palindormi (Semplice)

Poiche' mi e' stato chiesto di provare a mettere in gioco anche i non esperti, propongo questo contest per i piu' JUNIOR

Sta al singolo decidere se si sente parte degli Junior oppure no (Junior in senso di skill. Potrebbe anche essere 90anni...)

Problema:
Sia dato un elenco di numeri.
Per ciascuno dei numeri letti, stampare il numero palindromo piu' piccolo che sia pero' maggiore del numero dato.
Palindromo significa che, date le cifre in base decimale, il numero si puo' leggere allo stesso modo sia leggendolo da sinistra a destra, sia leggendolo da destra a sinistra

Es:
Se si avesse come input i numeri
Codice:
119
115434
576
1024
Si dovrebbe restituire come risultato
Codice:
121
115511
585
1111
2 File per l'esercizio, il primo semplice, il secondo piu' difficile
http://www.usaupload.net/d/mnp0jyk2kt8

Posto qui di seguito anche il Codice C# per generare i file di prova, per eventuali futuri utilizzi
Codice:
class Program
{
    static void Main(string[] args)
    {
        Generator.Generate(@"C:\temp\File1.dat", 1000, 7);
        Generator.Generate(@"C:\temp\File2.dat", 100, 30);           
    }
}

public static class Generator
{
    static Random rnd = new Random(155452);

    public static void Generate(string FileName,int nValori,int nCifre)
    {
        nCifre -= 3;
        StreamWriter sw = new StreamWriter(FileName);
        for (int t = 0; t < nValori; t++)
        {
            int rndcif = 3+rnd.Next(nCifre);
            bool first = true;
            for (int u = 0; u < rndcif; u++)
            {
                int cifra;
                if (first) cifra = rnd.Next(9) + 1;
                else cifra = rnd.Next(10);
                first = false;
                sw.Write(cifra);
            }
            sw.WriteLine();
        }
        sw.Close();
    }
}
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 13-12-2008 alle 00:19. Motivo: Errore. Come al solito almeno 1 negli esempi...
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 12-12-2008, 23:56   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
palindormi?
mi sa che è ora che tu vada a letto in effetti

P.S. comunque il contest potrebbe anche essere carino per i senior, anche se mi sa che ad occhio la soluzione + efficiente non è poi così difficile da trovare
__________________

Ultima modifica di ^TiGeRShArK^ : 12-12-2008 alle 23:58.
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 00:12   #3
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
ma il palindromo immediatamente successivo a 115434 non dovrebbe essere 115511? nel primo post c'é scritto 116611
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 00:14   #4
G30
Senior Member
 
L'Avatar di G30
 
Iscritto dal: Jan 2007
Città: Martinsicuro (Te)
Messaggi: 4804
Quote:
Originariamente inviato da fero86 Guarda i messaggi
ma il palindromo immediatamente successivo a 115434 non dovrebbe essere 115511? nel primo post c'é scritto 116611
Esatto
__________________
Trattative ok con piu' di 100 utenti, cercate tra i miei messaggi! EVITATE VALERIAA
G30 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 00:17   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da fero86 Guarda i messaggi
ma il palindromo immediatamente successivo a 115434 non dovrebbe essere 115511? nel primo post c'é scritto 116611
Sisi',errore mio. Correggo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 00:22   #6
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
palindormi?
mi sa che è ora che tu vada a letto in effetti
Si, meglio che vada va...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 12:10   #7
bio82
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 1568
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Si, meglio che vada va...
primo

ho trovato il metodo, ma sbaglia quando iniziano ad esserci numeri uguali fra la parte destra e sinistra del numero...

quindi mancano alcune righe che completo stasera quando torno...per ora sto a



(millesimi) con il file + grande...

bio
bio82 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 12:42   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
ma li trattereste come interi o come stringhe?? nel secondo caso sarebbe molto più semplice ma non so se più veloce..
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 12:56   #9
MasterDany
Senior Member
 
L'Avatar di MasterDany
 
Iscritto dal: Dec 2007
Messaggi: 505
edit
__________________
Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG
Non ricordo niente ma non lo dimenticherò mai

Ultima modifica di MasterDany : 13-12-2008 alle 13:35.
MasterDany è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 12:59   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da ndakota Guarda i messaggi
ma li trattereste come interi o come stringhe?? nel secondo caso sarebbe molto più semplice ma non so se più veloce..
Come stringa direi.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 13:08   #11
MasterDany
Senior Member
 
L'Avatar di MasterDany
 
Iscritto dal: Dec 2007
Messaggi: 505
Qualche consiglio??
__________________
Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG
Non ricordo niente ma non lo dimenticherò mai
MasterDany è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 13:24   #12
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Se il numero da cercare è già palindromo come ci si deve comportare? Possiamo ritornare direttamente il numero oppure dobbiamo cercare il palindromo successivo?

Implementazione banale:
Codice:
def search_nearest_palindrome(n)
  n+=1 until n.to_s == n.to_s.reverse
  n
end

File.open('File1.txt', 'r') do |file|
  while line = file.gets
    puts line.chop + " -> " + search_nearest_palindrome(line.to_i).to_s
  end
end
200 millisecondi per il primo file mentre con il secondo è ovviamente impraticabile a causa di quei numeri a molte cifre.

Sempre per il primo file mi stavo chiedo se mettendo tutti i palindromi formati da 1 fino a 7 cifre e poi usando una ricerca di qualche tipo in quella lista si potrebbero velocizzare di molto le ricerche. Anche se probabilmente alla fine la generazione dell'array a runtime renderebbe lo sforzo inutile.

Peccato che il trucchetto di capovolgi e somma non funzioni in questo caso
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 13:42   #13
MasterDany
Senior Member
 
L'Avatar di MasterDany
 
Iscritto dal: Dec 2007
Messaggi: 505
edit.
__________________
Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG
Non ricordo niente ma non lo dimenticherò mai

Ultima modifica di MasterDany : 13-12-2008 alle 14:21.
MasterDany è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 13:51   #14
..::DAVE::..
Senior Member
 
L'Avatar di ..::DAVE::..
 
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
ho un problemuccio... ho finito... ma non riesco a calcolare il tempo... cioè con start=clock() all'inizio ed end=clock() alla fine mi da lo stesso numero... strano...
nel frattempo posto il codice?
..::DAVE::.. è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 14:01   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ve gusta ?

Codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

int mirrorInt(char *s)
{
    int i = 0;
    int j = strlen(s) - 1;

    while(i < j)
    {
        s[j--] = s[i++];
    }
    return atoi(s);
}

int findNextPalindrom(int n)
{
    if(n < 10)
    {
        return n;
    }

    char s[11];
    sprintf(s, "%d", n);

    int mirrored = mirrorInt(s);
    if(mirrored > n)
    {
        return mirrored;
    }

    int length = strlen(s);
    int middle = lenght / 2;
    if(length % 2 == 0)
    {
        middle--;
    }

    sprintf(s, "%d", n + (int)pow(10, length - middle - 1));

    return mirrorInt(s);
}

Ultima modifica di cionci : 13-12-2008 alle 14:43.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 14:01   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da ..::DAVE::.. Guarda i messaggi
ho un problemuccio... ho finito... ma non riesco a calcolare il tempo... cioè con start=clock() all'inizio ed end=clock() alla fine mi da lo stesso numero... strano...
nel frattempo posto il codice?
Non è strano se ci mette meno di un secondo
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 14:16   #17
..::DAVE::..
Senior Member
 
L'Avatar di ..::DAVE::..
 
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
Quote:
Originariamente inviato da cionci Guarda i messaggi
Non è strano se ci mette meno di un secondo
e come faccio a calcolarlo se ci impiega meno di un secondo ?

un po' lungo...

Codice:
#include <time.h>
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

string strOut(string stringa);

int main()
{
time_t start,end;
ifstream fin("File2.dat");
ofstream fout("Output.txt");
double tempo;
start=clock();

string numero;
char temp[100];

	while(!fin.eof())
	{
		fin.getline(temp,99);
		numero=temp;
		fout<<strOut(numero)<<endl;
	}

end=clock();
tempo=((double)(end-start))/CLOCKS_PER_SEC;
fin.close();
fout.close();
cout<<tempo<<" "<<start<<" "<<end<<" "<<CLOCKS_PER_SEC<<endl;
cin.get();
}

string strOut(string stringa)
{
	int lung=stringa.length();
	bool maggiore=false;

	for(int i=0; i<=(lung/2); i++)
	{
		if(i==(lung-i-2))
		{
			if(stringa[i]>stringa[lung-1-i])
				stringa[lung-1-i]=stringa[i];
			else
			{
				if(stringa[i]<stringa[lung-1-i])
					stringa[i]=stringa[lung-1-i];
				else
					if(maggiore)
					{
						int j=i;

						while(stringa[j]=='9')
							j++;

						stringa[j]+=1;
						stringa[lung-1-j]+=1;
					}
			}
		}
		else
		{
			if(i==(lung-i-1))
			{	
				if(maggiore)
					if(stringa[i]<'9')
						stringa[i]+=1;
					else
					{
						int j=i;
						while(stringa[j]=='9')
							j++;

						stringa[j]+=1;
						stringa[2*i-j]+=1;
					}

			}
			else
			{
				if(stringa[lung-1-i]>=stringa[i])
					maggiore=true;
				else
					maggiore=false;

				stringa[lung-1-i]=stringa[i];
			}
		}
	}

	return stringa;
}

Ultima modifica di ..::DAVE::.. : 13-12-2008 alle 14:22.
..::DAVE::.. è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 14:25   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Aspe...usi già clock, avevo confuso con time, allora dovrebbe andare, strano. Visivamente quanto ci mette ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 14:29   #19
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da cionci Guarda i messaggi
Ve gusta ?

[...]
Forte!

Io avevo pensato ad un calcolo puramente matematico, ma è troppo "umano" (via codice dovrei estrarre le varie cifre ogni volta).
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2008, 14:32   #20
..::DAVE::..
Senior Member
 
L'Avatar di ..::DAVE::..
 
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 468
Quote:
Originariamente inviato da cionci Guarda i messaggi
Aspe...usi già clock, avevo confuso con time, allora dovrebbe andare, strano. Visivamente quanto ci mette ?
appena si apre la console mi appare il risultato... moolto meno di un secondo
in compenso copiando 50 volte i numeri del file 2 (quello da 100) come tempo mi da 0.078 che diviso 50 da 0,00156

Ultima modifica di ..::DAVE::.. : 13-12-2008 alle 14:36.
..::DAVE::.. è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Huawei punta sul canale europeo: per il ...
Ubuntu 26.04: le GPU guadagnano il 17% i...
La Commissione UE registra l'iniziativa ...
SSD troppo cari? La soluzione alla crisi...
Anteprima mondiale Hyundai IONIQ 3: segm...
Fintool sbarca su Microsoft 365: arrivan...
Hanno chiesto 1 dollaro per salvare un M...
Arriva AgentExchange, il marketplace di ...
Blizzard fa chiudere Turtle WoW: perché ...
Claude Desktop e la modifica silenziosa ...
Blue Origin ha mostrato gli interni del ...
Linux alla pari di Windows in gioco: con...
Il rientro del secondo stadio del razzo ...
Il controller ufficiale Microsoft per Xb...
DJI Power 1000 Mini: la power station da...
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: 21:38.


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