Home > Enterprise >  How to randomize letters in R tool
How to randomize letters in R tool

Time:02-07

I am trying to make a word unscrambler in R. So i have put some words in a collection and tried to use strsplit() to split the letters of each word in the collection.

But I don't understand how to jumble the letters of a word and merge them to one word in R Tool. Does anyone know how can I solve this?

This is what I have done enter image description here

CodePudding user response:

Once you've split the words, you can use sample() to rescramble the letters, and then paste0() with collapse="", to concatenate back into a 'word'

lapply(words, function(x) paste0(sample(strsplit(x, split="")[[1]]), collapse=""))

CodePudding user response:

You can use the sample function for this. here is an example of doing it for a single word. You can use this within your for-loop:

yourword <- "hello"

# split: Split will return a list with one char vector in it.
# We only want to interact with the vector not the list, so we extract the first
# (and only) element with "[[1]]"
jumble <- strsplit(yourword,"")[[1]]
jumble <- sample(jumble, # sample random element from jumble
                 size =  length(jumble), # as many times as the length of jumble
                 # ergo all Letters
                 replace = FALSE # do not sample an element multiple times
                 )
restored <- paste0(jumble,
                   collapse = "" # bas
                   )

As the answer from langtang suggests, you can use the apply family for this, which is more efficient. But maybe this answer helps the understanding of what R is actually doing here.

CodePudding user response:

Here's a one-liner:

lapply(lapply(strsplit(strings, ""), sample), paste0, collapse = "")
[[1]]
[1] "elfi"

[[2]]
[1] "vleo"

[[3]]
[1] "rmsyyet"

Use unlistto get rid of the list:

unlist(lapply(lapply(strsplit(strings, ""), sample), paste0, collapse = ""))

Data:

strings <- c("life", "love", "mystery")

CodePudding user response:

You can use the stringi package if you want:

> stringi::stri_rand_shuffle(c("hello", "goodbye"))
[1] "oellh"   "deoygob"
  •  Tags:  
  • Related