JSFiddle - React, Tailwind, and code Playground
HTML
<canvas width="1450" height="1450" id="canvas"></canvas>
JavaScript
var app = {};
~function(){
function get16bits( data, pointer ){
return ( ( data.charCodeAt( pointer ) || 0 ) << 8 ) + ( data.charCodeAt( pointer + 1 ) || 0 );
}
app.Hash = function( data ){
var len = data.length
, hash = len
, dPointer = 0
, tmp, rem
;
if( len <= 0 || !data ){ return 0; }
rem = len & 3;
len >>= 2;
/* Main loop */
for( ;len > 0; len-- ){
hash += get16bits( data, dPointer );
tmp = ( get16bits( data, dPointer+2 ) << 11 ) ^ hash;
hash = ( hash << 16 ) ^ tmp;
dPointer += 4; // 2*sizeof( uint16_t );
hash += hash >> 11;
}
/* Handle end cases */
switch( rem ){
case 3: hash += get16bits( data, dPointer );
hash ^= hash << 16;
hash ^= ( data.charCodeAt( 2 ) || 0 ) << 18;
hash += hash >> 11;
break;
case 2: hash += get16bits( data, dPointer );
hash ^= hash << 11;
hash += hash >> 17;
break;
case 1: hash += dPointer;
hash ^= hash << 10;
hash += hash >> 1;
break;
}
/* Force "avalanching" of final 127 bits */
hash ^= hash << 3;
hash += hash >> 5;
hash ^= hash << 4;
hash += hash >> 17;
hash ^= hash << 25;
hash += hash >> 6;
return hash;
}
}();
var canvas = document.getElementById( 'canvas' )
, ctx = canvas.getContext( '2d' )
, letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, nLetters = 26
, min = 3
, max = 20
;
ctx.fillStyle = 'RGBA( 0, 0, 0, .004 )';
function addHashes( n ){
for( var i=0; i<n; i++ ){
var word = '';
for( var j=0, len=Math.random() * (max-min) + min; j<len; j++ ){
word += letters[ 0|Math.random() * nLetters ];
}
var hash = app.Hash( word ) % ( 3499 )
, b1 = 0|hash / 59
...