Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Python Meetup №106. Валерий Карпузов (Sm...

Moscow Python Meetup №106. Валерий Карпузов (SmartFX, Team Lead). Пиши, сокращай — Code Golf на Python

Есть такой жанр состязаний — CodeGolf, когда нужно написать максимально короткую программу. Python в этом жанре побеждает всех. Покажу по шагам как из обычной программы сделать короткую. Узнаем хитрости и трюки этого развлечения.☺

Видео: https://moscowpython.ru/meetup/106/python-code-golf/

Moscow Python: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru
Заявки на доклады: https://bit.ly/mp-speaker

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

October 30, 2025
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Обо мне: Кáрпузов Валерий Викторович tg: @Karpuzoff Программировал в 10

    компаниях: от Акрониса до Яндекса Люблю: Россию, книги, долгие прогулки, хороших людей и пожизненную моногамию.
  2. Код-гольф (code golf) — это вид развлекательного соревнования в программировании,

    в котором участники стараются написать максимально короткий исходный код, реализующий заданный алгоритм или задачу. Цель — минимизировать длину программы в символах или байтах, подобно тому, как в гольфе основная задача — пройти поле с минимальным числом ударов. Термин возник в 1999 году.
  3. Сжатие присваиваний a=0 b=0 c=0 # 11 a=0;b=0;c=0 # 11

    a,b,c=0,0,0 # 11 a=b=c=0 # 7 a='x' b='y' c='z' # 17 a='x';b='y';c='z' # 17 a,b,c='x','y','z' # 17 a,b,c='xyz' # 11
  4. Сжатие сравнений x >= 10 # 7 x>=10 # 5

    x>9 # 3 3<x and x<6 # 11 x>3and x<6 # 10 3<x<6 # 5
  5. Сжатие сравнений x >= 10 # 7 x>=10 # 5

    x>9 # 3 3<x and x<6 # 11 x>3and x<6 # 10 3<x<6 # 5 x<5 and y<5 # 11 x<5and y<5 # 10 x<5>y # 5
  6. Сжатие сравнений x >= 10 # 7 x>=10 # 5

    x>9 # 3 3<x and x<6 # 11 x>3and x<6 # 10 3<x<6 # 5 x<5 and y<5 # 11 x<5and y<5 # 10 x<5>y # 5 x>0 and z>0 and y<x # 19 z>0 and 0<x and x>y # 19 z>0<x>y # 7
  7. Сжатие сравнений # x принадлежит (10; 30) И y принадлежит

    к (10; 50) x>10 and y>10 and 30>x and 50>y # 31 30>x and x>10 and 10<y and y<50 # 31 30>x>10<y<50 # 12
  8. Сжатие сравнений # x принадлежит (10; 30) И y принадлежит

    к (10; 50) x>10 and y>10 and 30>x and 50>y # 31 30>x and x>10 and 10<y and y<50 # 31 30>x>10<y<50 # 12 return x==5 and y==6 # 20 return x==5and y==6 # 19 return(x,y)==(5,6) # 18
  9. Сжатие сравнений # x принадлежит (10; 30) И y принадлежит

    к (10; 50) x>10 and y>10 and 30>x and 50>y # 31 30>x and x>10 and 10<y and y<50 # 31 30>x>10<y<50 # 12 return x==5 and y==6 # 20 return x==5and y==6 # 19 return(x,y)==(5,6) # 18 return x==y==5 # 14
  10. Сжатие сравнений # x принадлежит (10; 30) И y принадлежит

    к (10; 50) x>10 and y>10 and 30>x and 50>y # 31 30>x and x>10 and 10<y and y<50 # 31 30>x>10<y<50 # 12 return x==5 and y==6 # 20 return x==5and y==6 # 19 return(x,y)==(5,6) # 18 return x==y==5 # 14 # если n, m float: if n!=m: # 8 if n-m: # 7
  11. or & and (True or False) == True (False or

    True) == True (False or 4) == 4 (0 or 0) == 0 (0 or 3) == 3 (2 or 0) == 2 (2 or 3) == 2 (False and 1) == False (False and True) == False (1 and False) == False (0 and 0) == 0 (0 and 3) == 0 (2 and 0) == 0 (2 and 3) == 3 ('' or 3) == 3 ([] and [1]) == [] ([0] or [1]) == [0]
  12. Полезное свойство or # Четный=Even, Нечетный=Odd if a%2: # print('Odd')

    # else: # print('Even') # 48 print('Odd' if a%2 else 'Even') # 31 print('Odd'*(a%2) or 'Even') # 28 print('Odd'*(a%2)or'Even') # 26
  13. Сжатие булевых сравнений if a and b: # 11 if

    a*b: # 7 if a&b: # 7 if a or b: # 10 if a|b: # 7 if a != b: # 10 if a!=b: # 8 if a^b: # 7 if not f: # 9 if f<1: # 7 if 1-f: # 7 if 1^f: # 7 a b a & b a | b a ^ b 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0
  14. Проверка на четность # is_even = четный ли? if n%2==0:

    # 10 if n%2<1: # 9 if ~n&1: # 8 if~n&1: # 7 # is_odd = нечетный ли? if n%2==1: # 10 if n%2>0: # 9 if n%2: # 7 if n&1: # 7
  15. Индексация вместо ветвлений if x < y: # return a

    # else: # return b # 41 if x < y: # return a # return b # 31 if x<y:return a return b # 24 return a if x<y else b # 22 return(b,a)[x<y] # 16
  16. Индексация вместо ветвлений if X and Y: # print(B) #

    else: # print(A) # 43 print((A,B)[X and Y]) # 21 # а если X и Y булевые, то даже print((A,B)[X&Y]) # 17 print([A,B][X&Y]) # 17
  17. s = 'Karpuzoff' # 42 for i in range(len(s)-1,-1,-1):print(s[i]) #

    25 for i in s[::-1]:print(i) # 14 print(s[::-1]) Распечатать задом наперед
  18. Использование шага слайса #2 def day1(d): return['Mon','Tue','Wed','Thu','Fri','Sat','Sun'][d] # 52 def

    day2(d): return'Mon Tue Wed Thu Fri Sat Sun'.split()[d] # 46 def day3(d): return'MonTueWedThuFriSatSun'[d*3:d*3+3] # 40
  19. Использование шага слайса #2 def day1(d): return['Mon','Tue','Wed','Thu','Fri','Sat','Sun'][d] # 52 def

    day2(d): return'Mon Tue Wed Thu Fri Sat Sun'.split()[d] # 46 def day3(d): return'MonTueWedThuFriSatSun'[d*3:d*3+3] # 40 def day4(d): return'MTWTFSSouehrauneduitn'[d::7] # 35
  20. Замена символов в string text = '---. -.' a=lambda s:s.replace('-','X').replace('.','-').replace('X','.')

    # 63 # ord('-') = 45 ord('.') = 46 b=lambda s:s.translate({45:46,46:45}) # 37 assert a(text) == b(text) == '...- .-'
  21. math.floor, math.ceil floor <= ceil math.floor(X/Y) # 15 X//Y #

    4 assert(1 == math.floor(5 / 3) == math.floor(-5 / -3) == 5//3) assert(-2 == math.floor(5 / -3) == math.floor(-5 / 3) == 5//-3) math.ceil(X/Y) # 14 -(-X//Y) # 8 assert(2 == math.ceil(5 / 3) == math.ceil(-5 / -3) == -(-5//3)) assert(-1 == math.ceil(5 / -3) == math.ceil(-5 / 3) == -(-5//-3))
  22. For loops #1 Вывести "0\n1\n2\n": for x in range(3):print(x) #

    26 for x in (0,1,2):print(x) # 25 for x in(0,1,2):print(x) # 24
  23. For loops #1 Вывести "0\n1\n2\n": for x in range(3):print(x) #

    26 for x in (0,1,2):print(x) # 25 for x in(0,1,2):print(x) # 24 for x in 0,1,2:print(x) # 23
  24. For loops #2 Вывести 10 одинаковых символов, с переводом строки:

    for _ in range(10):print(1) # 27 for _ in[1]*10:print(2) # 23 exec('print(3);'*10) # 20
  25. For loops #2 Вывести 10 одинаковых символов, с переводом строки:

    for _ in range(10):print(1) # 27 for _ in[1]*10:print(2) # 23 exec('print(3);'*10) # 20 print('4\n'*10) # 15
  26. For loops #2 Вывести 10 одинаковых символов, с переводом строки:

    for _ in range(10):print(1) # 27 for _ in[1]*10:print(2) # 23 exec('print(3);'*10) # 20 print('4\n'*10) # 15 в конце лишний '\n'! print(end='5\n'*10) # 19
  27. Lookup tables Lookup tables в code golf — это прием,

    позволяющий получать значения по ключу, как будто из ассоциативного массива. Но вместо таблицы используется просто большое число, биты которого содержат нужные значения.
  28. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - -
  29. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - -
  30. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - -
  31. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - -
  32. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 '0011010100010100'[n]>'0' # 25 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - -
  33. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 '0011010100010100'[n]>'0' # 25 b'0011010100010100'[n]&1 # 24 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - -
  34. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 '0011010100010100'[n]>'0' # 25 b'0011010100010100'[n]&1 # 24 def is_simple(n): return (0b0010100010101100 >> n) & 1 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - - n 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ? 0 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0
  35. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 '0011010100010100'[n]>'0' # 25 b'0011010100010100'[n]&1 # 24 def is_simple(n): return (0b0010100010101100 >> n) & 1 0b0010100010101100>>n&1 # 23 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - - n 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ? 0 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0
  36. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 '0011010100010100'[n]>'0' # 25 b'0011010100010100'[n]&1 # 24 def is_simple(n): return (0b0010100010101100 >> n) & 1 0b0010100010101100>>n&1 # 23 0b10100010101100>>n&1 # 21 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - - n 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ? 0 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0
  37. Lookup tables #1 Все простые числа в диапазоне [0; 15]:

    2, 3, 5, 7, 11, 13 def is_simple(n): return n in [2,3,5,7,11,13] n in [2,3,5,7,11,13] # 20 n in[2,3,5,7,11,13] # 19 int('0011010100010100'[n]) # 26 '0011010100010100'[n]>'0' # 25 b'0011010100010100'[n]&1 # 24 def is_simple(n): return (0b0010100010101100 >> n) & 1 0b0010100010101100>>n&1 # 23 0b10100010101100>>n&1 # 21 10412>>n&1 # 10 n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? - - 1 1 - 1 - 1 - - - 1 - 1 - - n 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ? 0 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0
  38. Lookup tables #2 X 0 1 2 3 4 5

    6 7 8 9 10 11 Y 31 28 31 30 31 30 31 31 30 31 30 31
  39. Lookup tables #2 X 0 1 2 3 4 5

    6 7 8 9 10 11 Y 31 28 31 30 31 30 31 31 30 31 30 31 def get_days_in_month_1(m): return{0:31,1:28,2:31,3:30,4:31,5:30,6:31,7:31,8:30,9:31,10:30,11:31}[m] def get_days_in_month_2(m): return [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m]
  40. Lookup tables #2 X 0 1 2 3 4 5

    6 7 8 9 10 11 Y 31 28 31 30 31 30 31 31 30 31 30 31 -28 3 0 3 2 3 2 3 3 2 3 2 3 def get_days_in_month_1(m): return{0:31,1:28,2:31,3:30,4:31,5:30,6:31,7:31,8:30,9:31,10:30,11:31}[m] def get_days_in_month_2(m): return [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m] def get_days_in_month_3(m): return 28 + [3, 0, 3, 2, 3, 2, 3, 3, 2, 3, 2, 3][m]
  41. Lookup tables #2 X 0 1 2 3 4 5

    6 7 8 9 10 11 Y 31 28 31 30 31 30 31 31 30 31 30 31 -28 3 0 3 2 3 2 3 3 2 3 2 3 BIN 11 00 11 10 11 10 11 11 10 11 10 11
  42. Lookup tables #2 X 0 1 2 3 4 5

    6 7 8 9 10 11 Y 31 28 31 30 31 30 31 31 30 31 30 31 -28 3 0 3 2 3 2 3 3 2 3 2 3 BIN 11 00 11 10 11 10 11 11 10 11 10 11 X 11 10 9 8 7 6 5 4 3 2 1 0 Dbin 11 10 11 10 11 11 10 11 10 11 00 11
  43. Lookup tables #2 m 11 10 9 8 7 6

    5 4 3 2 1 0 Dbin 11 10 11 10 11 11 10 11 10 11 00 11 def get_days_in_month_5(m): return (0b111011101111101110110011 >> 2*m & 0b11) + 28
  44. Lookup tables #2 m 11 10 9 8 7 6

    5 4 3 2 1 0 Dbin 11 10 11 10 11 11 10 11 10 11 00 11 def get_days_in_month_5(m): return (0b111011101111101110110011 >> 2*m & 0b11) + 28 def get_days_in_month_6(m): return (15662003 >> 2*m & 3) + 28
  45. Lookup tables #2 m 11 10 9 8 7 6

    5 4 3 2 1 0 Dbin 11 10 11 10 11 11 10 11 10 11 00 11 def get_days_in_month_5(m): return (0b111011101111101110110011 >> 2*m & 0b11) + 28 def get_days_in_month_6(m): return (15662003 >> 2*m & 3) + 28 def get_days_in_month_6(m): return (15662003>>2*m&3)+28
  46. Lookup tables #2 [31,28,31,30,31,30,31,31,30,31,30,31][m] # 40 [3,0,3,2,3,2,3,3,2,3,2,3][m]+28 # 31 int('303232332323'[m])+28

    # 25 (15662003>>2*m&3)+28 # 20 # chr(28*2)=='8' chr(30*2)=='<' chr(31*2)=='>' b'>8><><>><><>'[m]/2 # 20
  47. Решение задачи №1 Вам дано время суток в формате HH:MM,

    например 16:23. Если время в полуинтервале [07:00, 14:00), вывести Day. Если время в полуинтервале [02:00, 07:00), вывести Night. Если время в полуинтервале [14:00, 02:00), вывести Dev Day&Night. Ввод корректный, проверять его не надо.
  48. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 182 time = input() hh, mm = time[:2], time[3:5] h, m = int(hh), int(mm) if h >= 7 and h < 14: print('Day') elif h >= 2 and h < 7: print('Night') else: print('Dev Day&Night') 182 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  49. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 182 time = input() hh, mm = time[:2], time[3:5] h, m = int(hh), int(mm) if h >= 7 and h < 14: print('Day') elif h >= 2 and h < 7: print('Night') else: print('Dev Day&Night') 182 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  50. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 155 time = input() hh = time[:2] h = int(hh) if h >= 7 and h < 14: print('Day') elif h >= 2 and h < 7: print('Night') else: print('Dev Day&Night') 182 155 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  51. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 155 time = input() hh = time[:2] h = int(hh) if h >= 7 and h < 14: print('Day') elif h >= 2 and h < 7: print('Night') else: print('Dev Day&Night') 182 155 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  52. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 135 h = int(input()[:2]) if h >= 7 and h < 14: print('Day') elif h >= 2 and h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  53. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 135 h = int(input()[:2]) if h >= 7 and h < 14: print('Day') elif h >= 2 and h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  54. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 132 h = int(input()[:2]) if h > 6 and h < 14: print('Day') elif h > 1 and h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 132 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  55. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 132 h = int(input()[:2]) if h > 6 and h < 14: print('Day') elif h > 1 and h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 132 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  56. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 132 h = int(input()[:2]) if 6 < h and h < 14: print('Day') elif 1 < h and h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 132 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  57. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 132 h = int(input()[:2]) if 6 < h and h < 14: print('Day') elif 1 < h and h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 132 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  58. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 120 h = int(input()[:2]) if 6 < h < 14: print('Day') elif 1 < h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 132 120 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  59. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 120 h = int(input()[:2]) if 6 < h < 14: print('Day') elif 1 < h < 7: print('Night') else: print('Dev Day&Night') 182 155 135 132 120 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  60. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 95 h=int(input()[:2]) if 6<h<14:print('Day') elif 1<h<7:print('Night') else:print('Dev Day&Night') 182 155 135 132 120 95 час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night
  61. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 95 h=int(input()[:2]) if 6<h<14:print('Day') elif 1<h<7:print('Night') else:print('Dev Day&Night') час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night 182 155 135 132 120 95
  62. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 83 h=int(input()[:2]) print("Dev Day&Night"if h<2 or h>13 else"Day"if h>6 else"Night") час Что нужно вывести 0 .. 1 Dev Day&Night 2 .. 7 Night 7 .. 13 Day 14 .. 23 Dev Day&Night 182 155 135 132 120 95 83
  63. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 83 h=int(input()[:2]) print("Dev Day&Night"if h<2 or h>13 else"Day"if h>6 else"Night") # 79 t=(int(input()[:2])+10)%24 print('Dev Day&Night'*(t<12)or'Night'*(t<17)or'Day') # 78 t,x=int(input()[:2]),'Dev Day&Night' print(x[8:]*(1<t<7)or(6<t<14)*x[4:7]or x) 182 155 135 132 120 95 83 79 78
  64. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 83 h=int(input()[:2]) print("Dev Day&Night"if h<2 or h>13 else"Day"if h>6 else"Night") Вместо «if/else» перейдем к «X or Y»: # 77 t=int(input()[:2]) print('Dev Day&Night'*(t<2 or t>13)or'Night'*(t<7)or'Day') # 76 t=int(input()[:2]) print('Day'*(7<=t<14)or'Night'*(2<=t<7)or'Dev Day&Night') # 74 t=int(input()[:2]) print('Day'*(6<t<14)or'Night'*(1<t<7)or'Dev Day&Night') 182 155 135 132 120 95 83 79 78 77 76 74
  65. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. А что, если слово «Night» не писать дважды? # 73 t=int(input()[:2]) print('Day'*(6<t<14)or'Dev Day&'*(t<2 or t>9)+'Night') # 72 t=int(input()[:2]) print('Day'*(6<t<14)or'Dev Day&'*(not 1<t<7)+'Night') # 72 t=int(input()[:2]) print('Day'*(6<t<14)or'Dev Day&'*(1-(1<t<7))+'Night') 182 155 135 132 120 95 83 79 78 77 76 74 73 72
  66. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 71 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night'[x*4:16-9*(x&1)]) # 70 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night '[x*4:~(x%2*6)]) # 69 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night'[x*4:16-x%2*9]) hour x from to 0 .. 1 0 0 13 2 .. 6 2 8 13 7 .. 13 1 4 7 14 .. 23 0 0 13 182 155 135 132 120 95 83 79 78 77 76 74 73 72 71 70 69
  67. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 68 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night'[x*4:15>>x%2]) # 68 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night'[x*4:7<<~x%2]) # 67 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night'[x*4:7<<x^9]) 182 155 135 132 120 95 83 79 78 77 76 74 73 72 71 70 69 68 67 hour x from to 0 .. 1 0 0 13 2 .. 6 2 8 13 7 .. 13 1 4 7 14 .. 23 0 0 13
  68. Вам дано время суток в формате HH:MM, например 16:23. Если

    время в полуинтервале [07:00, 14:00), нужно вывести Day. Если время в полуинтервале [02:00, 07:00), нужно вывести Night. Если время в полуинтервале [14:00, 02:00), нужно вывести Dev Day&Night. # 67 x=89483936>>2*int(input()[:2])&3 print('Dev Day&Night'[x*4:7<<x^9]) hour x нужно 7 << x (7<<x)^1001 7<<x^9 0 .. 1 0 13+ 7=111 111^10001=10110 22 2 .. 6 2 13+ 28=11100 11100^1001=10101 21 7 .. 13 1 7 14=1110 1110^1001=111 7 14 .. 23 0 13+ 7=111 111^1001=10110 22 182 155 135 132 120 95 83 79 78 77 76 74 73 72 71 70 69 68 67
  69. Решение задачи №2 На вход подается имя файла, длиной до

    40 символов: main.cpp. По расширению файла понять, к какому треку он относится Файлы .cpp, .py, .go относится к backend. Файлы .swift, .dart, .apk относится к mobile. Файлы .pdf, .docx, .pptx относится к product. Ввод корректный, проверять его не надо.
  70. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 317 file_name = input() file_ext = file_name.split('.')[-1] if file_ext == 'cpp' or file_ext == 'py' or file_ext == 'go': print('backend') elif file_ext == 'swift' or file_ext == 'dart' or file_ext == 'apk': print('mobile') elif file_ext == 'pdf' or file_ext == 'docx' or file_ext == 'pptx': print('product') 317
  71. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 317 file_name = input() file_ext = file_name.split('.')[-1] if file_ext == 'cpp' or file_ext == 'py' or file_ext == 'go': print('backend') elif file_ext == 'swift' or file_ext == 'dart' or file_ext == 'apk': print('mobile') elif file_ext == 'pdf' or file_ext == 'docx' or file_ext == 'pptx': print('product') 317
  72. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 295 file_ext = input().split('.')[-1] if file_ext == 'cpp' or file_ext == 'py' or file_ext == 'go': print('backend') elif file_ext == 'swift' or file_ext == 'dart' or file_ext == 'apk': print('mobile') elif file_ext == 'pdf' or file_ext == 'docx' or file_ext == 'pptx': print('product') 317 295
  73. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 295 file_ext = input().split('.')[-1] if file_ext == 'cpp' or file_ext == 'py' or file_ext == 'go': print('backend') elif file_ext == 'swift' or file_ext == 'dart' or file_ext == 'apk': print('mobile') elif file_ext == 'pdf' or file_ext == 'docx' or file_ext == 'pptx': print('product') 317 295
  74. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 225 e = input().split('.')[-1] if e == 'cpp' or e == 'py' or e == 'go': print('backend') elif e == 'swift' or e == 'dart' or e == 'apk': print('mobile') elif e == 'pdf' or e == 'docx' or e == 'pptx': print('product') 317 295 225
  75. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 225 e = input().split('.')[-1] if e == 'cpp' or e == 'py' or e == 'go': print('backend') elif e == 'swift' or e == 'dart' or e == 'apk': print('mobile') elif e == 'pdf' or e == 'docx' or e == 'pptx': print('product') 317 295 225
  76. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 188 e = input().split('.')[-1] if e in ['cpp', 'py', 'go']: print('backend') elif e in ['swift', 'dart', 'apk']: print('mobile') elif e in ['pdf', 'docx', 'pptx']: print('product') 317 295 225 188
  77. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 188 e = input().split('.')[-1] if e in ['cpp', 'py', 'go']: print('backend') elif e in ['swift', 'dart', 'apk']: print('mobile') elif e in ['pdf', 'docx', 'pptx']: print('product') 317 295 225 188
  78. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 156 e = input()[-1] if e in ['p', 'y', 'o']: print('backend') elif e in ['t', 't', 'k']: print('mobile') elif e in ['f', 'x', 'x']: print('product') 317 295 225 188 156
  79. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 156 e = input()[-1] if e in ['p', 'y', 'o']: print('backend') elif e in ['t', 't', 'k']: print('mobile') elif e in ['f', 'x', 'x']: print('product') 317 295 225 188 156
  80. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 146 e = input()[-1] if e in ['p', 'y', 'o']: print('backend') elif e in ['t', 'k']: print('mobile') elif e in ['f', 'x']: print('product') 317 295 225 188 156 146
  81. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 146 e = input()[-1] if e in ['p', 'y', 'o']: print('backend') elif e in ['t', 'k']: print('mobile') elif e in ['f', 'x']: print('product') 317 295 225 188 156 146
  82. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 130 e = input()[-1] if e in ['p', 'y', 'o']: print('backend') elif e in ['t', 'k']: print('mobile') else: print('product') 317 295 225 188 156 146 130
  83. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 130 e = input()[-1] if e in ['p', 'y', 'o']: print('backend') elif e in ['t', 'k']: print('mobile') else: print('product') 317 295 225 188 156 146 130
  84. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 125 e = input()[-1] if e in ['t', 'k']: print('mobile') elif e in ['f', 'x']: print('product') else: print('backend') 317 295 225 188 156 146 130 125
  85. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 125 e = input()[-1] if e in ['t', 'k']: print('mobile') elif e in ['f', 'x']: print('product') else: print('backend') 317 295 225 188 156 146 130 125
  86. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 113 e = input()[-1] if e in 'tk': print('mobile') elif e in 'fx': print('product') else: print('backend') 317 295 225 188 156 146 130 125 113
  87. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 113 e = input()[-1] if e in 'tk': print('mobile') elif e in 'fx': print('product') else: print('backend') 317 295 225 188 156 146 130 125 113
  88. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 89 e = input()[-1] print('mobile' if e in 'tk' else ('product' if e in 'fx' else 'backend')) 317 295 225 188 156 146 130 125 113 89
  89. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 89 e = input()[-1] print('mobile' if e in 'tk' else ('product' if e in 'fx' else 'backend')) # 77 f=input()[-1] print('product'if f in'xf'else'mobile'if f in'tk'else'backend') 317 295 225 188 156 146 130 125 113 89 77
  90. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 89 e = input()[-1] print('mobile' if e in 'tk' else ('product' if e in 'fx' else 'backend')) # 77 f=input()[-1] print('product'if f in'xf'else'mobile'if f in'tk'else'backend') «X or Y» вместо «if / else»: # 73 f=input()[-1] print('product'*(f in'xf')or'mobile'*(f in'tk')or'backend') 317 295 225 188 156 146 130 125 113 89 77 73
  91. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 73 f=input()[-1] print('product'*(f in'xf')or'mobile'*(f in'tk')or'backend') [A,B,C][x] вместо A*(x==0) or B*(x==1) or C # 70 f=input()[-1] print(['product','mobile','backend']['xftk'.find(f)//2]) # xf:0 tk:1 pyo:-1 317 295 225 188 156 146 130 125 113 89 77 73 70
  92. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 73 f=input()[-1] print('product'*(f in'xf')or'mobile'*(f in'tk')or'backend') [A,B,C][x] вместо A*(x==0) or B*(x==1) or C # 70 f=input()[-1] print(['product','mobile','backend']['xftk'.find(f)//2]) # xf:0 tk:1 pyo:-1 # 66 print(['product','mobile','backend']['xftk'.find(input()[-1])//2]) 317 295 225 188 156 146 130 125 113 89 77 73 70 66
  93. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 66 print(['product','mobile','backend']['xftk'.find(input()[-1])//2]) 317 295 225 188 156 146 130 125 113 89 77 73 70 66
  94. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 66 print(['product','mobile','backend']['xftk'.find(input()[-1])//2]) 317 295 225 188 156 146 130 125 113 89 77 73 70 66
  95. .cpp, .py, .go --> backend .swift, .dart, .apk --> mobile

    .pdf, .docx, .pptx --> product # 66 print(['product','mobile','backend']['xftk'.find(input()[-1])//2]) # 63 print('bpmarocobkdieulncedt'[1+'xftk'.find(input()[-1])//2::3]) 317 295 225 188 156 146 130 125 113 89 77 73 70 66 63
  96. Полезная фишка 0 1 2 -3 -2 -1 s =

    'Karpuzoff' # перебираем слева направо for i in range(len(s)): print(s[i]) # перебираем справа налево for i in range(len(s)): print(s[-1-i])
  97. Полезная фишка 0 1 2 -3 -2 -1 0 1

    2 ~2 ~1 ~0 s = 'Karpuzoff' # перебираем слева направо for i in range(len(s)): print(s[i]) # перебираем справа налево for i in range(len(s)): print(s[-1-i]) for i in range(len(s)): print(s[~i]) # ~X равносильно -X-1