Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,48 +0,0 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
|
||||
procedure Test_Run_Length_Encoding is
|
||||
function Encode (Data : String) return String is
|
||||
begin
|
||||
if Data'Length = 0 then
|
||||
return "";
|
||||
else
|
||||
declare
|
||||
Code : constant Character := Data (Data'First);
|
||||
Index : Integer := Data'First + 1;
|
||||
begin
|
||||
while Index <= Data'Last and then Code = Data (Index) loop
|
||||
Index := Index + 1;
|
||||
end loop;
|
||||
declare
|
||||
Prefix : constant String := Integer'Image (Index - Data'First);
|
||||
begin
|
||||
return Prefix (2..Prefix'Last) & Code & Encode (Data (Index..Data'Last));
|
||||
end;
|
||||
end;
|
||||
end if;
|
||||
end Encode;
|
||||
function Decode (Data : String) return String is
|
||||
begin
|
||||
if Data'Length = 0 then
|
||||
return "";
|
||||
else
|
||||
declare
|
||||
Index : Integer := Data'First;
|
||||
Count : Natural := 0;
|
||||
begin
|
||||
while Index < Data'Last and then Data (Index) in '0'..'9' loop
|
||||
Count := Count * 10 + Character'Pos (Data (Index)) - Character'Pos ('0');
|
||||
Index := Index + 1;
|
||||
end loop;
|
||||
if Index > Data'First then
|
||||
return Count * Data (Index) & Decode (Data (Index + 1..Data'Last));
|
||||
else
|
||||
return Data;
|
||||
end if;
|
||||
end;
|
||||
end if;
|
||||
end Decode;
|
||||
begin
|
||||
Put_Line (Encode ("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"));
|
||||
Put_Line (Decode ("12W1B12W3B24W1B14W"));
|
||||
end Test_Run_Length_Encoding;
|
||||
|
|
@ -5,7 +5,7 @@ runlengthEncode: function [s][
|
|||
|
||||
runlengthDecode: function [s][
|
||||
result: new ""
|
||||
loop (chunk split s 'x -> positive? size match x {/\d+/}) [a,b] ->
|
||||
loop (chunk split s 'x -> match? x {/\d+/}) [a,b] ->
|
||||
'result ++ repeat first b to :integer join to [:string] a
|
||||
return result
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,124 +0,0 @@
|
|||
>>SOURCE FREE
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. run-length-encoding.
|
||||
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
REPOSITORY.
|
||||
FUNCTION encode
|
||||
FUNCTION decode
|
||||
.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 input-str PIC A(100).
|
||||
01 encoded PIC X(200).
|
||||
01 decoded PIC X(200).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
ACCEPT input-str
|
||||
MOVE encode(FUNCTION TRIM(input-str)) TO encoded
|
||||
DISPLAY "Encoded: " FUNCTION TRIM(encoded)
|
||||
DISPLAY "Decoded: " FUNCTION TRIM(decode(encoded))
|
||||
.
|
||||
END PROGRAM run-length-encoding.
|
||||
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
FUNCTION-ID. encode.
|
||||
|
||||
DATA DIVISION.
|
||||
LOCAL-STORAGE SECTION.
|
||||
01 str-len PIC 9(3) COMP.
|
||||
|
||||
01 i PIC 9(3) COMP.
|
||||
|
||||
01 current-char PIC A.
|
||||
|
||||
01 num-chars PIC 9(3) COMP.
|
||||
01 num-chars-disp PIC Z(3).
|
||||
|
||||
01 encoded-pos PIC 9(3) COMP VALUE 1.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 str PIC X ANY LENGTH.
|
||||
|
||||
01 encoded PIC X(200).
|
||||
|
||||
PROCEDURE DIVISION USING str RETURNING encoded.
|
||||
MOVE FUNCTION LENGTH(str) TO str-len
|
||||
MOVE str (1:1) TO current-char
|
||||
MOVE 1 TO num-chars
|
||||
PERFORM VARYING i FROM 2 BY 1 UNTIL i > str-len
|
||||
IF str (i:1) <> current-char
|
||||
CALL "add-num-chars" USING encoded, encoded-pos,
|
||||
CONTENT current-char, num-chars
|
||||
|
||||
MOVE str (i:1) TO current-char
|
||||
MOVE 1 TO num-chars
|
||||
ELSE
|
||||
ADD 1 TO num-chars
|
||||
END-IF
|
||||
END-PERFORM
|
||||
|
||||
CALL "add-num-chars" USING encoded, encoded-pos, CONTENT current-char,
|
||||
num-chars
|
||||
.
|
||||
END FUNCTION encode.
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. add-num-chars.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 num-chars-disp PIC Z(3).
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 str PIC X(200).
|
||||
|
||||
01 current-pos PIC 9(3) COMP.
|
||||
|
||||
01 char-to-encode PIC X.
|
||||
|
||||
01 num-chars PIC 9(3) COMP.
|
||||
|
||||
PROCEDURE DIVISION USING str, current-pos, char-to-encode, num-chars.
|
||||
MOVE num-chars TO num-chars-disp
|
||||
MOVE FUNCTION TRIM(num-chars-disp) TO str (current-pos:3)
|
||||
ADD FUNCTION LENGTH(FUNCTION TRIM(num-chars-disp)) TO current-pos
|
||||
MOVE char-to-encode TO str (current-pos:1)
|
||||
ADD 1 TO current-pos
|
||||
.
|
||||
END PROGRAM add-num-chars.
|
||||
|
||||
|
||||
IDENTIFICATION DIVISION.
|
||||
FUNCTION-ID. decode.
|
||||
|
||||
DATA DIVISION.
|
||||
LOCAL-STORAGE SECTION.
|
||||
01 encoded-pos PIC 9(3) COMP VALUE 1.
|
||||
01 decoded-pos PIC 9(3) COMP VALUE 1.
|
||||
|
||||
01 num-of-char PIC 9(3) COMP VALUE 0.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 encoded PIC X(200).
|
||||
|
||||
01 decoded PIC X(100).
|
||||
|
||||
PROCEDURE DIVISION USING encoded RETURNING decoded.
|
||||
PERFORM VARYING encoded-pos FROM 1 BY 1
|
||||
UNTIL encoded (encoded-pos:2) = SPACES OR encoded-pos > 200
|
||||
IF encoded (encoded-pos:1) IS NUMERIC
|
||||
COMPUTE num-of-char = num-of-char * 10
|
||||
+ FUNCTION NUMVAL(encoded (encoded-pos:1))
|
||||
ELSE
|
||||
PERFORM UNTIL num-of-char = 0
|
||||
MOVE encoded (encoded-pos:1) TO decoded (decoded-pos:1)
|
||||
ADD 1 TO decoded-pos
|
||||
SUBTRACT 1 FROM num-of-char
|
||||
END-PERFORM
|
||||
END-IF
|
||||
END-PERFORM
|
||||
.
|
||||
END FUNCTION decode.
|
||||
|
|
@ -3,7 +3,7 @@ import system'routines;
|
|||
import extensions;
|
||||
import extensions'text;
|
||||
|
||||
singleton compressor
|
||||
singleton Compressor
|
||||
{
|
||||
string compress(string s)
|
||||
{
|
||||
|
|
@ -54,13 +54,13 @@ singleton compressor
|
|||
}
|
||||
}
|
||||
|
||||
public program()
|
||||
public Program()
|
||||
{
|
||||
var s := "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW";
|
||||
|
||||
s := compressor.compress(s);
|
||||
console.printLine(s);
|
||||
s := Compressor.compress(s);
|
||||
Console.printLine(s);
|
||||
|
||||
s := compressor.decompress(s);
|
||||
console.printLine(s)
|
||||
s := Compressor.decompress(s);
|
||||
Console.printLine(s)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
(defun run-length-encode (str)
|
||||
(let (output)
|
||||
(with-temp-buffer
|
||||
(insert str)
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(let* ((char (char-after (point)))
|
||||
(count (skip-chars-forward (string char))))
|
||||
(push (format "%d%c" count char) output))))
|
||||
(mapconcat #'identity (nreverse output) "")))
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
(require 'seq)
|
||||
|
||||
(defun run-length-encode (str)
|
||||
(let ((grouped (mapcar #'cdr (seq-group-by #'identity (string-to-list str)))))
|
||||
(apply #'concat (mapcar (lambda (items)
|
||||
(format "%d%c" (length items) (car items)))
|
||||
grouped))))
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
include misc.e
|
||||
|
||||
function encode(sequence s)
|
||||
sequence out
|
||||
integer prev_char,count
|
||||
if length(s) = 0 then
|
||||
return {}
|
||||
end if
|
||||
out = {}
|
||||
prev_char = s[1]
|
||||
count = 1
|
||||
for i = 2 to length(s) do
|
||||
if s[i] != prev_char then
|
||||
out &= {count,prev_char}
|
||||
prev_char = s[i]
|
||||
count = 1
|
||||
else
|
||||
count += 1
|
||||
end if
|
||||
end for
|
||||
out &= {count,prev_char}
|
||||
return out
|
||||
end function
|
||||
|
||||
function decode(sequence s)
|
||||
sequence out
|
||||
out = {}
|
||||
for i = 1 to length(s) by 2 do
|
||||
out &= repeat(s[i+1],s[i])
|
||||
end for
|
||||
return out
|
||||
end function
|
||||
|
||||
sequence s
|
||||
s = encode("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW")
|
||||
pretty_print(1,s,{3})
|
||||
puts(1,'\n')
|
||||
puts(1,decode(s))
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
function Compress-RLE ($s) {
|
||||
$re = [regex] '(.)\1*'
|
||||
$ret = ""
|
||||
foreach ($m in $re.Matches($s)) {
|
||||
$ret += $m.Length
|
||||
$ret += $m.Value[0]
|
||||
}
|
||||
return $ret
|
||||
}
|
||||
|
||||
function Expand-RLE ($s) {
|
||||
$re = [regex] '(\d+)(.)'
|
||||
$ret = ""
|
||||
foreach ($m in $re.Matches($s)) {
|
||||
$ret += [string] $m.Groups[2] * [int] [string] $m.Groups[1]
|
||||
}
|
||||
return $ret
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue