Це завдання практикувати оптимізацію гольфу в Python - трюки для багаторазового використання та ярлики для гоління кількох символів. Багато хто буде знайомий гольфістам в Python і використовуватимуть загальні ідеї з Поради Python . Деякі з них використовують специфічні для Python функції, які ви, можливо, не знаєте, існують, якщо ви їх не бачили, тому подивіться поради, якщо ви застрягли.
Мета: Є десять проблем, кожен посилальний фрагмент коду Python для вас оптимізується, а опис коду - це. Ваша мета - переписати її, щоб вона була коротшою, але все-таки функціонально еквівалентною.
Ваш показник, який ви намагаєтеся мінімізувати, - це загальна довжина коду всіх фрагментів. Довжина опорних фрагментів - 150. Tiebreaker - це найдавніший пост.
Відповіді на повідомлення: для кожної проблеми розмістіть свій код та кількість символів. Ви можете опублікувати опорний фрагмент, якщо ви не знайшли щось коротше. Мається на увазі, що ви не дивитесь на відповіді інших, коли публікуєте свої. Будь ласка, позначте спойлер кожної окремої проблеми, включаючи кількість індивідуальних символів. Ви можете залишити загальну кількість розкритих. Не соромтеся зараз розкручувати рішення або розміщувати нові неширокі рішення.
Деталі щодо законності: Функціональна еквівалентність означає, що код можна замінити в програмі, не впливаючи на його поведінку (ігнорування таких речей, як використання пам'яті та пріоритет оператора як частина вираження). Вирази повинні створювати значення, еквівалентні ==
. Зауважте, що 1.0==1==True
. Ваш код не повинен мати побічних ефектів, якщо не зазначено інше. Я не маю на увазі, що проблеми мають залежати від версії, але про всяк випадок ви можете вказати версію Python для кожної проблеми.
Проблема 1: Продовжуйте повторювати, поки список L
містить щонайменше 7 елементів
# 16 chars
while len(L)>=7:
Проблема 2 : Перевірте, чи два плавають x
і y
чи обидва вони позитивні.
# 11 chars
x>0 and y>0
Проблема 3 : Якщо Boolean b
вірно, видаліть перший елемент L
. В іншому випадку залиште його без змін.
# 12 chars
if b:L=L[1:]
Завдання 4 : Перевірте, чи всі елементи не порожнього списку L
чисел рівні. Для цієї проблеми в порядку змінити список.
# 22 chars
all(x==L[0]for x in L)
Проблема 5 : Додайте число n
до кінця списку, L
лише якщо воно L
вже містить.
# 16 chars
if n in L:L+=[n]
Завдання 6 : Висловіть знак поплавця x
: +1
за позитивне, 0
за 0, -1
за негативне.
# 20 chars
abs(x)/x if x else 0
Задача 7 Продовжуйте цикл до тих пір, поки є перший елемент L
списку булевих True
. Також зупиніться, якщо L
порожній.
# 17 chars
while L and L[0]:
Завдання 8 : Продовжуйте цикл до тих пір, поки він n
не перевищує 1. Число n
гарантується як натуральне число.
# 10 chars
while n>1:
Проблема 9 : Перевірте, чи є ціле число, представлене у вигляді рядка s
, негативним (тобто починається з '-').
# 9 chars
s[0]=='-'
Проблема 10 : Перетворити булеве значення b
в "Win"
/ "Lose"
, з True
-> "Win"
і False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Попередження: Спойлери нижче, не прокручуйте вниз, якщо ви хочете їх вирішити самостійно.
Якщо ви просто хочете знати оптимальний бал для проблеми:
Проблема 1:
12
Проблема 2:
5
Проблема 3:
7
Проблема 4:
13
Проблема 5:
13
Проблема 6:
8
Проблема 7:
12
Проблема 8:
9
Завдання 9:
5
Проблема 10:
15