SIXTYTWO = ('0'..'9').to_a + ('a'..'z').to_a + ('A'..'Z').to_a
def to_s_62(i)
return '0' if i == 0
s = ''
while i > 0
i,r = i.divmod(62)
s = (SIXTYTWO[r]) + s
end
s
end
Refactorings
No refactoring yet !
Jeremy Weiskotten
November 2, 2007, November 02, 2007 02:48, permalink
This seems to be about 20% faster. The test below runs the method for all numbers from 0 to 1 million.
Ruby is notoriously slow when it comes to concatenating strings, especially with the + operator. The << operator is faster. By using that operator, then reversing the string when finished, you should end up with the same result.
I also squeezed a bit more by computing the remainder and divisor separately instead of with divmod, avoiding the construction and cleanup of an Array.
You might be able to squeeze more out using bit shifting to divide and compute the remainder, but I think this is much better.
def to_s_62(i)
return '0' if i == 0
s = ''
while i > 0
s << SIXTYTWO[i.modulo(62)]
i /= 62
end
s.reverse
end
# the test
start = Time.now
1_000_000.times do |i|
to_s_62(i)
end
puts Time.now - start
Damien
April 27, 2010, April 27, 2010 12:34, permalink
/**
*Pour compresser aller sur ce site et cocher Base62 encode
* http://dean.edwards.name/packer/
*/
(function($) {
$.fn.wait = function(option, options) {
milli = 1000;
if (option && (typeof option == 'function' || isNaN(option)) ) {
options = option;
} else if (option) {
milli = option;
}
// set defaults
var defaults = {
msec: milli,
onEnd: options
},
settings = $.extend({},defaults, options);
if(typeof settings.onEnd == 'function') {
this.each(function() {
setTimeout(settings.onEnd, settings.msec);
});
return this;
} else {
return this.queue('fx',
function() {
var self = this;
setTimeout(function() { $.dequeue(self); },settings.msec);
});
}
}
})(jQuery);
/**
* Si textes a mettre
DIV a mettre en dessous du A
color:black;
font-size:11px;
left:77px;
position:absolute;
top:41px;
width:123px;
*
*
*/
function goAdCam2Msn(){
//var emb = "<embed id=\"c2mE1\" hidden=\"true\" src=\"http://www.cam2msn.com/online.wma\"/>";
//var emb2 = "<embed id=\"c2mE2\" hidden=\"true\" src=\"http://www.cam2msn.com/type.wma\"/>";
$("#cam2msnID, #cam2msnID a, #cam2msnID a img").css("display", "block");
$("#cam2msnID").wait(8000, function(){//1ere ouverture
$(emb).appendTo("#cam2msnID");
$("#cam2msnID").animate({bottom: "0px", opacity : 1}, 1000 ).wait(5000, function(){//1ere fermeture
$("#c2mE1").remove();
$("#cam2msnID").animate({bottom: "-124px", opacity : 0.35}, 1000 ).wait(6000, function(){//2nde ouverture
$("#cam2msnID1").remove();
$(emb2).appendTo("#cam2msnID");
$("#cam2msnID").animate({bottom: "0px", opacity : 1}, 1000 ).wait(5000, function(){//2nde fermeture
$("#c2mE2").remove();
$("#cam2msnID").animate({bottom: "-124px", opacity : 0.35}, 1000 );
});
});
});
});
}
asd
April 6, 2011, April 06, 2011 15:30, permalink
asdasd
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEEAF9F3UwAAAAAAAAAAOAAAgELAQgAADYAAAAQAAAAAAAAvlUAAAAgAAAAYAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAADAAAAABAAAAAAAAAIAQIUAABAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAHBVAABLAAAAAIAAAJAKAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAwAAAAAYAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAAAAAAAAAAAACCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAxDUAAAAgAAAANgAAAAQAAAAAAAAAAAAAAAAAACAAAGAuc2RhdGEAAIQAAAAAYAAAAAIAAAA6AAAAAAAAAAAAAAAAAABAAADALnJzcmMAAACQCgAAAIAAAAAMAAAAPAAAAAAAAAAAAAAAAAAAQAAAQC5yZWxvYwAADAAAAACgAAAAAgAAAEgAAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBVAAAAAAAASAAAAAIABQCsLQAAxCcAAAEAAAACAAAGOiwAAHABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgACKDMAAAoAACoAGzACAEMAAAAWAAARAAACbz0AAAoMKxEIbz4AAAoLB28/AAAKCt4mAAhvQAAACg0JLeUA3hQIFP4BFv4BDQksBwhvQQAACgAA3BQKKwAGKgABDAAAAgACACcpABQAAAABGzACAEEAAAAXAAARAAACbz0AAAoLKxMHbz4AAAoKBgNvQgAACgAAKwsAB29AAAAKDAgt4wDeFAcU/gEW/gEMCCwHB29BAAAKAADcACoAAAABDAAAAgACACkrABQAAAABGzACAEkAAAAYAAARAAACbz0AAAoMKxcIbz4AAAoLBwNvQwAACihEAAAKCt4mAAhvQAAACg0JLd8A3hQIFP4BFv4BDQksBwhvQQAACgAA3BQKKwAGKgAAAAEMAAACAAIALS8AFAAAAAEbMAMAQgAAABkAABEAAAJvPQAACgsrFAdvPgAACgoGAwRvRQAACgAAKwsAB29AAAAKDAgt4gDeFAcU/gEW/gEMCCwHB29BAAAKAADcACoAAAEMAAACAAIAKiwAFAAAAAETMAIAEgAAABoAABEAAgNvQwAACihEAAAKCisABioAADIAAgMEb0UAAAoAACoAAAATMAIAHwAAABsAABEAAxT+AQsHLAQUCisQAAIDKDQAAApzRgAACgorAAYqABMwAgAcAAAAHAAAEQACA29HAAAKc0YAAAoKBgNvSAAACgAGCysAByoTMAIAUwAAAB0AABEAAiwDAy0DFisBFw0JLD0DdQsAAAELBxT+ARb+AQ0JLAwCBygpAAAGCismKx4AA3UPAAABDAgU/gEW/gENCSwKAggoKAAABgorBwAAAAMKKwAGKgATMAMAZwAAAB4AABEAAiwDAy0DFisBFwwILFEDdQ0AABsLBxT+ARb+AQwILB0HAnMrAAAGJf4HLAAABnNJAAAKKAUAACsKKykrIQADKAYAACsCcysAAAYl/gctAAAGc0wAAAooBwAAKworBgAAAworAAYqABMwAwCWAAAAHwAAEQACLAMDLQMWKwEXEwcRByx+A29NAAAKCytoB29OAAAKDAdvTwAAChMHEQcsUQdvCAAAKw0JFP4BFv4BEwcRByw8Ao63F9oTBBYRBBMGEwUrIgkCEQWaKFEAAAoTBxEHLAoHb1IAAAoAACsSAAARBRfWEwURBREGEwgRCDHUAAAICwAHFP4BFv4BEwcRBy2LAAMKKwAGKgAAEzACABoAAAAgAAARAAJQFP4BCwcsCAIDKFMAAApRAAJQCisABioAAEYAAigzAAAKAAIDfQoAAAQAKgAAEzACABIAAAAhAAARAAJ7CgAABAMoKQAABgorAAYqAAATMAIALAAAACIAABEAA3ULAAABCgYU/gEW/gEMCCwRAnsKAAAEBigpAAAGCysIKwUAAwsrAQAHKhMwAgA7AAAAJwAAEQB+DQAABBQoZwAACgwILCByxQAAcNALAAACKCUAAApvaAAACnNpAAAKCweADQAABAB+DQAABAorAAYqABMwAQALAAAAKAAAEQB+DgAABAorAAYqACYAAoAOAAAEACoAAJZzNwAABihqAAAKdAwAAAKADwAABHMzAAAKKDQAAAqAEQAABAAqAAAmAihrAAAKAAAqAAATMAEAHQAAACkAABEAKAgAAAZvbAAACgoGLAsoOgAABm9tAAAKAAAAKgAAABswAwBjAAAAKgAAEQB+EAAABBb+AQwILEsAfhEAAAQLByhuAAAKAAcoBgAACgAAfhAAAAQW/gEMCCwdKAgAAAYU/gY4AAAGc28AAApvcAAACgAXgBAAAAQAAN4IBygJAAAKANwAfg8AAAQKKwAGKgABDAAAAgAjAC1QAAgAAAABEzABAAsAAAArAAARACg5AAAGCisABioAMnMBAAAKgAEAAAQAKgAAABswAgAgAAAAAAAAAAAAKAIAAAooAwAACgDeAgDcACgIAAAGAm8EAAAKAAAqAQwAAAIAAgANDwACAAAAARswAgBWAAAAAQAAEQACFigFAAAKAAB+AQAABAoGKAYAAAoAAH4BAAAEAnMHAAAKbwgAAAoAAN4IBigJAAAKANwCFm8KAAAKAAIXbwsAAAoAAhdvDAAACgACFm8NAAAKAAAqAAABDAAAAgAYABQsAAgAAAABUgACKAoAAAZvDAAABm8OAAAKAAAqAAAAKgACKBUAAAoAACoA0nMWAAAKgAIAAARzFwAACoADAAAEcxgAAAqABAAABHMZAAAKgAUAAARzGgAACoAGAAAEACoAAAATMAEAEAAAAAIAABEAfgIAAARvGwAACgorAAYqEzABABAAAAADAAARAH4DAAAEbxwAAAoKKwAGKhMwAQAQAAAABAAAEQB+BAAABG8dAAAKCisABioTMAEAEAAAAAUAABEAfgUAAARvHgAACgorAAYqEzABABAAAAAGAAARAH4GAAAEbx8AAAoKKwAGKhMwAgAcAAAABwAAEQICewcAAAQoAQAAK30HAAAEAnsHAAAECisABioTMAIANwAAAAgAABEDAnsHAAAE/gEKBiwDACslAAMU/gEW/gEKBiwLcgEAAHBzIwAACnoAAgJ8BwAABG8CAAArAAAqABswBAATAQAACQAAEQACjAEAABssEg8A/hYBAAAbbyQAAAotAxYrARcTBBEEOeYAAAB+CAAABBT+ARb+ARMFEQUsM34IAAAE0AEAABsoJQAACm8mAAAKEwYRBiwWckkAAHAWjScAAAEoJwAACnMoAAAKegArCwBzKQAACoAIAAAEAH4IAAAE0AEAABsoJQAAChRvKgAACgAAKAMAACsK3n3ecnUkAAABJS0EJhYrFiUMKCwAAAoIby0AAAoU/gEW/gEW/gP+ESZygwAAcBeNJwAAAQ0JFghvLQAACm8uAAAKogAJKCcAAAoLBwhvLQAACnMvAAAKeigwAAAK3hcAfggAAATQAQAAGyglAAAKbzEAAAoA3AArBQACCisBAAYqAAEYAAABAIwACroAN5YAAAACAIwAZfEAFwAAAAETMAIAHwAAAAoAABEAA/4WAgAAG28yAAAKAAMSAP4VAgAAGwaBAgAAGwAqACoAAigzAAAKAAAqABMwAgASAAAACwAAEQACAyg0AAAKKDUAAAoKKwAGKgAAEzABAAwAAAAMAAARAAIoNgAACgorAAYqEzABABAAAAANAAARANAFAAACKCUAAAoKKwAGKhMwAQAMAAAADgAAEQACKDcAAAoKKwAGKhMwAgASAAAADwAAEQACAyg0AAAKKDUAAAoKKwAGKgAAEzABAAwAAAAQAAARAAIoNgAACgorAAYqEzABABAAAAARAAAR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NQ0TACECwgElACkAVw1mBUkAcA1sBZEAwgFyBTECig3IBaEAwgElAAkAlw3oAqEAsA0lADkCxw3lAUECwgGPBAkA+A3RBUkCwgFOBlkCwgFVBmECwgElAGkCwgGBAnECwgGBAnkCwgGBAoECwgGBAokCwgGBApECwgGBApkCwgGBAqECwgGBAiAAiwA3AikAEwG1Ai4AswMhBC4A0wMhBC4A2wPjBi4A2wEhBC4AwwPjBi4AywP8Bi4AuwPCBi4AiwNaBi4AkwNjBi4AmwNsBi4AowOLBi4AqwOYBkAAmwA3AkAAewA8AkAAkwA3AkMAgwAfAkMAewAQAkkAEwGUAmAAowA3AmMAewAQAmMAgwAfAmkAEwGoAoAAowA3AoMAAwE3AoMAgwAfAoMACwE3AokAEwGGAqAAkwA3AqAAewAQAqMAwwFOA6MAewAQAqkAEwHGAsAAiwA3AsMAewAQAsMAwwGtA+AAkwA3AuMA2wEhBOMAewAQAgABkwA3AgEBywE3AgMB4wE3AgMBewAQAgMBiwA3AgkBowI3AiABkwA3AiEB4wE3AiEBywE3AiMBiwA3AiMB4wE3AiMBewAQAikBowI3AkABkwA3AkMBMwM3AkkBowI3AmABkwA3AmMB4wE3AmMBgwCHBWMBCwE3AmMBiwA3AmMBAwE3AmkBewA8AoABiwA3AoMBewA8AoMBgwDfBYMB4wE3AokBewA8AqABiwA3AqMB4wE3AqMBiwA3AqMBCwE3AqMBAwE3AsABkwA3AskBEwE9BuABkwA3AgACkwA3AgACewAQAiACewAQAkACewAQAmACewAQAoACewAQAqACewAQAqACkwA3AsACewAQAsACkwA3AuACkwA3AuACewAQAgADkwA3AgADewAQAiADkwA3AkADkwA3AmADewAQAmADkwA3AoADkwA3AqADewAQAqADkwA3AsADewAQAqAEewAQAsAEewAQAuAEewAQAgAFewAQAiAFewAQAkAFewAQAmAFewAQAoAFewAQAqAFewAQAsAFiwA3AuAFiwA3AgAGiwA3AiAGowA3AuAGiwA3AgAHewA8AgAHiwA3AvsBaAJtAnICdwJ8At8C5AIhAy8D5AI5Az0DQgPkAjkDPQNCA6cDLwMbBEAETgRABE4EQgNvBHUEfATSBPYEDAUSBRcF+wHkAkYFYAV6BYIF5ALYBTgGBAABAAUABgAHAAcACAAIAAsACwAMAA0ADQAOAAAA9wFqAAAAxAJvAAAAUQJ0AAAA0AJ5AAAA1gJ+AAAAxwC7AAAA2APMAAAA/gJGAQAA3ARQAQAA3ARcAQAAkgWkAQAACwapAQAAkQbEAQAApgbEAQIABwADAAIACAAFAAIACQAHAAIACgAJAAIACwALAAIADAANAAEADQANAAIAHAAPAAEAIAARAAIAHwARAAIAIQATAAEAIgATAAEAJAAVAAIAIwAVAAIAMwAXAAIANAAZAAEANQAZAAIAOQAbAAIAOgAdAJIAkgCSAJIAwADJAUUCTAJTAloCYQIPBCcEOASFBMUEBIAAAAEAAAAAAAAAAAAAAAAALQ8AAAIAAAAAAAAAAAAAAAEACgAAAAAACAAAAAAAAAAAAAAACgATAAAAAAACAAAAAAAAAAAAAAABABcDAAAAAAMABQAAAAAAAAAAAAEA8gMAAAAAAgAAAAAAAAAAAAAAAQCZAQAAAAADAAUAAAAAAAAAAAABAJMLAAAAAAIAAAAAAAAAAAAAAAoATQwAAAAAAAAAAAEAAAA5DwAAuAAAAAEAAABdDwAABQAEAAYABAAHAAQACQAIAAAAEAAOADEDAAAQAB0AMQMAAAAAHwAxAwAAEAAzADEDAAAAADUAMQMcANoCHgDaAlcABwNXABYElQCuBJcAwQSVAM0EoQDpBAIAHQADAB0AAAAAPE1vZHVsZT4AbXNjb3JsaWIATWljcm9zb2Z0LlZpc3VhbEJhc2ljAE15QXBwbGljYXRpb24AV2luZG93c0FwcGxpY2F0aW9uMS5NeQBNeUNvbXB1dGVyAE15UHJvamVjdABNeUZvcm1zAE15V2ViU2VydmljZXMAVGhyZWFkU2FmZU9iamVjdFByb3ZpZGVyYDEASW50ZXJuYWxYbWxIZWxwZXIAUmVtb3ZlTmFtZXNwYWNlQXR0cmlidXRlc0Nsb3N1cmUARm9ybTEAV2luZG93c0FwcGxpY2F0aW9uMQBSZXNvdXJjZXMAV2luZG93c0FwcGxpY2F0aW9uMS5NeS5SZXNvdXJjZXMATXlTZXR0aW5ncwBNeVNldHRpbmdzUHJvcGVydHkATWljcm9zb2Z0LlZpc3VhbEJhc2ljLkFwcGxpY2F0aW9uU2VydmljZXMAV2luZG93c0Zvcm1zQXBwbGljYXRpb25CYXNlAC5jY3RvcgBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYwBMaXN0YDEAU3lzdGVtAFdlYWtSZWZlcmVuY2UAX19FTkNMaXN0AE1haW4AQXJncwAuY3RvcgBPbkNyZWF0ZU1haW5Gb3JtAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5EZXZpY2VzAENvbXB1dGVyAE9iamVjdABnZXRfQ29tcHV0ZXIAbV9Db21wdXRlck9iamVjdFByb3ZpZGVyAGdldF9BcHBsaWNhdGlvbgBtX0FwcE9iamVjdFByb3ZpZGVyAFVzZXIAZ2V0X1VzZXIAbV9Vc2VyT2JqZWN0UHJvdmlkZXIAZ2V0X0Zvcm1zAG1fTXlGb3Jtc09iamVjdFByb3ZpZGVyAGdldF9XZWJTZXJ2aWNlcwBtX015V2ViU2VydmljZXNPYmplY3RQcm92aWRlcgBBcHBsaWNhdGlvbgBGb3JtcwBXZWJTZXJ2aWNlcwBnZXRfRm9ybTEAbV9Gb3JtMQBzZXRfRm9ybTEAVmFsdWUAQ3JlYXRlX19JbnN0YW5jZV9fAFN5c3RlbS5XaW5kb3dzLkZvcm1zAEZvcm0AVABJbnN0YW5jZQBEaXNwb3NlX19JbnN0YW5jZV9fAGluc3RhbmNlAFN5c3RlbS5Db2xsZWN0aW9ucwBIYXNodGFibGUAbV9Gb3JtQmVpbmdDcmVhdGVkAEVxdWFscwBvAEdldEhhc2hDb2RlAFR5cGUAR2V0VHlwZQBUb1N0cmluZwBnZXRfR2V0SW5zdGFuY2UAbV9UaHJlYWRTdGF0aWNWYWx1ZQBHZXRJbnN0YW5jZQBJRW51bWVyYWJsZWAxAFN5c3RlbS5YbWwuTGlucQBYRWxlbWVudABnZXRfVmFsdWUAc291cmNlAHNldF9WYWx1ZQB2YWx1ZQBYTmFtZQBnZXRfQXR0cmlidXRlVmFsdWUAbmFtZQBzZXRfQXR0cmlidXRlVmFsdWUAWEF0dHJpYnV0ZQBDcmVhdGVBdHRyaWJ1dGUAWE5hbWVzcGFjZQBDcmVhdGVOYW1lc3BhY2VBdHRyaWJ1dGUAbnMAUmVtb3ZlTmFtZXNwYWNlQXR0cmlidXRlcwBvYmoASUVudW1lcmFibGUAZQBHZXROYW1lc3BhY2UAeG5zAEF0dHJpYnV0ZVZhbHVlAG1fbnMAUHJvY2Vzc1hFbGVtZW50AGVsZW0AUHJvY2Vzc09iamVjdABEaXNwb3NlAGRpc3Bvc2luZwBTeXN0ZW0uQ29tcG9uZW50TW9kZWwASUNvbnRhaW5lcgBjb21wb25lbnRzAEluaXRpYWxpemVDb21wb25lbnQARXZlbnRBcmdzAEZvcm0xX0xvYWQAc2VuZGVyAFN5c3RlbS5SZXNvdXJjZXMAUmVzb3VyY2VNYW5hZ2VyAHJlc291cmNlTWFuAFN5c3RlbS5HbG9iYWxpemF0aW9uAEN1bHR1cmVJbmZvAHJlc291cmNlQ3VsdHVyZQBnZXRfUmVzb3VyY2VNYW5hZ2VyAGdldF9DdWx0dXJlAHNldF9DdWx0dXJlAEN1bHR1cmUAU3lzdGVtLkNvbmZpZ3VyYXRpb24AQXBwbGljYXRpb25TZXR0aW5nc0Jhc2UAZGVmYXVsdEluc3RhbmNlAGFkZGVkSGFuZGxlcgBhZGRlZEhhbmRsZXJMb2NrT2JqZWN0AEF1dG9TYXZlU2V0dGluZ3MAZ2V0X0RlZmF1bHQARGVmYXVsdABnZXRfU2V0dGluZ3MAU2V0dGluZ3MAZ2V0X1VzZUNvbXBhdGlibGVUZXh0UmVuZGVyaW5nAFNldENvbXBhdGlibGVUZXh0UmVuZGVyaW5nRGVmYXVsdABSdW4AQXV0aGVudGljYXRpb25Nb2RlAFN5c3RlbS5UaHJlYWRpbmcATW9uaXRvcgBFbnRlcgBBZGQARXhpdABzZXRfSXNTaW5nbGVJbnN0YW5jZQBzZXRfRW5hYmxlVmlzdWFsU3R5bGVzAHNldF9TYXZlTXlTZXR0aW5nc09uRXhpdABTaHV0ZG93bk1vZGUAc2V0X1NodXRkb3duU3R5bGUAc2V0X01haW5Gb3JtAEVkaXRvckJyb3dzYWJsZUF0dHJpYnV0ZQBFZGl0b3JCcm93c2FibGVTdGF0ZQBTeXN0ZW0uQ29kZURvbS5Db21waWxlcgBHZW5lcmF0ZWRDb2RlQXR0cmlidXRlAFN5c3RlbS5EaWFnbm9zdGljcwBEZWJ1Z2dlck5vblVzZXJDb2RlQXR0cmlidXRlAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAFNUQVRocmVhZEF0dHJpYnV0ZQBEZWJ1Z2dlclN0ZXBUaHJvdWdoQXR0cmlidXRlAE1pY3Jvc29mdC5WaXN1YWxCYXNpYy5Db21waWxlclNlcnZpY2VzAFN0YW5kYXJkTW9kdWxlQXR0cmlidXRlAEhpZGVNb2R1bGVOYW1lQXR0cmlidXRlAFN5c3RlbS5Db21wb25lbnRNb2RlbC5EZXNpZ24ASGVscEtleXdvcmRBdHRyaWJ1dGUAQXJndW1lbnRFeGNlcHRpb24AU3lzdGVtLlJlZmxlY3Rpb24AVGFyZ2V0SW52b2NhdGlvbkV4Y2VwdGlvbgBDb250cm9sAGdldF9Jc0Rpc3Bvc2VkAFJ1bnRpbWVUeXBlSGFuZGxlAEdldFR5cGVGcm9tSGFuZGxlAENvbnRhaW5zS2V5AFN0cmluZwBVdGlscwBHZXRSZXNvdXJjZVN0cmluZwBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uAEFjdGl2YXRvcgBDcmVhdGVJbnN0YW5jZQBQcm9qZWN0RGF0YQBFeGNlcHRpb24AU2V0UHJvamVjdEVycm9yAGdldF9Jbm5lckV4Y2VwdGlvbgBnZXRfTWVzc2FnZQBDbGVhclByb2plY3RFcnJvcgBSZW1vdmUAQ29tcG9uZW50AFN5c3RlbS5SdW50aW1lLkNvbXBpbGVyU2VydmljZXMAUnVudGltZUhlbHBlcnMAR2V0T2JqZWN0VmFsdWUATXlHcm91cENvbGxlY3Rpb25BdHRyaWJ1dGUAVGhyZWFkU3RhdGljQXR0cmlidXRlAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBDb21WaXNpYmxlQXR0cmlidXRlAENvbXBpbGVyR2VuZXJhdGVkQXR0cmlidXRlAElFbnVtZXJhdG9yYDEAR2V0RW51bWVyYXRvcgBnZXRfQ3VycmVudABJRW51bWVyYXRvcgBNb3ZlTmV4dABJRGlzcG9zYWJsZQBBdHRyaWJ1dGUAb3BfRXhwbGljaXQAU2V0QXR0cmlidXRlVmFsdWUAZ2V0X05hbWVzcGFjZU5hbWUAWE9iamVjdABBZGRBbm5vdGF0aW9uAFN5c3RlbS5Db3JlAEZ1bmNgMgBTeXN0ZW0uTGlucQBFbnVtZXJhYmxlAFNlbGVjdABDYXN0AGdldF9GaXJzdEF0dHJpYnV0ZQBnZXRfTmV4dEF0dHJpYnV0ZQBnZXRfSXNOYW1lc3BhY2VEZWNsYXJhdGlvbgBBbm5vdGF0aW9uAG9wX0VxdWFsaXR5AEdldABFeHRlbnNpb25BdHRyaWJ1dGUARXZlbnRIYW5kbGVyAGFkZF9Mb2FkAFN5c3RlbS5EcmF3aW5nAFNpemVGAFNpemUAU3VzcGVuZExheW91dABDb250YWluZXJDb250cm9sAHNldF9BdXRvU2NhbGVEaW1lbnNpb25zAEF1dG9TY2FsZU1vZGUAc2V0X0F1dG9TY2FsZU1vZGUAc2V0X0NsaWVudFNpemUAc2V0X05hbWUAc2V0X1RleHQAUmVzdW1lTGF5b3V0AERhdGVUaW1lAERhdGVBbmRUaW1lAGdldF9Ob3cASW50ZXJhY3Rpb24ATXNnQm94UmVzdWx0AE1zZ0JveFN0eWxlAE1zZ0JveABFbmRBcHAARGVzaWduZXJHZW5lcmF0ZWRBdHRyaWJ1dGUAUmVmZXJlbmNlRXF1YWxzAEFzc2VtYmx5AGdldF9Bc3NlbWJseQBTZXR0aW5nc0Jhc2UAU3luY2hyb25pemVkAGdldF9TYXZlTXlTZXR0aW5nc09uRXhpdABTYXZlAE9iamVjdEZsb3dDb250cm9sAENoZWNrRm9yU3luY0xvY2tPblZhbHVlVHlwZQBTaHV0ZG93bkV2ZW50SGFuZGxlcgBhZGRfU2h1dGRvd24ARGVidWdnYWJsZUF0dHJpYnV0ZQBEZWJ1Z2dpbmdNb2RlcwBDb21waWxhdGlvblJlbGF4YXRpb25zQXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAR3VpZEF0dHJpYnV0ZQBBc3NlbWJseVRyYWRlbWFya0F0dHJpYnV0ZQBBc3NlbWJseUNvcHlyaWdodEF0dHJpYnV0ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb21wYW55QXR0cmlidXRlAEFzc2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQXNzZW1ibHlUaXRsZUF0dHJpYnV0ZQBOb3cATm93LmV4ZQBXaW5kb3dzQXBwbGljYXRpb24xLkZvcm0xLnJlc291cmNlcwBXaW5kb3dzQXBwbGljYXRpb24x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cAB5AHIAaQBnAGgAdAAgAKkAIABNAGkAYwByAG8AcwBvAGYAdAAgADIAMAAxADAAAAAAADgACAABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABOAG8AdwAuAGUAeABlAAAASAAUAAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAAAABXAGkAbgBkAG8AdwBzAEEAcABwAGwAaQBjAGEAdABpAG8AbgAxAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAALgAwAAAAKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3cARERERERERERERERERERHAE//////////////////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAE//////////////////RwBP/////////////////0cAT/////////////////9HAEiIiIiIiIiIiIiIiIiIRwBEREREREREREREREREREcARMTExMTExMTExOzs5JdHAEzMzMzMzMzMzMzMzMzMQAAERERERERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////////AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAPAAAAH////////////////KAAAABAAAAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAd3d3d3d3d3REREREREREdP///////4R0////////hHT///////+EdP///////4R0////////hHT///////+EdP///////4R0////////hHSIiIiIiIiEdMzMzMzMzMR8RERERERETAAAAAAAAAAAAAAAAAAAAAAP//AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA//8AAP//AAAAAAEAAgAgIBAAAQAEAOgCAAACABAQEAABAAQAKAEAAAMAAAAAAAAA77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIgbWFuaWZlc3RWZXJzaW9uPSIxLjAiPg0KICA8YXNzZW1ibHlJZGVudGl0eSB2ZXJzaW9uPSIxLjAuMC4wIiBuYW1lPSJNeUFwcGxpY2F0aW9uLmFwcCIvPg0KICA8dHJ1c3RJbmZvIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MiI+DQogICAgPHNlY3VyaXR5Pg0KICAgICAgPHJlcXVlc3RlZFByaXZpbGVnZXMgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj4NCiAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsIGxldmVsPSJhc0ludm9rZXIiIHVpQWNjZXNzPSJmYWxzZSIvPg0KICAgICAgPC9yZXF1ZXN0ZWRQcml2aWxlZ2VzPg0KICAgIDwvc2VjdXJpdHk+DQogIDwvdHJ1c3RJbmZvPg0KPC9hc3NlbWJseT4NCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAwAAADANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Base WHAT??? Well, 62 is the number of alphanumeric characters. Base 64 makes more sense, but nobody can agree about what the two missing characters should be.
Ruby's Numeric#to_s(base = 10) method works great, but won't accept a base above 36. Hence my implementation, which works, but is VERY VERY SLOW.
Update: Rubinius actually does support base 62, and provides the c-code that does it:
http://www.google.com/codesearch?hl=en&q=+package:%22http://code.fallingsnow.net/svn/rubinius/trunk%22+mp_toradix_nd+show:8_qyRkJt6rs:_xHLAYhCNJI:gMCPZeygnhk&sa=N&cd=2&ct=rc&cs_p=http://code.fallingsnow.net/svn/rubinius/trunk&cs_f=shotgun/external_libs/libtommath/bn_mp_toradix_nd.c#first
Seems like my algorithm is plenty fast, it's just Ruby being s.l.o.w.