Jednolinijkowe programy

0

Czesc! Mam do napisania funkcje ktore maja byc zawarte w jednej linijce i nie moge sobie z nimi poradzic. Moze jakies wskazowki?

a)drabina(L), która zwraca wartość logiczną równą True wtt jeżeli na liście znajdują się tylko dwie (być może powtarzające się) wartości i ponadto występują one na zmianę (możesz założyć, że drabina wywoływana jest tylko dla list liczb).
b)poltaksowkowa(N)– zwraca wartość logiczną, mówiącą czy liczba dodatnia całkowita N da się przedstawić jako suma dwóch sześcianów liczb naturalnych. Uwaga: rozwiązanie nie musi być efektywne
c)ukladalne2(S)– dla zbioru napisów S funkcja zwraca zbiór tych napisów, które powstały przez włożenie jednego napisu z S do drugiego, tak jak matematyk powstał przez włożenie wyrazu tematy do wyrazu mak
d)maleRybyWDuzych(L), która zwraca wartość logiczną, jeżeli wyrazy w liście L da się ułożyć w ten sposób, by poprzedni był podsłowem (ciągłym) kolejnego. Przykładowo, dla listy [’rekinisko’, ’rekin’, ’eki’, ’megarekinisko’, ’megarekiniskozilla’] wynik powinien być True, a dla listy [’karp’, ’karpik’, ’płotka’, ’sum’] –False

Dzieki za ewentualna pomoc!

0
  1. Porównałbym czy rozmiar listy wejściowej jest równy rozmiarowi listy filtrowanej w ten sposób że każdy 2k-ty wyraz jest równy pierwszemu elementowi a każdy 2k+1 wyraz jest równy drugiemu elementowi
  2. to akurat dość oczywiste -> return liczba in [wszystkie możliwe sumy sześcianów liczb naturalnych]
  3. Dla każdej pary sprawdzasz czy x in y and x!=y i jeśli tak to wyraz wchodzi do zbioru.
    Próbowałeś w ogóle sam nad tym coś pomyśleć? To nie są trudne rzeczy.
0

Spróbuj poeksperymentować z następującym kodem

def drabina(L): 
    return len(set(L[::2])) + len(set(L[1::2])) == 2

def drabina(L): 
    return L == L[:2] * (len(L) / 2)

#bardzo nieefektywne
def poltaksowkowa(N): 
    return any([i ** 3 + j ** 3 == N for i in xrange(1, N) for j in xrange(1, N)])

import itertools as it

a = ['matematyk', 's', 'abcdef', 'cd', 'tematy', 'mak', "aabbaa", "bb", "aaaa"]
def ukladalne2(S): 
    return set([i for i, j, k in it.product(S, S, S) if i.replace(j, "") == k and len(set([i, j, k])) == 3])
#>>> ukladalne2(a)
#set(['aabbaa', 'matematyk'])

def maleRybyWDuzych(L): 
    return reduce(lambda x, y: y if x in y else " " * 9, sorted(L, key=len)) != " " * 9

1 użytkowników online, w tym zalogowanych: 0, gości: 1