Avatar billede lequet Nybegynder
08. maj 2002 - 21:19 Der er 6 kommentarer og
1 løsning

Problem med tilfældighed

Jeg har nu længe siddet med dette script, som ikke virker helt efter hensigten. Formålet med scriptet er at det laver et tilfældigt ord, som dog kan udtales. Meningen er at det skal lave et ord på mellem 5 og 10 tegn, men netop den del kan jeg ikke få til at virke.

Jeg har også scriptet i en PHP udgave, med præcist samme problem, så det er lidt irriterende... Nogen der kan se hvad jeg gør galt? (Beklager hvis koden ser lidt rodet ud :)

function wordgen() {
 
    var runwhile = Math.floor(Math.random() * 10) + 1 ;
 
    var alpha = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z") ;
 
    var vokal = new Array("a", "e", "i", "o", "u", "y") ;
 
    var konsonant = new Array("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z") ;
 
    var antal = alpha.length ;
 
    var result = "" ;
   
    for(i = 0 ; i <= runwhile ; i++) {
      var currentchar = Math.floor(Math.random() * antal) + 1 ;
   
      for(a = 0 ; a <= vokal.length ; a++) {
        if (alpha[currentchar - 1] == vokal[a]) {
          var type = "vokal" ;
        }
      }
   
      for(b = 0 ; b <= konsonant.length ; b++) {
        if (alpha[currentchar - 1] == konsonant[b]) {
          var type = "konsonant" ;
        }
      }
   
      if (next) {
        if (type != next) {
          continue ;
        }
      }
   
      if(type == "konsonant") var next = "vokal" ;
      if(type == "vokal") var next = "konsonant" ;
               
      var result = result + alpha[currentchar - 1] ;
   
    }
   
    var result = result.toUpperCase() ;
   
    return result ;
 
  }
Avatar billede code_master Nybegynder
08. maj 2002 - 21:22 #1
det er nok rimelig svært at få den til at lave læselig ord, den kender jo ikke alle ord i verden

prøv og lav array
Avatar billede lequet Nybegynder
08. maj 2002 - 21:24 #2
code_master >> Det er heller ikke meningen at den skal lave forståelige ord :) Meningen er at den genererer et tilfældigt ord, som kan udtales, men ikke nødvendigvis betyder noget... Altså generelt bare at der ikke må være 2 konsonanter/vokaler lige efter hinanden :)
Avatar billede lequet Nybegynder
08. maj 2002 - 21:24 #3
Og det virker forresten også fint, det der ikke virker er at ordet kun skal være mellem 5 og 10 tegn langt :)
Avatar billede jakoba Nybegynder
08. maj 2002 - 21:42 #4
du skal ikke lægge en til her:
  var currentchar = Math.floor(Math.random() * antal);
dels får du aldrig noggen 'a'er, desl vil tallet nogen gange blive lig med alpha.length, dvs pege på den ikke eksisterende celle efter den sidst i dit array.

eftersom de konsonanter der står i det genererede password blot er 'tæl nedad fra vokalen' hjælper de slet ikke på at gøre det password srærere at knække, såsnart man kender systemet behøver man blot gætte vokaler (og dem er der ikke mange af).

her tæller du en udover enden af dit array:
    for(a = 0 ; a <= vokal.length ; a++) {
brug  a < vokal.length  istedet.

ville det ikke være meget nemmere skiftevis at lave en konsonant og en vokal udaf de to arrays der netop indeholder konsonanter og vokaler:

function wordgen() {

    var runwhile = Math.floor(Math.random() * 6) + 5 ; mindst 5+0, max 5+5
    var vokal = new Array("a", "e", "i", "o", "u", "y") ;
    var konsonant = new Array("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z") ;

    var result = "" ;
 
    for(i = 0 ; i < runwhile ; i++) {

        if ( i%2 == 0 ) { // i er et lige tal
            result += konsonant[ Math.floor( Math.random() * konsonant.length ) ];
        } else {
            result += vokal[ Math.floor( Math.random() * vokal.length ) ];
        }
    }
 
    result = result.toUpperCase() ;
    return result ;

}

mvh JakobA
Avatar billede lequet Nybegynder
08. maj 2002 - 22:05 #5
JakobA > Takker mange gange, det hjalp i hvert fald :) Selvfølgelig er det ikke svært at knække en kode som denne, den indeholder trods alt kun bogstaver... Men meningen er ikke så meget at generere kodeord, selvom det selvfølgelig er en oplagt anvendelse for scriptet... Det var mere et projekt jeg lavede for at have noget at lave (Og øve mig lidt i JavaScript), og siden har det vist sig at være ydert brugbart hvis man keder sig og har brug for et "godt" grin, det er trods alt nogle spøjse ord den kommer med :) (JAJA, man har vel lov at være underlig :)

Takker igen
Avatar billede jakoba Nybegynder
08. maj 2002 - 22:39 #6
Lige den situation har jeg faktisk været i selv. Det er virkelig nogen spøjse ord man kan få ud af det. Det er muligt di er underlig, men du er ikke den eneste :-))

tak for pts.
Avatar billede lequet Nybegynder
08. maj 2002 - 23:12 #7
Det er virkelig rart at vide man ikke er alene om det :) Men nogen skal jo være underlige, hvis ikke der var det, havde vi et ord mindre i det danske sprog :)

Selv tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester