मैं फ़ायरफ़ॉक्स काम नहीं है, तो मैं इसे बाहर की कोशिश नहीं कर सकते, लेकिन एक सामान्य स्ट्रिंग से निपटने के नजरिए से यह है कि आपने कुछ कमरा है लग रहा है सुधार करने के लिए। आप जो कर रहे हैं, हर बाइट के लिए, एक नया स्ट्रिंग एक वर्ण बना रहा है जो आपके पिछले एक से अधिक लंबा है। यह एक ओ (एन^2) ऑपरेशन है। कुछ तरीकों का उपयोग एन कटौती करने ताकि आपके एल्गोरिथ्म के पास रेखीय समय में चलता है:
लंबाई 57 को तार (यह एक 76-चार Base64 परिणाम निकलेगा) बनाएँ, तो एक btoa
पर प्रदर्शन यह परिणामस्वरूप स्ट्रिंग को अपने आउटपुट
बस # 1 की तरह ही, केवल लाइनों की एक सरणी बनाएं और अंतिम आउटपुट स्ट्रिंग बनाने के लिए join
पर कॉल करें।
1-वर्ण तारों की एक सरणी बनाने के लिए map
का उपयोग करें, फिर उस पर join
पर कॉल करें।
यहाँ प्रत्येक विधि के लिए कुछ अपरीक्षित कोड है:
function encode(data)
{
var output = "";
var str = "";
for (var i = 0; i < data.length; i++)
{
str += String.fromCharCode(data[i]);
// the "&& i != data.length - 1" clause
// keeps the extra \n off the end of the output
// when the last line is exactly 76 characters
if (str.length == 57 && i != data.length - 1)
{
output += btoa(str) + "\n";
str = "";
}
}
return output + btoa(str);
}
function encode(data)
{
var output = [];
var str = "";
for (var i = 0; i < data.length; i++)
{
str += String.fromCharCode(data[i]);
if (str.length == 57)
{
output[output.length] = btoa(str);
str = "";
}
}
if (str != "")
output[output.length] = btoa(str);
return output.join("\n");
}
function encode(data)
{
var str = data.map(function (d) { return String.fromCharCode(d) }).join("");
return btoa(str).replace(/.{76}(?=.)/g,'$&\n');
}
और यहाँ पिछले एक, न्यूनतम किया गया (116 वर्ण) है:
function e(b){return btoa(b.map(function(d){return
String.fromCharCode(d)}).join("")).replace(/.{76}(?=.)/g,'$&\n')}
क्या ब्राउज़र (ओं) में तेजी से चलाता है? जहां तक मुझे पता है, 'btoa' केवल गीको और वेबकिट ब्राउज़र द्वारा समर्थित है। – Gabe
ऐसा होने पर, यह फ़ायरफ़ॉक्स एक्सटेंशन का एक बहुत छोटा टुकड़ा है, लेकिन अगर आपके पास कुछ अन्य ब्राउज़र के जेएस का उपयोग करने के लिए एक चालाक तरीका है तो मुझे यह भी देखकर खुशी होगी। – zwol
अहम ... http://codegolf.stackexchange.com/ – jessegavin