tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
72
Task/Run-length-encoding/ALGOL-68/run-length-encoding.alg
Normal file
72
Task/Run-length-encoding/ALGOL-68/run-length-encoding.alg
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
STRING input := "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW";
|
||||
STRING output := "12W1B12W3B24W1B14W";
|
||||
|
||||
MODE YIELDCHAR = PROC(CHAR)VOID;
|
||||
MODE GENCHAR = PROC(YIELDCHAR)VOID;
|
||||
|
||||
PROC gen char string = (REF STRING s, YIELDCHAR yield)VOID:
|
||||
FOR i FROM LWB s TO UPB s DO yield(s[i]) OD;
|
||||
|
||||
CO
|
||||
# Note: The following 2 lines use currying. This not supported by ELLA ALGOL 68RS #
|
||||
GENCHAR input seq = gen char string(input,),
|
||||
output seq = gen char string(output,);
|
||||
END CO
|
||||
|
||||
GENCHAR
|
||||
input seq = (YIELDCHAR yield)VOID: gen char string(input, yield),
|
||||
output seq = (YIELDCHAR yield)VOID: gen char string(output, yield);
|
||||
|
||||
PROC gen encode = (GENCHAR gen char, YIELDCHAR yield)VOID: (
|
||||
INT count := 0;
|
||||
CHAR prev;
|
||||
# FOR CHAR c IN # gen char( # ) DO ( #
|
||||
## (CHAR c)VOID: (
|
||||
IF count = 0 THEN
|
||||
count := 1;
|
||||
prev := c
|
||||
ELIF c NE prev THEN
|
||||
STRING str count := whole(count,0);
|
||||
gen char string(str count, yield); count := 1;
|
||||
yield(prev); prev := c
|
||||
ELSE
|
||||
count +:=1
|
||||
FI
|
||||
# OD # ));
|
||||
IF count NE 0 THEN
|
||||
STRING str count := whole(count,0);
|
||||
gen char string(str count,yield);
|
||||
yield(prev)
|
||||
FI
|
||||
);
|
||||
|
||||
STRING zero2nine = "0123456789";
|
||||
|
||||
PROC gen decode = (GENCHAR gen char, YIELDCHAR yield)VOID: (
|
||||
INT repeat := 0;
|
||||
# FOR CHAR c IN # gen char( # ) DO ( #
|
||||
## (CHAR c)VOID: (
|
||||
IF char in string(c, LOC INT, zero2nine) THEN
|
||||
repeat := repeat*10 + ABS c - ABS "0"
|
||||
ELSE
|
||||
FOR i TO repeat DO yield(c) OD;
|
||||
repeat := 0
|
||||
FI
|
||||
# OD # ))
|
||||
);
|
||||
|
||||
# iterate through input string #
|
||||
print("Encode input: ");
|
||||
# FOR CHAR c IN # gen encode(input seq, # ) DO ( #
|
||||
## (CHAR c)VOID:
|
||||
print(c)
|
||||
# OD # );
|
||||
print(new line);
|
||||
|
||||
# iterate through output string #
|
||||
print("Decode output: ");
|
||||
# FOR CHAR c IN # gen decode(output seq, # ) DO ( #
|
||||
## (CHAR c)VOID:
|
||||
print(c)
|
||||
# OD # );
|
||||
print(new line)
|
||||
Loading…
Add table
Add a link
Reference in a new issue