Author Topic: Mixing a string  (Read 1307 times)

0 Members and 1 Guest are viewing this topic.

Offline bastya_elvtars

  • Forum God
  • ****
  • Posts: 3 725
  • Karma: +173/-7
  • The rock n' roll doctor
    • The FreshStuff3 Site
Mixing a string
« on: 03 January, 2005, 09:20:38 »
It randomises the chars in a string. Enjoy! :D


Code: [Select]
function mix(string)
local arr={} -- creates an array
local msg="" -- creates an empty strin
-- for a=1,strlen(string) do -- inserts every element of the string into the array
-- tinsert (arr,(strsub(string,a,a)))
-- end
gsub(string,"(.)",function (lett) -- it grabs every character of the string...
tinsert (%arr, lett) -- and inserts into the table
end)
repeat -- starts a loop
local n = random(getn(arr)) -- creates a random number between 1 and the array size
msg=msg..arr[n] -- merges the letter with the number in the array
tremove(arr,n) -- removes that letter from the array
until getn (arr)==0 -- loop stops when array is empty
return msg
end
Everything could have been anything else and it would have just as much meaning.

PtokaX forum

Mixing a string
« on: 03 January, 2005, 09:20:38 »

Offline chill

  • Triple Ace
  • **
  • Posts: 182
  • Karma: +1/-0
(No subject)
« Reply #1 on: 05 January, 2005, 20:18:06 »
I like this code from rabid-wombat better,
in the end it is faster, cause when you have large strings,
table.remove will reindex  all other elements, and this will
take up some time when you for exsample, remove the
first entrie.
but I once made some tests with gfind and strsub,
depending on what you need, strsub can be faster,
since gfind gsub do the same,  they just come in handier

Code: [Select]
function JumbleString(str)
local tStr = { n = 0; };
local newString = "";

for char in string.gfind(str, "(.)") do
table.insert(tStr, char)
end

math.randomseed(os.clock());

-- Fisher-Yates shuffle
for n = table.getn(tStr), 1, -1 do
local pos = math.random(n);
newString = tStr[pos].." "..newString;
tStr[pos] = tStr[n];
end

return newString;
end

I wonder why Rabid never posted this....
« Last Edit: 05 January, 2005, 20:19:20 by chill »

PtokaX forum

(No subject)
« Reply #1 on: 05 January, 2005, 20:18:06 »