41 Востаннє редагувалося ping (12.09.2017 14:13:02)

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

Перевірити, чи є задане число числом Капрекара.

Прихований текст
def sol(n):
    return  not all({sum(map(int, (str(n*n)[:x], str(n*n)[x:])), -n)  for x in range(1, len(str(n*n)))})
    
print(sol(296))

ну і , здається , можна умову по правій частині запхати. якщо я правильно її зрозумів

42 Востаннє редагувалося ping (12.09.2017 20:41:03)

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

класична задача: FizzBuzz
Write a program that prints the integers from   1   to   n  (inclusive).
But:
          for multiples of three,   print   Fizz     (instead of the number)
          for multiples of five,   print   Buzz     (instead of the number)
          for multiples of both three and five,   print   FizzBuzz     (instead of the number)

def solution(n):
  print <code> 

рішення:

Прихований текст
def sol(n):
    print('\n'.join([{0:'Fizz', 1:'Buzz', 2: 'Fizz Buzz'}[[0,1,2].index(2 if not i%3 and not i%5 else 1 if not i%5 else 0)] if not i%3 or not i%5 else str(i)  for i in range(1, n+1)]))
    
sol(30)

або простіше:

Прихований текст
def sol(n):
    print('\n'.join(['Fizz Buzz' if not i%3 and not i%5 else 'Buzz' if not i%5 else 'Fizz' if not i%3  else str(i)  for i in range(1, n+1)]))

43

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

Можна трохи спростити
def sol(n):
    print('\n'.join(['Fizz Buzz' if not i%15 else 'Buzz' if not i%5 else 'Fizz' if not i%3  else str(i)  for i in range(1, n+1)]))

44

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

koala написав:

Числом Капрекара зветься число, запис квадрату якого можна розкласти на дві частини, сума яких дорівнює цьому числу. Наприклад,
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)), але щось мені ліньки доводити, що це еквівалентно.

Прихований текст
def solution(n):
    return any(sum(divmod( n**2, 10**i )) == n for i in range(1,len(str(n**2)) if n**2%10**i))

45

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

code in Python that takes a string s as input and determines the longest substring of s that’s in alphabetical order. In the case where there are two(or more) strings of the same length, code outputs the first in alphabetical order.

sol('f') = 'f'
sol('zopstdabcd') = 'abcd'
sol('azcbobobegghakl') = 'beggh'


рішення:

Прихований текст
def sol(s):
    return sorted([ss for ss in {s[i:i+j+1] for i in range(len(s)+1)  for j in range(len(s)-i)} if all([ss[n] >= ss[n-1]  for n in range(1,len(ss))])], key=lambda x: (1/len(x), x))[0]

46

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

Прихований текст
sol=lambda s:[s[a:b] for splits in [[i for i in range(1,len(s)) if s[i-1]>s[i]]] 
    for a,b in (min(map(lambda *a:a, [0]+splits, splits+[len(s)]), 
        key=lambda a:(a[0]-a[1],s[a[0]:a[1]])),)][0]

47

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

Given single line with integers, separated by a space.

Output the elements from the odd positions, each on a separate line, and the sum of this elements.

  
 0 1 2 3 4 5 6 7 8 9 10 20 30
1
3
5
7
9
20
45

рішення:

Прихований текст
print(sum([(0 if print(v) else int(v)) for k,v in enumerate(input().split()) if k%2]))

48

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

Прихований текст
def solution(a): #приймає стрічку з розділених пробілом цілих
    a=a.split()[1::2];print('\n'.join(a+[str(sum(map(int,a)))]))

ніби коротше. А крапка з комою мені подобається більше за if print().

49

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

koala написав:
Прихований текст
def solution(a): #приймає стрічку з розділених пробілом цілих
    a=a.split()[1::2];print('\n'.join(a+[str(sum(map(int,a)))]))

ніби коротше. А крапка з комою мені подобається більше за if print().

ну так крапка з комою - це вже не один рядок а формат запису  n інструкцій в один рядок.
ці задачі  точніше було б формулювати- написати в ОДНУ інструкцію, а не в ОДИН рядок.

50

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

ping написав:

не один рядок а формат запису  n інструкцій в один рядок.

Не розумію - що таке "не X, а формат запису Y в X".

ping написав:

ці задачі  точніше було б формулювати- написати в ОДНУ інструкцію, а не в ОДИН рядок.

Вам ніхто не забороняє створити власну гілку із власними правилами.

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

51

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

koala написав:
ping написав:

не один рядок а формат запису  n інструкцій в один рядок.

Не розумію - що таке "не X, а формат запису Y в X".

на мою думку із застосуванням " ; "   сенс подібних задач втрачається , оскільки:

x=1;y=3;...;statement_N

тотожний до

x=1
y=3
...
statement_N
Подякували: sensei1

52

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

А на мою думку, сенс подібних задач втрачається, коли використовується 100500 знаків в одній інструкції, щоб уникнути двох інструкцій.
Втім, дійсно, краще детальніше визначити правила, щоб уникнути суперечок. Поки що я б подав їх так:
Відповідь має складатися з функції, що приймає параметрами вхідні дані у найбільш очевидній формі, що відповідає умові (числа - int чи float, стрічки - string, масиви - list і т.д.), і другим рядком повертає значення, яке треба вивести в умові. Другий рядок має, за можливості, вміщатися у 80 символів із початковими відступами.

53

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

Пересунути всі нулі в кінець масиву

Прихований текст
def solve(arr):
    return sorted(arr,key=0.__eq__)

Варіант: пересунути всі максимальні значення в кінець

Прихований текст
def solve(arr):
    return sorted(arr,key=max(arr).__eq__)
Подякували: leofun01, plusxx2

54

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

Це вже одна стрічка. Вам потрібно зробити в 1 рядок, наскільки я зрозумів.

Подякували: mamkin haker1

55 Востаннє редагувалося koala (20.11.2024 13:07:50)

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

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

Умова: знайти добуток цифр числа; якщо одна з цифр дорівнює 0, то весь попередній добуток замінюється на 1 (наприклад, 23046 дає 24, бо 2*3*0=0=>1). Додаткове обмеження: вкластися в 50 символів коду, включно з назвою функції digprod.

Мій розв'язок (54 символи)
d=lambda n,r=1:d(n//10,n%10*r)if n%10 else r;digprod=d

Пояснення: ідемо з кінця по цифрі і накопичуємо добуток цифр, щойно зустріли 0 - повертаємо накопичене значення.

Прибрати if else не виходить, бо треба зупиняти рекурсію.

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