Epic Random String Maker 9001

by SpYk3

HTML

<p>
	<label for="runTimes">Run Times: </label>
	<input value="10000" id="runTimes" type="number"  />
</p>
<sub>NOTE: When Run 1mill Times, found 0 dups and took 43s on norm, and 14 dups in 46s on set len 10</sub>
<table id="tbl1">
	<thead>
		<tr>
			<th>
				String Len
			</th>
			<th>
				String
			</th>
		</tr>
	</thead>
	<tbody></tbody>
	<tfoot></tfoot>
</table>
<hr />
<table id="tbl2">
	<thead>
		<tr>
			<th>
				String Len
			</th>
			<th>
				String
			</th>
		</tr>
	</thead>
	<tbody></tbody>
	<tfoot></tfoot>
</table>
<a href="http://jsperf.com/js-random-string-test/8" target="_blank">.</a>

CSS

input { text-align: center; width: 6em; }
table { border-collapse: collapse; }
tr td:first-child { text-align: center; }
th, td { border: 1px solid; }

JavaScript

function doWork() {
	var arr1 = [], arr2 = [],
		runTimes = Math.round(parseFloat($('input').val())),
		test = function(c){for(var a=(Math.random()*eval("1e"+~~(50*Math.random()+50))).toString(36).split(""),b=3;b<a.length;b++)b==~~(Math.random()*b)+1&&a[b].match(/[a-z]/)&&(a[b]=a[b].toUpperCase());a=a.join("");a=a.substr(~~(Math.random()*~~(a.length/3)),~~(Math.random()*(a.length-~~(a.length/3*2)+1))+~~(a.length/3*2));return c?a.substr(a,c):a},
		f1, f2, s1, s2;
	s1= +new Date();
	for(var i=0;i<runTimes ;i++) arr1.push(test());
	f1= +new Date();
	s2= +new Date();
	for(var i=0;i<runTimes ;i++) arr2.push(test(10));
	f2= +new Date();

	/*	check for duplicates	*/
	var sorted_arr1 = arr1.concat().sort(), results1 = [];
	for (var i = 0; i < arr1.length - 1; i++) {
		if (sorted_arr1[i + 1] == sorted_arr1[i]) {
			results.push(sorted_arr1[i]);
		}
	}

	var sorted_arr2 = arr2.concat().sort(), results2 = [];
	for (var i = 0; i < arr2.length - 1; i++) {
		if (sorted_arr2[i + 1] == sorted_arr2[i]) {
			results2.push(sorted_arr2[i]);
		}
	}

	$('tbody, tfoot').empty();

	for(var i=0;i<arr1.length&&i<10;i++) {
		$('#tbl1 tbody').append(
			$('<tr />').append(
				$('<td />', { text: arr1[i].length }),
				$('<td />', { text: arr1[i] })
			)
		);
	}
	$('#tbl1 tfoot').append(
		$('<tr />').append(
			$('<th />', { colspan: 2, text: "Out of "+runTimes+" there were "+results1.length+" duplicates!" })
		),
		$('<tr />').append(
			$('<th />', { text: "Time(secs)" }),
			$('<td />', { text: (f1-s1)/1000 })
		)
	);
	for(var i=0;i<arr2.length&&i<10;i++) {
		$('#tbl2 tbody').append(
			$('<tr />').append(
				$('<td />', { text: arr2[i].length }),
				$('<td />', { text: arr2[i] })
			)
		);
	}
	$('#tbl2 tfoot').append(
		$('<tr />').append(
			$('<th />', { colspan: 2, text: "Out of "+runTimes+" there were "+results2.length+" duplicates!" })
		),
		$('<tr />').append(
			$('<th />', { text: "Time(secs)" }),
			$('<td />', { text: (f2-s2)/1000 })
		)
	);
}

$(document).on('blur...