Yarışmacılar ve Numaraları

ilginc_durumlar = lambda N: list(filter(lambda k: sum([x for x in range(1, k) if x % 2 == 1]) == sum([x for x in range(k+1, N+1) if x % 2 == 0]), range(1, N+1)))

print(list(filter(lambda n_k: len(n_k[1]) > 0, map(lambda n: (n, ilginc_durumlar(n)), range(1000)))))

N = 28/29
k = 20/21
t = 100

1 Beğeni

Merhabalar,

Aşağıdaki gibi bir matematiksel ilişki ile de en düşük toplamı bulabiliriz:

n: Uzunluk
i: İndis

i -= (1 if i % 2 else 0)

i’den önceki tüm tek sayıların toplamı: i2 / 4
i’den sonraki tüm çift sayıların toplamı: (n - i) * (i + 2 + n) / 4

if sum(çiftler)==sum(tekler): şeklinde iki ayrı liste ile çalışmak yerine, bulunduğumuz indise göre tekler ve çiftlerin toplamının ne olacağını yukardaki formüllerle hesaplayabiliriz, böylece işlem yükünü azaltmış oluruz.

def min_sum():
    n = 1
    while True:
        for i in range(1, n):
            i -= 1 if i % 2 else 0
            sum_odd = i ** 2 / 4
            sum_even = (n - i) * (i + 2 + n) / 4
            if sum_odd == sum_even:
                return n, i, sum_odd, sum_even
        n += 1


print(min_sum())  # (28, 20, 100.0, 100.0)
 x  N
20 28
21 28
20 29
21 29

Hepsi sağlıyor gibi koşulu.

Soruyu dikkatli okuyunca toplamı soruluyormuş , o sabit evet 100