Basic Algebra Exercise
Привет!
Правя тази тема за въпроси, свързани със съответние упражнения.
Моят първи въпрос е:
На задача 2.2. def plot_complex_numbers(numbers, colors):
това ли е очакваният резултат:
https://imgur.com/2iqhPJd
Привет!
Правя тази тема за въпроси, свързани със съответние упражнения.
Моят първи въпрос е:
На задача 2.2. def plot_complex_numbers(numbers, colors):
това ли е очакваният резултат:
https://imgur.com/2iqhPJd
Някой успя ли да реши 4-та задача?
One application of algebra and basic math can be compression. This is a way to save data in less space than it originally takes. The most basic form of compression is called run-length encoding.
Write a function that encodes a given text. Write another one that decodes.
We can see that RLE is not very useful in the general case. But it can be extremely useful if we have very few symbols. An example of this can be DNA and protein sequences. DNA code, for example, has only 4 characters.
Test your encoding and decoding functions on a DNA sequence (you can look up some on the Internet). Measure how much your data is compressed relative to the original.
Това е моята версия за кодирането:
def encode(text):
"""
Returns the run-length encoded version of the text
(numbers after symbols, length = 1 is skipped)
"""
encoded = ""
count = 0
i = 0
letter = text[i]
for i in range(0, len(text)):
if(text[i] == letter):
count += 1
else:
encoded += (str(letter)+""+str(count))
letter = text[i]
count = 1
if (i == (len(text) - 1)):
encoded += (str(letter) + ""+str(count))
return encoded.replace("1","")
Но имам затруднения с декодирането:
def decode(text):
"""
Decodes the text using run-length encoding
"""
decoded = ""
i = 0
for i in range(0, len(text), 2):
letter = text[i]
number = text[i+1]
if number.isdigit():
decoded += letter * int(number)
else:
decoded += letter
return decoded
print(decode("A2B3"))
print(decode("A2BC3DE4"))
Първият стринг се декодира, но при втория резултатът е следният:
Това се получава, защото, когато види, че след Б следва Ц, добавя Б, но на следващия цикъл не се връща на Ц. Някой има ли идея или алтернатива?
Това е моята версия на кода, работи
Работи, нямах време да правя версия, която да работи с 10 и 20 и т.н. числа. Но тази работи :)
def encode(input_string):
count = 1
prev = ""
lst = ""
for character in input_string:
if character != prev:
if prev:
entry = (str(prev) + str(count))
lst = str(lst) + str(entry)
lst = lst.replace("1","")
#print(lst)
count = 1
prev = character
else:
count += 1
else:
try:
entry = (str(character) + str(count)) #
#print(entry)
#lst.replace("1","")
lst = str(lst) + str(entry)
#lst = lst.replace("1","")
return (str(lst))
except Exception as e:
print("Exception encountered {e}".format(e=e))
return (str(e))
def int_str(a):
try:
type(int(a)) == int
return int
except:
return str
def decode(lst="A2BC3DE4"):
empty = ""
sbor = ""
result =""
final =""
for char2 in lst:
if len(empty) ==0:
char1 = lst[0]
empty = "1"
else:
if int_str(char2) == int:
sbor = char1*int(char2)
final = final + sbor
char1 = char2
else:
if int_str(char1) == int:
char1 = char2
else:
final = final + char1
char1 = char2
return(final)