Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte » Sun Dec 05, 2010 3:29 pm

Ei näin.

Naputtelijan koodi tuottaa saman tien MAVia. Oikea vastaus on käyttää tyyppejä:

Code: Select all

//Modattu MoveObject-komennon esimerkki
FrameLimit 40
soldier=LoadObject("Media\soldier.bmp",72)
AddText "Arrows to move"

//Objekti jota kopioidaan esiapupaketiksi
tattimaster = LoadObject("Media\tatti.bmp")
ShowObject tattimaster, OFF

//EA-paketin tyyppikokoelma
Type ENSIAPULAUKKU
	Field obj					//Objekt
	Field parannus As Integer	//Parannuskyky
EndType

//Spawnattavien laukkujen määrä
laukkuja = 5

//Luodaan laukut
For i = 1 To laukkuja
	//Luodaan uusi ENSIAPULAUKKU-tyyppi-instanssi
	l.ENSIAPULAUKKU = New(ENSIAPULAUKKU)
	//Kloonataan laukulle objekti
	l\obj = CloneObject(tattimaster)
	//Asetetaan sijainti satunnaisesti
	PositionObject l\obj, Rand(-ScreenWidth()/2, ScreenWidth()/2), Rand(-ScreenHeight()/2, ScreenHeight()/2)
	l\parannus = Rand(50, 100)
Next i

//Elämäpisteet alussa
elkut = 100

Repeat
	//Elämäpisteiden päivitys
	If elkut <= 0 Then MakeError "Sie sind gestorben!"
	elkut = elkut - 1
	
	paketteja = 0
	//Käydään kaikki laukut läpi
	For l.ENSIAPULAUKKU = Each ENSIAPULAUKKU
		//Tutkitaant apahtuuko törmäys
		If ObjectsOverlap(l\obj, soldier, 3) Then
			//Parannetaan laukun parannuskyvyn verran
			elkut = elkut + l\parannus
			//Poistetaan laukun objekti; tämän jälkeen l\obj:n käyttäminen tuottaa MAVin
			DeleteObject l\obj
			//Poistetaan laukun tyyppi-instanssi; tämän jälkeen l:n osoittaman instanssin käytäminen tuottaa MAVin
			Delete l
		EndIf
		paketteja = paketteja + 1
	Next l

	'Update controls
	If LeftKey() Then TurnObject soldier,5
	If RightKey() Then TurnObject soldier, -5
	If UpKey() Then MoveObject soldier, 2
	If DownKey() Then MoveObject soldier, -2
	
	Text 1, 15, "Elämää jäljellä: " + elkut
	Text 1, 30, "EA-paketteja jäljellä: " + paketteja

	DrawScreen

Until EscapeKey()
EDIT:

Lisätty iso kasa kommentteja

CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija » Sun Dec 05, 2010 4:46 pm

Et siis hoksannut katsoa että tuo oli esimerkkikoodi joka kertoo periaatteen, eikä sen ole tarkotuskaan toimia? Olin vähän kiireessä ja kirjoitin tollaisen nopeaa. Tarkoitus on lisätä nuo koodinpätkät omaan koodiin, eikä suorittaa sitä sokeana. Totta kai minä tiesin, että se MAVaa. Ja kyllä minäkin tiedän että tyyppejä kannattaa käyttää mutta esittelin nyt sen aloittelijaystävällisen version. (Ei sillä että tyypit ei oo aloittelijaystävällisiä...)
EDIT:

Aika hyvä peli... :)

<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

koodailija

Re: Tyhmät kysymykset (I/2010)

Post by koodailija » Sun Dec 05, 2010 5:24 pm

Miten saan viholliset väistämään seiniä?Aattelin et jos laittaisin seinien viereen jotai datakerroksen numeroita ja kun vihollinen on niiden päällä niin se vihollinen sitte kääntyisi pois päin,mut se varmaa tulis aika raskaaks ku ois kenttä melkee täynnä noit datakerros numeroita :D.Tai sitte joku sellane ,että jos vihollisen x ja y koordinaatti menee tietyn rajan yli niin se kääntyisi toiseen suuntaa,mut menee turhan säädöks,kun pelis ois tarkotus olla viel monta maata nii ei jaksa jokasee tollasta tehä.Onks jotai objektin ja hit kerroksen distance-tarkastus komentoo ? :D Tai jotai muuta miten ton vois tehä?Sitte viel sellane,et miten tehtii se et viholliset kääntyy pehmeesti eikä kerral sitä 90astet?

User avatar
Frozen
Advanced Member
Posts: 282
Joined: Fri Jan 01, 2010 5:46 pm
Location: Suomi

Re: Tyhmät kysymykset (I/2010)

Post by Frozen » Sun Dec 05, 2010 5:27 pm

koodailija wrote:Miten saan viholliset väistämään seiniä?Aattelin et jos laittaisin seinien viereen jotai datakerroksen numeroita ja kun vihollinen on niiden päällä niin se vihollinen sitte kääntyisi pois päin,mut se varmaa tulis aika raskaaks ku ois kenttä melkee täynnä noit datakerros numeroita :D.Tai sitte joku sellane ,että jos vihollisen x ja y koordinaatti menee tietyn rajan yli niin se kääntyisi toiseen suuntaa,mut menee turhan säädöks,kun pelis ois tarkotus olla viel monta maata nii ei jaksa jokasee tollasta tehä.Onks jotai objektin ja hit kerroksen distance-tarkastus komentoo ? :D Tai jotai muuta miten ton vois tehä?Sitte viel sellane,et miten tehtii se et viholliset kääntyy pehmeesti eikä kerral sitä 90astet?
Ei peli tulisi liian raskaaksi jos tekisit sen datoilla.. eriasia kannattaako, ajaisi melkein sama asian kun hyödyntäisit collisionanglea ja countcollisionia.
Image
Työn alla:
Jotakin epäjulkaistua

koodailija

Re: Tyhmät kysymykset (I/2010)

Post by koodailija » Sun Dec 05, 2010 5:39 pm

Aattelin tehä poiminnan?Oisko mitään vinkkejä esimerkkejä,ku en saa mitenkää tätä nyt toimimaa

User avatar
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by SPuntte » Sun Dec 05, 2010 5:56 pm

Allekirjoituksestani löytyvässä cbMissileSystemissä on jonkinlainen seinienväistelytekoäly. Se käyttää objektin eteen ja sivuille liimattuja "haamuobjekteja", joiden törmäysten perusteella väistellään seiniä. Varmuuden vuoksi hankalammissa tapauksissa käytetään lisäksi poimintaa.
EDIT:

Kyseessä on siis ohjuksen tekoäly - botit haahuilevat sinne tänne hyvin olemattomalla tekoälyllä.

CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX

koodailija

Re: Tyhmät kysymykset (I/2010)

Post by koodailija » Mon Dec 06, 2010 11:41 am

nyt on sellanen ongelma,etten saa eri vihollisille eri waypointteja.Eli alussa kun tehää viholliset ne laitetaa data kerros 2 päälle,ja randomilla arvotaan minkä näkönen vihollinen tehdään,ja randomilla mitä waypointteja se sitten käyttää koko pelin ajan.Mutten saa toimimaa ,että jokane menis sitä omaa waypoint sarjaa vaa kaikki menee aina samaa.

Code: Select all

If GetMap2(3,mapx,mapy)=1 Then
 botti.BOT = New(BOT)
botti\suunta=Rand(1,2)


Const WayPointteja=14
Dim WayPoint(WayPointteja)

If botti\suunta=1 Then

For i=1 To waypointteja
   WayPoint(i) = MakeObject()
Next i 
   PositionObject WayPoint(1),212,494
   PositionObject WayPoint(2),210,183
   PositionObject WayPoint(3),167,138
....

ElseIf botti\suunta=2 Then

  For i=1 To waypointteja
   WayPoint(i) = MakeObject()
Next i 
   PositionObject WayPoint(1),212,494
   PositionObject WayPoint(2),210,183
   PositionObject WayPoint(3),167,138
   PositionObject WayPoint(4),-188,134   
   PositionObject WayPoint(5),-214,144
...

koodailija

Re: Tyhmät kysymykset (I/2010)

Post by koodailija » Mon Dec 06, 2010 11:57 am

ei tarvii vastaa ,sain toimii tein molemmille oman taulukon

User avatar
Tuxi
Active Member
Posts: 189
Joined: Wed Jan 21, 2009 11:25 pm
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by Tuxi » Tue Dec 07, 2010 10:36 pm

Törmäsin äsken kummalliseen juttuun CB:ssä. Mistäköhän johtuu?

Code: Select all

Global f#
Global g#
f = 15.0
g# = 15.0

Print f+"  "+g#
test()
Print f+"  "+g#
WaitKey
End

Function test()
    f = 60
    g# = 60
End Function
Siis jos kytän globaalin float-muuttujan perässä #-merkkiä, muttuja menettää globaaliuden. Taitaa olla vain joku CB:n bugi, mutta aika ärsyttävä sellainen. Meni aika kauan tuon löytämiseen.

Mielenkiintoista myös tällainen. Normaalistihan CB heittää erroria kahdesta samannimisestä muuttujasta.

Code: Select all

Global f#   // Ei toimi, jos tämän rivin poistaa.
f = 15.0
f# = 15.0

Print f+"  "+f#
test()
Print f+"  "+f#
Gosub test2
Print f+"  "+f#
WaitKey
End

Function test()
    f = 60
    f# = 60
End Function

test2:
    f = 40
    f# = 40
Return
Projektit:
Jotain pientä (Ehkä vähän suurempaakin)

-Tuxi- (myös Tuxi4321)

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim » Wed Dec 08, 2010 9:13 am

Tuxi wrote:Törmäsin äsken kummalliseen juttuun CB:ssä. Mistäköhän johtuu?
...
Kyseessä on joidenkin wanhempien tuntama wanha bugi. :roll: Dim ja Global sanojen kanssa on tullut harrastettua muotoa: Global <muuttuja> As <tietotyyppi> CoolBasicin tuntien en käyttäisi %#$ merkkejä ollenkaan. Syytä miksi näin on, voinee etsiä /no/:sta. :P Itse en ole törmännyt mokomaan aikaisemmin, koska kuulin bugista ja naputin koodia aina "FVD päällä".
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Tyhmät kysymykset (I/2010)

Post by Ruuttu » Thu Dec 09, 2010 4:06 pm

Hei osaako joku modata cbFUN:in TypeSTR -komentoa niin, että sillä voisi lähetää myös muita näppäinkomentoja, tyyliin TAB, ESC tai CTRL? TypeSTR käyttää keybd_event -komentoa, jonka pitäisi tukea kaikkien näppäinten painalluksia, ja jopa erikseen näppäinten painamista ja vapauttamista. Tämän ei pitäisi vaatia mitään erityisiä ponnistuksia, en vain tiedä missä muodossa ja missä järjestyksissä pitäisi DLL:lle mitäkin sisältöä lähettää. Tai onko jo olemassa koodia joka pystyisi näitä näppäinkomentoja lähettämään?

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by axu » Sat Dec 11, 2010 5:20 pm

Onkos kellään sellaista hash-funktiota jolle voi antaa merkkijonon ja se palauttaa kokonaisluvun? Vai pitääkö itse kehittää jotakin... Oikeastaan kuinka suurella todennäköisyydellä jos on semmonen 100 000 sanaa ja jokaisesta otettu 32-bit integer hash, niin jollain satunnaisesti rämpytetyllä merkkijonolla löytyisi hash tuolta listasta? Tarvitsisin oikeinkirjoituksen tarkistamiseen, mutta suoraan merkkijonojen vertaaminen on sen verran hidasta, että se pitää tehdä hasheja vertaamalla.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija » Sat Dec 11, 2010 6:47 pm

axu wrote:Onkos kellään sellaista hash-funktiota jolle voi antaa merkkijonon ja se palauttaa kokonaisluvun? Vai pitääkö itse kehittää jotakin... Oikeastaan kuinka suurella todennäköisyydellä jos on semmonen 100 000 sanaa ja jokaisesta otettu 32-bit integer hash, niin jollain satunnaisesti rämpytetyllä merkkijonolla löytyisi hash tuolta listasta? Tarvitsisin oikeinkirjoituksen tarkistamiseen, mutta suoraan merkkijonojen vertaaminen on sen verran hidasta, että se pitää tehdä hasheja vertaamalla.
Katoppa SDK:ta.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 3:18 pm

Re: Tyhmät kysymykset (I/2010)

Post by DJ-Filbe » Sat Dec 11, 2010 7:15 pm

axu wrote:Onkos kellään sellaista hash-funktiota jolle voi antaa merkkijonon ja se palauttaa kokonaisluvun? Vai pitääkö itse kehittää jotakin... Oikeastaan kuinka suurella todennäköisyydellä jos on semmonen 100 000 sanaa ja jokaisesta otettu 32-bit integer hash, niin jollain satunnaisesti rämpytetyllä merkkijonolla löytyisi hash tuolta listasta? Tarvitsisin oikeinkirjoituksen tarkistamiseen, mutta suoraan merkkijonojen vertaaminen on sen verran hidasta, että se pitää tehdä hasheja vertaamalla.
Ei näin...
Muunnat merkkijonot tavuiksi asc -funktiolla. Sitten sinulla pitäisi olla indeksoitu taulukko, esim. aakkosjärjestyksessä, josta löytyy sanasto. Sitten voisit hakea indeksoidusta taulukosta sanat ja verrata niitä merkkijonoihin (char-tyyppisiin taulukkomerkkijonoihin). Huomattavan paljon nopeampaa. Eli teet tavallaan oman "uuden" tietotyypin, char :n, joka taulukoi merkkijonon yhden merkin pituisiin osiin. Jos kaipaat esimerkkiä, voin moisen tehdä.

User avatar
valscion
Moderator
Moderator
Posts: 1589
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by valscion » Sat Dec 11, 2010 8:14 pm

axu wrote:Onkos kellään sellaista hash-funktiota jolle voi antaa merkkijonon ja se palauttaa kokonaisluvun? Vai pitääkö itse kehittää jotakin... Oikeastaan kuinka suurella todennäköisyydellä jos on semmonen 100 000 sanaa ja jokaisesta otettu 32-bit integer hash, niin jollain satunnaisesti rämpytetyllä merkkijonolla löytyisi hash tuolta listasta? Tarvitsisin oikeinkirjoituksen tarkistamiseen, mutta suoraan merkkijonojen vertaaminen on sen verran hidasta, että se pitää tehdä hasheja vertaamalla.
MD5 vois toimia tuohon. http://vesq.org/filestorage/cbkk/MD5.CB
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Tyhmät kysymykset (I/2010)

Post by naputtelija » Sat Dec 11, 2010 8:22 pm

Pitääkö vielä selventää...
download/file.php?id=1403
Kun olet purkanut sen cb-kansioon etsi ohje-htmleistä "Hash" ja kun olet sen löytänyt, sisällytä tarpeellinen tiedosto koodiin ja hashaa.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by axu » Sat Dec 11, 2010 9:06 pm

Noniin pitääpä itse siis selventää kun Filbe oli ainoa joka ymmärsi oikein(ehkä): funktion pitäisi siis palauttaa kokonaisluku eikä merkkijonoa. SDK:n funktion katsoin heti ensimmäisenä ja tuon MD5:n pikaisen haun jälkeen, mutta ne palauttaa merkkijonoina hashin, joka ei sovi tarpeisiini. Nuo funktiot muuttuu kyllä helposti kokonaisluvun palauttaviksi (poistaa vaan Hex-merkinnät ja muut turhat härpäkkeet), mutta epäilen että saattaa pukata overflowia jos menee liian suureksi luvuksi... Pitänee kuitenkin kokeilla :)
EDIT:

Näyttäisi tuo SDK:n yksinkertainen hash funktio toimivan hyvin:

Code: Select all

Repeat
    aaa$ = Input("...")
    Text 0, 15, "Hash: " + Hash(aaa)
    DrawScreen
Forever

Function Hash(st$)    //Originally by Bagard
    For i = 1 To 32
        For o = 1 To Len(st$)
            char = Asc(Mid(st$, o, 1))
            temp = temp + (char*i) Mod (i+o)
        Next o
        
        sum = sum + temp
    Next i
    
    Return sum
End Function 
Nyt vain pitäisi selvittää, tuleeko tuolla kuinka helposti törmäyksiä.
@DJ-Filbe: tuo on paljon hitaampi tapa jos oikein tajusin. Minun tavallani tarvitsee tehdä vain yksi vertailu per sana kun taasen sinun tavalla yhtä monta kertaa kuin sanassa on kirjaimia. Tosin hashaaminen on raskaampaa kuin merkkejen ascii-koodien tallettaminen, mutta kun tarvitsee tehdä vain yksi hashaus per tarkistus (sanakirja hashataan etukäteen) niin se ei vaikuta paljoa. Huono puoli minun ratkaisutavassa on epäpätevien sanojen mahdollinen hyväksyminen jos tulee "törmäys" eli väärin kirjoitetun sanan hash on sama kuin jonkun oikeinkirjoitetun. Mielenkiinnosta haluasin kuitenkin nähdä, miten teet tuommoisen (oman tietotyypin tekeminen CB:llä on vaikeaa, kun kyseessä on epämääräisen kokoinen taulukko).

EDIT2:
Jaahas olin ilmeisesti laskenut väärin tuon, kuinka nopeasti tuo integerin rajat ylittyy ja tulee overflow errori :D
Jos nyt oikein laskin, niin tästä hashista ei pitäisi tulla koskaan törmäyksiä (eli tästä pystyisi myös laskemaan alkuperäisen merkkijononkin):

Code: Select all

Repeat
    aaa$ = Input("...")
    Text 0, 15, "Hash: " + Hash(aaa)
    DrawScreen
Forever

Function Hash(st$)
    For o = 1 To Len(st$)
        char = Asc(Mid(st$, o, 1))
        sum = sum + (char*(o*256 - 255))
    Next o

    Return sum
End Function 
Ei tullutkaan overflowia vaikka epäinhimillisen pitkää sanaa yritin :)
EDIT3:
Mitä ihmettä!? Pakko jossain olla kyllä nyt virhe! Kun yksi kokonaisluku on 4 tavua, niin ei siihen pitäisi pystyä pakkaamaan muutakuin 4 merkin verran tietoa :lol:
EDIT4:
Mihin katosi viestisi, Filbe? Tuo binäärihaku vaikutti aika toimivalta ratkaisulta, en kerennyt vielä kokeilemaan tuota koodiasi. Oliko koodissa jokin bugi tai jotain muuta niin, että poistit viestisi? Voisi kokeilla yhdistää hash-systeemin binäärihakuun, jos ensin asettais järjestykseen nuo hashit kun ei vieläkään tahtoisi varata tajuttoman kokoista taulukkoa tuota varten (jos pisin sana on vaikka 15-kirjaiminen, niin taulukon koko on n. 15*100000*4 = 6 MB.[/edit]
Last edited by axu on Sat Dec 11, 2010 10:39 pm, edited 1 time in total.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset (I/2010)

Post by TheFish » Sat Dec 11, 2010 10:38 pm

axu wrote:Mitä ihmettä!? Pakko jossain olla kyllä nyt virhe! Kun yksi kokonaisluku on 4 tavua, niin ei siihen pitäisi pystyä pakkaamaan muutakuin 4 merkin verran tietoa :lol:
Hashaus ei pakkaa siihen numeroon mitään. Et siis pysty palauttamaan hashista tekstiä.
axu wrote:Minun tavallani tarvitsee tehdä vain yksi vertailu per sana kun taasen sinun tavalla yhtä monta kertaa kuin sanassa on kirjaimia.
Oikeastaan sinun tarvitsisi tarkistaa kirjaimia vain niin pitkään, että löytyy yksi poikkeava kirjain (tekeeköhän cb näin jo oletuksena?). Tai useimmissa tapauksissa pelkkä merkkijonon pituuden tarkistuskin riittää. Yhdistettynä jonkinlaiseen binääripuu-viritelmään tuo saattaisi olla nopeampaa kuin hashata 100 000 lausetta, eli kannattaa testata kumpaakin keinoa.
CoolBasic henkilökuntaa
Kehittäjä

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by axu » Sat Dec 11, 2010 10:50 pm

TheFish wrote:
axu wrote:Mitä ihmettä!? Pakko jossain olla kyllä nyt virhe! Kun yksi kokonaisluku on 4 tavua, niin ei siihen pitäisi pystyä pakkaamaan muutakuin 4 merkin verran tietoa :lol:
Hashaus ei pakkaa siihen numeroon mitään. Et siis pysty palauttamaan hashista tekstiä.
axu wrote:Minun tavallani tarvitsee tehdä vain yksi vertailu per sana kun taasen sinun tavalla yhtä monta kertaa kuin sanassa on kirjaimia.
Oikeastaan sinun tarvitsisi tarkistaa kirjaimia vain niin pitkään, että löytyy yksi poikkeava kirjain (tekeeköhän cb näin jo oletuksena?). Tai useimmissa tapauksissa pelkkä merkkijonon pituuden tarkistuskin riittää. Yhdistettynä jonkinlaiseen binääripuu-viritelmään tuo saattaisi olla nopeampaa kuin hashata 100 000 lausetta, eli kannattaa testata kumpaakin keinoa.
Kokeilin jo verrata yhden framen aikana 100 000 kokonaislukua ja merkkijonoa. Merkkijonojen kanssa tuli hirvittävä töksähdys tarkistuksen aikana, kun taasen luvuilla ei minkäänlaista huomattavaa stoppausta. Tarkistushan tehdään vain tarvittaessa, ei joka framen aikana joten sen tehokkaampaa tekniikkaa ei tarvita. Ja hashaushan suoritetaan jo etukäteen (itse asiassa hashaustulokset talletan erilliseen tiedostoon joten ohjelman ei tarvitse tätä tehdä joka kerta uudestaan). Olen huomannut, että CB:n kanssa merkkijonojen kanssa värkkäily on vähintään yhtä raskasta kuin grafiikan piirto, eli hiiddaaaasttaaaaaa.
Mitä tulee tuohon lausahdukseeni, luulin että tuo laatimastani hashaus-funktiosta saatu hashi olisi käännettävissä takaisin tekstiksi, mutta kuten on todettu, se on sula mahdottomuus. Sekoitin tuossa funktiossani ilmeisesti kerto- ja potenssimerkin. Jos sinne laitettaisiin se potenssimerkki paikoilleen (char*(o*256 - 255) => char*(256^o)) niin sitten se vissiin olisi purettavissa tuo alkuperäinen merkkijono, mutta neljää merkkiä enempää ei pystyisi tallentaa (ja ottaen huomioon, että CB käyttää etumerkillisiä kokonaislukuja, ei pystyisi sitäkään) :(
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim » Mon Dec 13, 2010 1:35 pm

Itse koettelin viritellä CB:llä taannoin hasmapia ja siinä samalla tuli testattua läjä hashfunktioita. (hashmap päätyi epic failiin jälkikäteen katsottuna.. :oops:) Nopein viritelmä on CB:n sisäänrakennettu Crc32, kun data on valmiiksi muistipalassa. Sekundääriseksi hashfunktioksi soveltuu mikä tahansa taulukko, joka on arvottu täyteen 2< lukuja: "next_hash = hash * randomtaulukko(hash mod randomtaulukon_koko)" :)
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.

Locked