Search code examples
vbscriptasp-classic

Randomly rearrange letters in a word


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


Solution

  • 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.