Newsgroup: it.hobby.enigmi
Titolo: Rompicapo

Ho un problema che mi sta mettendo a dura prova.
Dunque.. ho un insieme di stringhe aventi tutte uno dei due seguenti
formati:
X-Z
oppure
X-Y-Z
dove:
 X è un intero positivo nonnullo di max 4 cifre
 Y è un intero positivo nonnullo di max 10 cifre
 Z è un intero positivo nonnullo di max 11 cifre.
--> Come posso ottenere una sequenza di sole cifre numeriche (senza i
trattini) che garantisca univocità (ovvero: non esistano due stringhe
distinte che si risultino in una sequenza uguale)?
Ad es, avevo pensato di sostituire ogni trattino con uno 0, il che mi
pare garantisca univocità ma solo all'interno di ogni
"sottogruppo" (cioè: non esistono X-Z e X'-Z' tali che X0Z = X'0Z', ed
anche non esistono X-Y-Z  e X'-Y'-Z' tali che X0Y0Z = X'0Y'0Z').
Questo banalmente perché essendo interi non possono mai iniziare con 0
(il che causerebbe la confusione). Ma purtroppo non è vero su tutto
l'insieme, come dimostra il controesempio: 1-2-3 e 1-203, ambedue
verrebbero tradotti come 10203.
Credo che sostituendo una sequenza di almeno 10 zeri al posto di ogni
trattino il problema sia risolto, ma vorrei una soluzione che non
allunghi troppo la stringa.
Oppure avevo pensato di premettere un numero fisso per distinguere i
due casi: ad es. il 2 per quelli di tipo X-Z e il 3 per quelli di tipo
X-Y-Z. In questo modo il controesempio di prima verrebbe tradotto in
310203 e 210203, evitando il conflitto.. ma non saprei dimostrarlo
rigorosamente.
Chi mi aiuta?
Grazie,
ciao,
Marco

 anche non esistono X-Y-Z  e X'-Y'-Z' tali che X0Y0Z = X'0Y'0Z').
C'è ambiguitàa anche all'interno dello stesso sottogruppo. Come fai a
distinguere 1-203 da 102-3?
Puoi usare un numero fisso di cifre per ogni numero (4 per il primo,
10 per il secondo, ...), tranne eventualmente l'ultimo della sequenza.
Per esempio 1-203 diventa 0001 203 (senza lo spazio).
Oppure, se hai molti numeri di poche cifre, puoi far precedere ogni
numero (tranne eventualmente l'ultimo) dal suo numero di cifre, per
esempio 123-45-6789 diventa 3 123 2 45 4 6789 (senza gli spazi).
Mauro

 ha scritto nel messaggio 
news:1384ba27-632b-4e50...@u69g2000hse.googlegroups.com...

X-Z
oppure
X-Y-Z





C'è qualcosa che ti impedisce di creare stringhe oltre una certa lunghezza?
Se si tratta di dati da archiviare in un database, in previsione del fatto 
che un giorno capiti l'ipotesi estrema di un dato che abbia 4 + 10 + 11 
cifre, non puoi prevedere per il campo una lunghezza inferiore a 25.
Una volta impostata quella lunghezza per il campo, l'obiettivo di contrarre 
la stringa, mi pare, perde di significato, visto che a fronte di una 
complicazione gestionale non avresti alcun vantaggio in termini di spazio 
occupato nel database.
Dunque potresti accodare i 3 (o 2) tipi di dato dando loro una lunghezza 
fissa, coprendo con degli zeri gli spazi inutilizzati.
X = 123
Y = 456789
Z = 34560987
diventa:
0123|0000456789|00034560987 (senza le barre naturalmente)
Mentre
X = 123
Z = 34560987
diventa
0123|0000000000|00034560987
I dati li recuperi con estrema facilità ed è impossibile qualsivoglia 
sovrapposizione.
...oppure ho capito male il quesito? 

esempio 123-45-6789 diventa 3 123 2 45 4 6789 (senza gli spazi).
Non m'intendo di queste cose, ma mi pare una soluzione elegantissima.
Un piccolo problema arriva con le stringhe oltre le dieci cifre. Si
puo' ovviare mettendo il numero di cifre della stringa sempre in due
cifre, eventualmente con lo zero davanti.
per cui diventerebbe (senza spazi)
02 25 09 234412785 12 123456789012
dove 02, 09 e 12 quantificano le cifre della stringa successiva. (lo
zero della prima stringa puo' tranquillamente essere omesso)
ciao 
Stark

Grazie a tutti,
in effetti la soluzione della stringa a lunghezza fissa è la migliore,
inizialmente l'avevo scartata perchè mi portava altri problemi che
adesso sembrano ridimensionati.
Grazie ancora,
ciao,
Marco