Професионална програма
Loading...
rumyana.tsoneva avatar rumyana.tsoneva 2 Точки

Basic Algebra Exercise

Привет!

Правя тази тема за въпроси, свързани със съответние упражнения.

Моят първи въпрос е: 

На задача 2.2. def plot_complex_numbers(numbers, colors):

това ли е очакваният резултат:

https://imgur.com/2iqhPJd

Тагове:
0
Math Concepts for Developers 20/04/2018 22:33:24
georgitanev avatar georgitanev 5 Точки

Някой успя ли да реши 4-та задача?

Problem 4. Run-length Encoding

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.

0
rumyana.tsoneva avatar rumyana.tsoneva 2 Точки

Това е моята версия за кодирането:

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"))

 

Първият стринг се декодира, но при втория резултатът е следният: 

AAB3EEEE

Това се получава, защото, когато види, че след Б следва Ц, добавя Б, но на следващия цикъл не се връща на Ц. Някой има ли идея или алтернатива?

0
georgitanev avatar georgitanev 5 Точки

Това е моята версия на кода, работи

Работи, нямах време да правя версия, която да работи с 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)

0
18/05/2018 12:12:16