Run-length encoding: Difference between revisions
Content added Content deleted
(added Clojure version) |
(add JavaScript) |
||
Line 656: | Line 656: | ||
} |
} |
||
--> |
--> |
||
=={{header|JavaScript}}== |
|||
Here's an encoding method that walks the input string character by character |
|||
<lang javascript>function encode(input) { |
|||
var encoding = []; |
|||
var prev, count, i; |
|||
for (count = 1, prev = input[0], i = 1; i < input.length; i++) { |
|||
if (input[i] != prev) { |
|||
encoding.push([count, prev]); |
|||
count = 1; |
|||
prev = input[i]; |
|||
} |
|||
else |
|||
count ++; |
|||
} |
|||
encoding.push([count, prev]); |
|||
return encoding; |
|||
}</lang> |
|||
Here's an encoding method that uses a regular expression to grab the character runs ({{works with|Mozilla JavaScript|1.6}} for the <code>forEach</code> method) |
|||
<lang javascript>function encode_re(input) { |
|||
var encoding = []; |
|||
input.match(/(.)\1*/g).forEach(function(substr){ encoding.push([substr.length, substr[0]]) }); |
|||
return encoding; |
|||
}</lang> |
|||
And to decode (see [[Repeating a string#JavaScript|Repeating a string]]) |
|||
<lang javascript>function decode(encoded) { |
|||
var output = ""; |
|||
encoded.forEach(function(pair){ output += new Array(1+pair[0]).join(pair[1]) }) |
|||
return output; |
|||
}</lang> |
|||
=={{header|Mathematica}}== |
=={{header|Mathematica}}== |