Fórum Root.cz
Ostatní => Odkladiště => Téma založeno: kvas 24. 01. 2024, 19:36:24
-
Ahojte,
hladam transformacnu funkciu f(x), ktora z objektu (OBJ), ktory ma 4 celociselne kladne atributy (povedzme v intervale <1, 999>), vyrobi jedno cislo ale tak, aby platilo, ze ak je OBJ A mensi ako OBJ B, tak aj vysledok funkcie f(OBJ A) < f(OBJ B). Prvy atribut ma najvyssiu prioritu, posledny najnizsiu,u prvych 3 atributov plati, ze cim mensie cislo, tym mensi vysledok f(OBJ X), ale u toho 4. plati opak, ze cim vacsie cislo, tym f(OBJ X) je mensie.
priklad:
OBJ 1/1/1/20 < OBJ 1/1/1/4 < OBJ 1/1/2/30 < OBJ 1/4/1/1 < OBJ 2/1/1/5 < OBJ 2/1/1/3 atd...
napadlo mi zatial toto: vytvorit textovy retazec a ten potom prekonvertovat na cislo. Aby sa jednotlive atributy neprekryvali, doplnit ich pozicie "dostatocnym" poctom nul, a to posledne cislo odpocitat od "zarovnania", v tomto pripade od cisla 1000.
1 001 001 980 < 1 001 001 996 < 1 001 002 970 atd..
asi by to takto fungovalo, ale je to take kostrbate, preto sa chcem spytat, ci ste niekedy nieco podobne riesili a ak ano, ako.
-
Ahojte,
hladam transformacnu funkciu f(x), ktora z objektu (OBJ), ktory ma 4 celociselne kladne atributy (povedzme v intervale <1, 999>), vyrobi jedno cislo ale tak, aby platilo, ze ak je OBJ A mensi ako OBJ B, tak aj vysledok funkcie f(OBJ A) < f(OBJ B). Prvy atribut ma najvyssiu prioritu, posledny najnizsiu,u prvych 3 atributov plati, ze cim mensie cislo, tym mensi vysledok f(OBJ X), ale u toho 4. plati opak, ze cim vacsie cislo, tym f(OBJ X) je mensie.
priklad:
OBJ 1/1/1/20 < OBJ 1/1/1/4 < OBJ 1/1/2/30 < OBJ 1/4/1/1 < OBJ 2/1/1/5 < OBJ 2/1/1/3 atd...
napadlo mi zatial toto: vytvorit textovy retazec a ten potom prekonvertovat na cislo. Aby sa jednotlive atributy neprekryvali, doplnit ich pozicie "dostatocnym" poctom nul, a to posledne cislo odpocitat od "zarovnania", v tomto pripade od cisla 1000.
1 001 001 980 < 1 001 001 996 < 1 001 002 970 atd..
asi by to takto fungovalo, ale je to take kostrbate, preto sa chcem spytat, ci ste niekedy nieco podobne riesili a ak ano, ako.
f(a/b/c/d) = (1000-d) + 1000*(c+1000*(b+1000*a)) = (1000-d) + 1000*c + 1000*1000*b + 1000*1000*1000*a
f(1/1/1/20) = 1*10^9 + 1*10^6+1*10^3 + (1000-20)
-
dakujem, to uz vyzera lepsie.
-
V podstate si svuj problem uvedom jako problem datumu - ktery je prevede na vteriny - tj. kazdy sub-division ma nejaky rozsah, a ty dulezitejsi se nasobi jejich poctem: d*86400 + h*3600 + m*60 + s