Randomly rearrange letters in a word

Viewed 119

Using this SO question / answer as a starting point: Splitting a single word into an array of the consituent letters

I have this simple bit of code to take a word and split the word into single letters:

<%
Dim word1, i
word1 = "particle"
For i = 1 To Len(word1)
    Response.Write "<p>" & Mid(word1, i, 1) & "</p>"
Next
%>

I would like to know how to take a word (variable length, rather than a word that is 8 characters long as in the example above), and randomly rearrange the letters of the word - so that e.g. particle could be e.g.:

alpreict
lircpaet
ctelaipr
teapclir
raeitclp

This is an example of what I'd like to achieve: https://onlinerandomtools.com/shuffle-letters

However, I realise that is easier said than done.

I wondered if anyone has any advice about how it might be possible to achieve this using Classic ASP please?

Thanks

1 Answers

Here's one way to do it:

Function ShuffleText(p_sText)
    Dim iLength
    Dim iIndex
    Dim iCounter
    Dim sLetter
    Dim sText
    Dim sShuffledText
    
    ' Copy text passed as parameter
    sText = p_sText
    
    ' Get text length
    iLength = Len(sText)
    
    For iCounter = iLength To 1 Step -1
        
        ' Get random index
        iIndex = 1 + Int(Rnd * (iCounter))
        
        ' Get character at that index
        sLetter = Mid(sText, iIndex, 1)
        
        ' Remove character from string
        sText = Left(sText, iIndex - 1) & Mid(sText, iIndex + 1)
        
        ' Add character to shuffled string
        sShuffledText = sShuffledText & sLetter
            
    Next

    ' Return shuffled text
    ShuffleText = sShuffledText
    
End Function

This code selects a random character in the string, removes it and adds it to a shuffled string. It repeats this process until it has gone through all characters.

There are probably more efficient ways to do this by randomizing an array of numbers first and using those numbers as iIndex, without manipulating the sText string.

Related