Word Scrambler in python

Question:

I am trying to find every possible combination of a word.

def calculateScrambledWords(word):
   # In the case of a "cat"
   # While there is not 6 items in array
   # iterate through cat wapping letters each time
   # cat, act, atc - now the loop for the first loop 
   # Loop from atc 3 more times to get cta
   # Think of it as passes in a bubble sort
   # tac, tca, cta
   wordCombinations = []
   wordCombinations.append(word)
   wordIterations = factorial(len(word))
   scrambled = False
   wordArr = createWordArray(word)
   for x in range(wordIterations): 
       for x in range(1,len(word)):
           temp = wordArr[x-1]
           wordArr[x-1] = wordArr[x]
           wordArr[x] = temp
           wordstr = createString(wordArr)
           if wordstr not in wordCombinations:
               wordCombinations.append(wordstr)
   return wordCombinations

       



def createWordArray(word):
   arr = []
   for letter in word:
       arr.append(letter)
   return arr

def createString(arr):
   string = ""
   for letter in arr:
       string = f"{string}{letter}"
   return string

def factorial(number):
   if number == 1:
       return 1
   else:
       return (number* factorial(number-1))

print(calculateScrambledWords("toby"))

This solution works for a 3 letter word but when you increase the number of letters it stops working, if anyone has any ideas let me know!

Asked By: Adam O'Neill

||

Answers:

You can use the itertools

from itertools import permutations

def find_permutations(s):
  return set(["".join(p) for p in permutations(s)])
Answered By: James King

Using the concept of backtracking:-

Code:-

#By backtracking
res=set()
def backtrack(word, index, length): 
    if index==length: 
        res.add(''.join(word))
    else: 
        for j in range(index,length): 
            word[index], word[j] = word[j], word[index] 
            backtrack(word, index+1, length) 
            word[index], word[j] = word[j], word[index]  
  
word = input("Enter the word: ")
word_in_list = list(word) 
backtrack(word_in_list, 0, len(word))
print(res)

Output:-

Enter the word: cat
{'tca', 'cat', 'atc', 'cta', 'act', 'tac'}

Enter the word: boo
{'oob', 'obo', 'boo'}
Answered By: Yash Mehta
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.