21 Востаннє редагувалося koala (29.08.2017 07:36:13)

Re: Задачі в один рядок на Пітоні

23. "Кращим" з двох чисел є те, сума цифр якого більша; якщо ж суми однакові, то "кращим" є менше з них. Наприклад, 13 краще за 12, 22 і 31. Знайти найкращий з дільників заданого числа.
Наприклад, 6 == solution(12), бо з [1,2,3,4,6,12] найбільша сума цифр у 6.

Прихований текст

def solution(n):
    return max([d for d in range(1,n+1) if n%d==0],key=lambda x:sum(int(d) for d in str(x))+1/x)

22

Re: Задачі в один рядок на Пітоні

Наприклад, 12 краще за 13

чому???
1+2 менше за 1+3

Подякували: koala1

23

Re: Задачі в один рядок на Пітоні

ping написав:

Наприклад, 12 краще за 13

чому???
1+2 менше за 1+3

Дякую, виправив.

24 Востаннє редагувалося ping (28.08.2017 22:40:40)

Re: Задачі в один рядок на Пітоні

а можемо функцію записати в один рядок?

чи яки й формат рішення має бути?

моє рішення:

Прихований текст

print((lambda num:max([(sum([int(k) for k in str(num//i)]),num//i) for i in range(2, num) if not num%i])[1])( int(input())))

ще можна чуть оптимізувати  - вкоротити range наполовину

25

Re: Задачі в один рядок на Пітоні

1. Ви крутите цикл від 2 до n, а в умові сказано, що 1 і n зараховуються як дільники. Зокрема, ваш код падає на всіх простих числах.
2. Ваш код видає 18 як відповідь для 18, у той час, як правильна відповідь 9.
3. Не вдвічі, а в корінь з n.

Прихований текст

max(sum([[d,n//d] for d in range(1,int(n**.5+1)) if n%d==0],[]),key=lambda x:sum(int(d) for d in str(x))+1/x)

26 Востаннє редагувалося ping (29.08.2017 10:05:58)

Re: Задачі в один рядок на Пітоні

koala написав:

1. Ви крутите цикл від 2 до n, а в умові сказано, що 1 і n зараховуються як дільники. Зокрема, ваш код падає на всіх простих числах.
2. Ваш код видає 18 як відповідь для 18, у той час, як правильна відповідь 9.
3. Не вдвічі, а в корінь з n.

Прихований текст

max(sum([[d,n//d] for d in range(1,int(n**.5+1)) if n%d==0],[]),key=lambda x:sum(int(d) for d in str(x))+1/x)


знаю.
прокинувся з думкою, що в коді помилка )

p.s.
це часом не якась хвороба психічна - під час сну аналізувати написаний код?

27 Востаннє редагувалося ping (29.08.2017 10:07:08)

Re: Задачі в один рядок на Пітоні

ловіть.

Прихований текст

def ping(n):
    return max({sum([int(k) for k in str(n//i)]):n//i for i in range(1, n + 1) if not n%i}.items())[1]

def koala(n):
    return max(sum([[d,n//d] for d in range(1,int(n**.5+1)) if n%d==0],[]),key=lambda x:sum(int(d) for d in str(x))+1/x)
    

for i in range(1,10000):
    if koala(i) != ping(i):
        print ("Error", i)
        break
else:
    print("YES!")

28

Re: Задачі в один рядок на Пітоні

https://ideone.com/GFYjg4
У мене швидше :)

Подякували: ping1

29

Re: Задачі в один рядок на Пітоні

koala написав:

https://ideone.com/GFYjg4
У мене швидше :)

зате у мене пітонічніше )

ну і оптимізувати все таки треба, хоч і не думаю, що сильно поможе.

30 Востаннє редагувалося koala (29.08.2017 11:40:57)

Re: Задачі в один рядок на Пітоні

Жоден не пітонічний. Пітон лаконічний не заради лаконічності, а заради виразності.
Якщо робити мій код виразним, то буде щось на кшталт

def koala_explained(n):
    max_divisor = int(n**.5)
    divisors = []
    for divisor in range(1,max_divisor+1):
        if n % divisor == 0:
            divisors.append(divisor)
            divisors.append(n//divisor)

    def digit_sum(x):
        return sum(int(digit) for digit in str(x))

    def magnitude(x):
        return digit_sum(x)+1/x

    return max(divisors,key=magnitude)

А ви використовуєте побічну властивість словника (перезапис старих значень) для пошуку мінімуму, що ніяк не сприяє розумінню того, що відбувається.

31

Re: Задачі в один рядок на Пітоні

22. Об'єднати дві стрічки через один символ. Якщо одна зі стрічок довша - просто додати її символи в кінець. Наприклад, "awbxcydz" == solution("abcd", "wxyz")

мій варіант:

Прихований текст

def solution(s1, s2):
    return ''.join([''.join(i) for i in zip(s1,s2)]) + s1[len(s2):len(s1)] + s2[len(s1):len(s2)]

32

Re: Задачі в один рядок на Пітоні

9. Знайти в послідовності чисел від 1 до N, наведених в довільному порядку, пропущене. Наприклад 1 == solution([2,3,4,5]).

мій варіант:

Прихований текст

def solution(lst):
    return ''.join([str(i) for i in range(1,  len(lst) + 2) if i not in lst])

33 Востаннє редагувалося ping (05.09.2017 23:49:35)

Re: Задачі в один рядок на Пітоні

16. Знайти в масиві перший за порядком елемент, що зустрічається більше одного разу. Наприклад, 5 == solution([10,5,3,4,3,5,6])

Прихований текст

def solution(lst):
    return [i for i in lst if lst.count(i) > 1][0]

Словами: умова, тільки до списку додаємо None на випадок, коли всі елементи різні

не передбачено умовою задачі. треба в умову додати слова "якщо такий є"

щось я там не можу цих задачок знайти, якщо є  ще що цікаве - давайте.

34 Востаннє редагувалося ping (06.09.2017 09:15:13)

Re: Задачі в один рядок на Пітоні

Перевірити, чи містить стрічка гірлянду, і повернути максимальну довжину гірлянди, або 0, якщо її нема. Гірляндою в стрічці зветься підстрічка, що повторюється на початку і в кінці стрічки, але менша за всю стрічку. Наприклад, 2 == solution("onion")

Прихований текст

def solution(s):
    return list([i for i in range(len(s)//2,0,-1) if s[0:i] == s[-i:]] + [0])[0]

35 Востаннє редагувалося ping (11.09.2017 12:03:06)

Re: Задачі в один рядок на Пітоні

дано двері висотою hd, шириною wd.
дано бокс (коробку) висотою, шириною, довжиною (hb, wb, lb)

дані вносяться з консолі.

коробку треба занести через двері. можна обертати.

визначити, чи це вдасться до того, як задіювати вантажників.

def solution():
  return <code>

Прихований текст

def solution():
    return sum([door_param >= box_param for door_param, box_param  \
                                    in zip(sorted([float(input('Enter door parameter #{} :'.format(i + 1))) for i in range(2)]),
                                           sorted([float(input('Enter box parameters #{} :'.format(i + 1))) for i in range(3)]))
            ]) == 2
            
print(solution())

36 Востаннє редагувалося koala (11.09.2017 13:00:04)

Re: Задачі в один рядок на Пітоні

Введення треба зробити окремо, воно картинку псує.
І all() виглядає красивіше за sum()==2.

Прихований текст

def solution(box_h,box_w,box_l,door_h,door_w):
    return all(box_m<=door_m for box_m,door_m in zip(sorted([box_h,box_w,box_l]),sorted([door_h,door_w]))

Подякували: ping1

37

Re: Задачі в один рядок на Пітоні

І all() виглядає красивіше за sum()==2.

дякую. я довго уникав цих функцій all, any. нарешті прочитав що вони роблять )

38 Востаннє редагувалося P.Y. (12.09.2017 04:36:12)

Re: Задачі в один рядок на Пітоні

Прихований текст

def solution(bh,bw,bl, dh,dw):
     return all(map(lambda b,d:b<=d, *map(sorted,((bh,bw,bl),(dh,dw)))))

Уточнення: якщо розмір коробки дорівнює розміру дверей, вона ще пролазить, чи вже ні? У другому випадку, <= слід замінити на <

py -3 -m pip install git+https://github.com/snoack/python-goto
Подякували: koala, ping2

39

Re: Задачі в один рядок на Пітоні

P.Y. написав:
Прихований текст

def solution(bh,bw,bl, dh,dw):
     return all(map(lambda b,d:b<=d, *map(sorted,((bh,bw,bl),(dh,dw)))))

Уточнення: якщо розмір коробки дорівнює розміру дверей, вона ще пролазить, чи вже ні? У другому випадку, <= слід замінити на <

красиво!

40

Re: Задачі в один рядок на Пітоні

Числом Капрекара зветься число, запис квадрату якого можна розкласти на дві частини, сума яких дорівнює цьому числу. Наприклад,
45**2 = 2025, 20+25=45
297**2=88209, 88+209=297
Перевірити, чи є задане число числом Капрекара.

Прихований текст

def solution(n):
    return any(sum(divmod( n**2, 10**i )) == n for i in range(1+2*len(str(n))))

Насправді, це визначення неповне - там ще є уточнення, що права частина не може бути 0. І щось адекватно запхати цю умову у мене поки що не виходить. Звісно, можна обмежити пошук не по range(1+2*len(str(n))), а перевіряти тільки len(str(n)), але щось мені ліньки доводити, що це еквівалентно.