Avatar billede mailand Nybegynder
08. oktober 2003 - 01:03 Der er 5 kommentarer

Bytte om på rækkefølgen af bogstaver i et ord.

Alright... denne er lidt tricky, og tjener egentlig lidt til et pseudo-videnskabeligt projekt...

Først til det egentlige 'problem'.... :

Er det mon muligt at konstruere en funktion, der tager et ord, hvis ordet har flere end 3 bogstaver, så skal den bytte om på rækkefølgen af bogstaverne, undtagen første og sidste bogstav....

Eksempel:

Jeg hedder Andreas
- kunne blive til -
Jeg hdeder Adaenrs


Okay... til det pseudovidenskabelige... I følge en forskergruppe ved Cambridge universitet ser den menneskelige hjerne på ord som helhed og ikke som enkeltheder. Deres forskning har vist, at bare første og sidste bogstav er korrekt i et ord, så vil den menneskelige hjerne være i stand til at udrede ordet...

Spørg mig ikke hvorfor måske det bare er en sygelig sproglig interesse, der gør, dette fascinerer mig, men denne teori kunne jeg godt tænke mig at lege lidt med...

Er der nogen, der evt. kan lede mig lidt på vej her?

Hvis der er nogen, der har lyst til at læse den artikel, der satte mig igang, kan de læses på mit eget site (http://andreas.mailand.dk). Artiklen er på engelsk.

Andreas Mailand
andreas@mailand.dk
Avatar billede mailand Nybegynder
08. oktober 2003 - 01:11 #1
Hmmm, ja, altså noget af vejen kan jeg nok godt lidt selv.

Man kunne splitte hele teksten op til et array:
arrTekst = split(strTekst," ")

Derefter tage hvert enkelt ord og tjekke længden... if len(arrTekst(i)) > 3 then

Det er nok specielt randomizationen, der hyler mig lidt ud af den... For hvordan kan man 'bytte' om på bogstavernes placering.... Kunne man tage hvert enkelt bogstavs placering som tal, og så tildele det et nyt tal (den nye placering), og så bygge et eller andet system, der kunne sætte ordene sammen igen efter deres nye 'placeringstal'...

Okay, klokken er mange, og ovenstående lyder lidt tricky i mine ører. Jeg hører MEGET gerne fra en eller flere, der måske har et bud....

Andreas Mailand
andreas@mailand.dk
Avatar billede tjp Mester
08. oktober 2003 - 01:59 #2
Ordet du leder efter er "permutation", hvilket er termen for at bytte rundt på elementers rækkefølge.

Da første og sidste bogstav fastholdes, behøver du egentlig ikke at tage højde for om der er over 3 bogstaver eller ej, da der kun findes én permutation for både ét og ingen element.

Jeg havde engang en permutationsfunktion liggende, men jeg kan desværre ikke finde den, men nu ved du da hvad du skal lede efter! *S*
Avatar billede squashguy Nybegynder
08. oktober 2003 - 02:11 #3
prøv denne


text = "Det er nok specielt randomizationen, der hyler mig lidt ud af den... For hvordan kan man 'bytte' om på bogstavernes

placering.... 'Kunne man tage hvert enkelt bogstavs placering som tal, og så tildele det et nyt tal (den nye placering), og så bygge et

eller andet system, 'der kunne sætte ordene sammen igen efter deres nye 'placeringstal'..."

Randomize

Function RandOrd(ord)
    Dim i, index, ordlen, delord

    If Len(ord) >= 4 Then
        ordlen = Len(ord)-2
        delord = Mid(ord, 2, ordlen)

        ReDim index(ordlen)

        For i=1 To ordlen
            index(i) = i+1
        Next
       
        For i=1 To ordlen
            a = Int(Rnd*ordlen)+1
            b = index(i)
            index(i) = index(a)
            index(a) = b
        Next
       
        mixord = Left(ord, 1)
       
        For i=1 To ordlen
            mixord = mixord & Mid(ord, index(i), 1)
           
        Next
       
        mixord = mixord & Right(ord, 1)
   
        RandOrd = mixord
    Else
        RandOrd = ord
    End If
End Function

arrayord = Split(text, " ")

For i=0 To UBound(arrayord)
    arrayord(i) = RandOrd(arrayord(i))
Next

newtext = Join(arrayord, " ")

MsgBox newtext
Avatar billede neoscan Nybegynder
08. oktober 2003 - 03:30 #4
Hej Mailand!


Nedenstående er ganske vist HP48 kode, men jeg har skrevet en forklaring til koden
med, så algoritmen og fremgangsmåden burde være til at forstå.

Første funktion (ombyt) ombytter bogstaverne i det enkelte ord.
Anden funktion (volapykisering) piller de enkelte ord ud af teksten og sender dem til funktionen ombyt.

Håber det er noget du kan bruge.


funktioen ombyt (tager og returnerer en tekststreng)

<< 0 0 "" "" 0 -> ord a b c d n        * definér variable
  << IF ord SIZE 3 >            * hvis ordets længde > 3 så
    THEN ord SIZE 2 - 'n' STO        * gem længde-2 i 'n' og
      2 n FOR m            * lav n-1 ombytninger
        DO RAND n * FLOOR 2 + 'a' STO    * udfør gem tilfældigt tal * n nedrundet til heltal + 2 i 'a'
            RAND n * FLOOR 2 + 'b' STO    *      gem tilfældigt tal * n nedrundet til heltal + 2 i 'b'
        UNTIL a b <>            * indtil a og b er forskellige (ellers sker der jo ingen ombytning)
        END                * afslut do-until løkke
      ord a a SUB 'c' STO        * hent a'te bogstav fra ord og gem i 'c'
      ord b b SUB 'd' STO        * hent b'te bogstav fra ord og gem i 'd'
      'ord' a d REPL            * erstat a'te bogstav i ord med d (b'te bostav)
      'ord' b c REPL            * erstat b'te bogstav i ord med c (a'te bogstav)
      NEXT                * næste ombytning
    END ord                * afslut if-then og returnér det "ombyttede" ord
  >>                    * afslut lokalt program
>>                    * afslut program


funktionen volapykisering (tager og returnerer en tekststreng)

<< 1 0 "" -> tekst m n ord        * definér variable
  << tekst " " POS 'n' STO        * find første mellemrum i tekst og gem positionen i 'n'
    WHILE n                * sålænge der findes mellemrum (altså n <> 0)
    REPEAT tekst m n 1 - SUB        * udfør hent substreng fra m til n-1 (det ønskede ord),
    ombyt 'ord' STO            *  kald ombytter-programmet og gem resultatet i 'ord',
    'tekst' m ord REPL            *  og erstat det "ombyttede ord" fra m'te position i 'tekst'
    n 1 + 'm' STO            *  og sæt m lig n+1 (startpositionen for det næste ord)
    END tekst                * afslut while-repeat løkke og returnér den nye tekst
  >>                    * afslut lokalt program
>>                    * afslut program
Avatar billede neoscan Nybegynder
08. oktober 2003 - 03:37 #5
Øv, ovenstående så altså pænere ud i notepad... :-) Beklager!
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
Kurser inden for grundlæggende programmering

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