Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Väike abi vaja Javascriptiga märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 07.01.2009 20:07:49 Väike abi vaja Javascriptiga vasta tsitaadiga

Tahan ühele mängule vajaminevat scripti täiustada, hetkel näeb asi välja nii:
javascript: var report = document.body.innerHTML; var coords = report.match (/>\d{3}\|\d{3}</g);for ( var i=coords.length-1; i>=0; --i ){document.writeln("[village]" + coords[i].substring(1,8)+"[/village]<br>")};

Mis ta siis teeb: Teatud lehel kus on kordinaadid loeb ta need ning paneb nad [village][/village] tagidesse.
Välja näeb asi nii:
[village]810|607[/village]
[village]812|607[/village]
[village]810|608[/village]
[village]807|606[/village]
[village]775|722[/village]
...

Oleks aga vaja teha nii, et ta nummerdaks asjad ka ära:

1 [village]810|607[/village]
2 [village]812|607[/village]
3 [village]810|608[/village]
4 [village]807|606[/village]
5 [village]775|722[/village]
...

Peaks suhteliselt litsalt teostatav olema, kuid ei oska ise seda keelt ning ei tea ka mis "käsklust" pean otsima, et isearetamisega alustada.

Ehk keegi aitab hädast välja? icon_razz.gif
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 07.01.2009 20:16:17 vasta tsitaadiga

Lihtsalt lisad väikese loenduri:
javascript:
  1. var report = document.body.innerHTML;
  2. var coords = report.match (/>\d{3}\|\d{3}</g);
  3. var counter = 0;
  4. for ( var i=coords.length-1; i>=0; --i ){
  5.   counter++;
  6.   document.writeln("" + counter + "[village]" + coords[i].substring(1,8)+"[/village]<br>");
  7. }

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 07.01.2009 21:29:47 vasta tsitaadiga

Suured tänud asi funkab icon_smile.gif
Samas tõusid ka minu abitsioonid selle scripti osas icon_lol.gif

Kõigepealt et pilt selgemaks saaks: Tegu on mänguga kus on nö maailma kaart. Igal külal on oma kordinaadid. Maailm on jaotatud kontinentideks.
Näit 933|241 kordinaatidega küla asub K29's, 931|602 asub K69's.

Praegu teeb script sellise listi (ühest suvalisesest mängijast):

1 [village]933|241[/village]
2 [village]925|246[/village]
3 [village]937|235[/village]
4 [village]707|601[/village]
5 [village]710|605[/village]
6 [village]929|238[/village]
7 [village]931|602[/village]
8 [village]932|603[/village]
9 [village]790|593[/village]
10 [village]933|604[/village]
11 [village]725|598[/village]
12 [village]933|603[/village]
13 [village]930|601[/village]
14 [village]788|588[/village]
15 [village]789|591[/village]
16 [village]789|590[/village]
17 [village]927|243[/village]

Kui keeruline on asja panna neid külasid Kontinentide järgi järjestama?

Et näiteks alustab väiksemast ning liigub suuremaks välja.

-e-

Praegu script selline:
javascript: var report = document.body.innerHTML; var coords = report.match (/>\d{3}\|\d{3}</g); var counter = 0; for ( var i=coords.length-1; i>=0; --i ){counter++; document.writeln("" + counter + " [village]" + coords[i].substring(1,8)+"[/village]<br>");};


Peaks mingi "sort" funktsiooni sisse istutama?
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 08.01.2009 01:39:56 vasta tsitaadiga

Terror kirjutas:
Näit 933|241 kordinaatidega küla asub K29's, 931|602 asub K69's.
Kui keeruline on asja panna neid külasid Kontinentide järgi järjestama?


Nojaa... aga kustkohast seda teada saab, mis küla millise kontinendiga seotud on?

sort() funktsioon on JavaScriptis täiesti olemas... lihtsalt googelda veidi.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 08.01.2009 08:25:20 vasta tsitaadiga

Kordinaatide Esimesed nr'd tähistavad Kontinenti. Näit 933|241 kordinaatidega küla asub K29's
Kuid ma ei mõista juba seda kuhu see "sort" toppida. seal kus ta juba asja välja kirjutab on ka juba counter sees, seega peaks need külad juba enne counterit sorteeritud olema vms icon_confused.gif
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
oicu
HV kasutaja

liitunud: 23.11.2006




sõnum 08.01.2009 10:19:05 vasta tsitaadiga

selle for tsükli sees, sa peaks koordinaadid arraysse panema, alles peale seda teed sorteerimise ja lisad järjekorranumbrid ette.
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 08.01.2009 10:21:33 vasta tsitaadiga

Kirjuta oma sortimise algoritm (funktsioon) ja määra see atribuudiks sort() meetodile.
http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C8D00514FA4
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 08.01.2009 18:57:53 vasta tsitaadiga

mikk36 kirjutas:
Kirjuta oma sortimise algoritm (funktsioon) ja määra see atribuudiks sort() meetodile.
http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C8D00514FA4

Ma hakkan enne prääksuga kükkides Narva minema, kui mingi algortimi valmis saan, minu oskused progemises on umbkaudu sellised, et ma suudan ühest scriptist mingi funktiooni teise scripti üle kopeerida suurel katse eksitus meetodil icon_lol.gif
( var i=coords.length-1; i>=0; --i ) selline rida on mulle nagu hiina keel.
NAgu paistab käib praegune ülesanne mulle mäekõrguselt üle võimete, kuid kui kellegi jaoks asi imelihtne ning viitsib selle ära kribada siia siis positiivse kommi saan ikka vastutasuks panna minimaalselt icon_smile.gif
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 08.01.2009 19:40:55 vasta tsitaadiga

Kusjuures enne saaksid sa selle funktsiooni valmis kui prääksuga kükkidega Narva icon_wink.gif
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 08.01.2009 19:48:55 vasta tsitaadiga

mikk36 kirjutas:
Kusjuures enne saaksid sa selle funktsiooni valmis kui prääksuga kükkidega Narva icon_wink.gif

Anna siis mingi vihjegi icon_biggrin.gif
Kui sa siia valmis funktsiooni copiksid siis mul läheks pool päeva et see scripti õigesse kohta pista beer_yum.gif
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 08.01.2009 20:44:54 vasta tsitaadiga

http://mikk36.eu/test/js_test.html
Sorteeritakse tuimalt küla numbri alusel, edasisi koordinaate ei arvestata.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 08.01.2009 22:34:34 vasta tsitaadiga

On mu aretises siin mingi loogika?

javascript:
var report = document.body.innerHTML;
var coords = report.match (/>\d{3}\|\d{3}</g);
function compare_villages(coords1, coords2)
{
   var village1 = coords1[4]+coords1[0];
   var village2 = coords2[4]+coords2[0];
   return((village1 < village2) ? -1 : ((village1 > village2) ? 1 : 0));
}
var counter = 0;
coords.sort(compare_villages);
for ( var i=coords.length-1; i>=0; --i ){counter++; document.writeln("" + counter + " [village]" + coords[i].substring(1,8) +"[/village]<br>");};
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 09.01.2009 00:56:49 vasta tsitaadiga

Oi jah... niiviisi on see kood muidugi lühikene, aga üsna raskesti käsitletav.

Parem on lugeda need koordinaadid mingisse andmestruktuuri, sorteerida see ning siis viia tagasi algkujule.

Pikk ta sai, aga peaks toimima:

html:
  1.     <title>Test</title>
  2.     <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
  3.     <script type="text/javascript" src="sort.js"></script>
  4.   </head>
  5.     <p><a href="#" onclick="return sort_coords();">Sorteeri kontinentide järgi</a></p>
  6.     <ul>
  7.       <li>933|241</li>
  8.       <li>925|246</li>
  9.       <li>937|235</li>
  10.       <li>707|601</li>
  11.       <li>710|605</li>
  12.       <li>929|238</li>
  13.       <li>931|602</li>
  14.       <li>932|603</li>
  15.       <li>790|593</li>
  16.       <li>933|604</li>
  17.       <li>725|598</li>
  18.       <li>933|603</li>
  19.       <li>930|601</li>
  20.       <li>788|588</li>
  21.       <li>789|591</li>
  22.       <li>789|590</li>
  23.       <li>927|243</li>
  24.     </ul>
  25.   </body>
  26. </html>


javascript:
  1. function sort_coords() {
  2.   // read coordinates from page
  3.   var coords = read_coords();
  4.  
  5.   // sort by continents
  6.   coords.sort(compare_continents);
  7.  
  8.   // output to document
  9.   write_coords(coords);
  10.  
  11.   return false;
  12. }
  13.  
  14. /**
  15. * Reads coordinates from page and returns them as array of objects.
  16. *
  17. * For example when page contains 123|456 and 112|224, then it will
  18. * return [{x:123, y:456, cont: 63}, {x:112, y:224, cont: 42}]
  19. */
  20. function read_coords() {
  21.   return map( function(raw_coord) {
  22.     return {
  23.       x: raw_coord.substr(1, 3),
  24.       y: raw_coord.substr(5, 3),
  25.       cont: raw_coord.charAt(5) + raw_coord.charAt(1)
  26.     };
  27.   }, document.body.innerHTML.match(/>\d{3}\|\d{3}</g));
  28. }
  29.  
  30. function compare_continents(c1, c2){
  31.   return (c1.cont < c2.cont) ? -1 : ((c1.cont > c2.cont) ? 1 : 0);
  32. }
  33.  
  34. /**
  35. * Writes coordinates back to page inside [village] tags and with numbers.
  36. */
  37. function write_coords(coords) {
  38.   return map( function(coord, i) {
  39.     document.writeln("" + (i+1) + " [village]" + coord.x + "|" + coord.y + "[/village]<br />");
  40.   }, coords);
  41. }
  42.  
  43. // Small helper function for transforming arrays.
  44. function map(f, arr) {
  45.   var new_arr = [];
  46.   for (var i=0; i<arr.length; i++) {
  47.     new_arr[i] = f(arr[i], i);
  48.   }
  49.   return new_arr;
  50. }

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Väike abi vaja Javascriptiga
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.