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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.