41 Востаннє редагувалося ping (12.09.2017 15: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 21: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)]))

py -3 -m pip install git+https://github.com/snoack/python-goto

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))

py -3 -m pip install git+https://github.com/snoack/python-goto

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]

py -3 -m pip install git+https://github.com/snoack/python-goto

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 символів із початковими відступами.