June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
31
Task/Run-length-encoding/Ceylon/run-length-encoding.ceylon
Normal file
31
Task/Run-length-encoding/Ceylon/run-length-encoding.ceylon
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
shared void run() {
|
||||
|
||||
"Takes a string such as aaaabbbbbbcc and returns 4a6b2c"
|
||||
String compress(String string) {
|
||||
if (exists firstChar = string.first) {
|
||||
if (exists index = string.firstIndexWhere((char) => char != firstChar)) {
|
||||
return "``index````firstChar````compress(string[index...])``";
|
||||
}
|
||||
else {
|
||||
return "``string.size````firstChar``";
|
||||
}
|
||||
}
|
||||
else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
"Takes a string such as 4a6b2c and returns aaaabbbbbbcc"
|
||||
String decompress(String string) =>
|
||||
let (runs = string.split(Character.letter, false).paired)
|
||||
"".join {
|
||||
for ([length, char] in runs)
|
||||
if (is Integer int = Integer.parse(length))
|
||||
char.repeat(int)
|
||||
};
|
||||
|
||||
assert (compress("aaaabbbbbaa") == "4a5b2a");
|
||||
assert (decompress("4a6b2c") == "aaaabbbbbbcc");
|
||||
assert (compress("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW") == "12W1B12W3B24W1B14W");
|
||||
assert (decompress("24a") == "aaaaaaaaaaaaaaaaaaaaaaaa");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue