Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions projects/006-run-length-decoding/README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Run-Length Decoding

Run-length encoding is a simple data compression technique that can be effective
when repeated values occur at adjacent positions within a list.
Run-length encoding is a simple data compression technique that can be effective
when repeated values occur at adjacent positions within a list.

Compression is achieved by replacing groups of repeated values with one copy of the value,
followed by the number of times that it should be repeated.
Compression is achieved by replacing groups of repeated values with one copy of the value,
followed by the number of times that it should be repeated.
For example, the list
`["A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B","B","A","A","A","A","A","A","B"]`
would be compressed as `["A",12,"B",4,"A",6,"B",1]`.
would be compressed as `["A",12,"B",4,"A",6,"B",1]`.

Decompression is performed by replicating each value in the list the number of times indicated.

Write a recursive function that decompresses a run-length encoded list.
Your recursive function will take a run-length compressed list as its only argument.
It will return the decompressed list as its only result.
Write a recursive function that decompresses a run-length encoded list.
Your recursive function will take a run-length compressed list as its only argument.
It will return the decompressed list as its only result.

Create a main program that displays a run-length encoded list and the result of decoding it.

# Documentation

For this project solution you may use:
Expand Down
37 changes: 37 additions & 0 deletions projects/006-run-length-decoding/python/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
def decode_compressed_list(comp_ls):
if len(comp_ls)>0:
elem=comp_ls[0]
comp_ls.remove(comp_ls[0])
num=comp_ls[0]
comp_ls.remove(comp_ls[0])
return [elem]*num+decode_compressed_list(comp_ls)
else:
return []

def main():
StructureIsWrong=True
while StructureIsWrong:
SyntaxIsWrong=True
while SyntaxIsWrong:
try:
comp_ls=eval(input('Please, enter a string of this type [string,integer,string,integer...]: '))
SyntaxIsWrong=False
except SyntaxError:
print("Wrong list syntax, retry!")

StructureIsWrong=False
if len(comp_ls)%2>0:
StructureIsWrong=True
else:
strings=comp_ls[0:2:]
ints=comp_ls[1:2:]
for i,j in zip(strings,ints):
if not (type(i)==str and type(j)==int):
StructureIsWrong=True

ls=comp_ls.copy()
decomp_list=decode_compressed_list(ls)
print('Compressed list: {}\n\nDecompressed list: {}'.format(comp_ls,decomp_list))

if __name__=='__main__':
main()