Mixing a string
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

Mixing a string

Started by bastya_elvtars, 03 January, 2005, 09:20:38

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

bastya_elvtars

It randomises the chars in a string. Enjoy! :D


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.

chill

#1
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

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

SMF spam blocked by CleanTalk