To wyzwanie polegające na ćwiczeniu optymalizacji golfa w Pythonie - sztuczki i skróty wielokrotnego użytku do golenia kilku postaci. Wielu zna golfistów Python i korzysta ze wspólnych pomysłów z Python Tips . Niektóre z nich używają specyficznych dla Pythona funkcji, o których istnieniu możesz nie wiedzieć, chyba że je widziałeś, więc spójrz na wskazówki, jeśli utkniesz.
Cel: Istnieje dziesięć problemów, każdy z nich to fragment referencyjny kodu Pythona, który można zoptymalizować, a także opis kodu. Twoim celem jest przepisanie go na krótszy, ale wciąż równoważny funkcjonalnie.
Twój wynik, który próbujesz zminimalizować, to całkowita długość kodu wszystkich fragmentów. Długość fragmentów referencyjnych wynosi 150. Tiebreaker jest najwcześniejszym postem.
Publikowanie odpowiedzi: Dla każdego problemu opublikuj swój kod i liczbę jego znaków. Możesz opublikować fragment referencyjny, jeśli nie znalazłeś czegoś krótszego. Celem jest, abyś nie patrzył na odpowiedzi innych, gdy publikujesz swoje. Proszę oznaczyć spoilerem każdy problem, w tym liczbę poszczególnych znaków. Możesz pozostawić całkowitą liczbę ujawnioną. Zapraszam teraz do rozpakowywania swojego rozwiązania lub publikowania nowych nieskażonych rozwiązań.
Szczegóły dotyczące legalności: równoważność funkcjonalna oznacza, że kod można zastąpić w programie bez wpływu na jego zachowanie (ignorując takie rzeczy, jak użycie pamięci i pierwszeństwo operatora jako część wyrażenia). Wyrażenia powinny dawać wartości równoważne ==
. Zauważ, że 1.0==1==True
. Twój kod nie powinien powodować żadnych skutków ubocznych, chyba że zaznaczono inaczej. Nie zamierzam, aby problemy były specyficzne dla wersji, ale na wszelki wypadek możesz określić wersję Pythona dla każdego problemu.
Problem 1: Powtarzaj, dopóki lista L
zawiera co najmniej 7 elementów
# 16 chars
while len(L)>=7:
Problem 2 : Sprawdź, czy dwa zmiennoprzecinkowe x
i y
oba są dodatnie.
# 11 chars
x>0 and y>0
Problem 3 : Jeśli wartość logiczna b
jest prawdą, usuń pierwszy element L
. W przeciwnym razie pozostaw to bez zmian.
# 12 chars
if b:L=L[1:]
Problem 4 : Sprawdź, czy wszystkie elementy niepustej listy L
liczb są równe. W przypadku tego problemu można zmodyfikować listę.
# 22 chars
all(x==L[0]for x in L)
Problem 5 : Dołącz numer n
na końcu listy L
tylko wtedy, gdy L
już zawiera ten numer.
# 16 chars
if n in L:L+=[n]
Problem 6 : Wyraź znak liczby zmiennoprzecinkowej x
: +1
dla wartości dodatniej, 0
dla wartości 0, -1
dla wartości ujemnej.
# 20 chars
abs(x)/x if x else 0
Problem 7 Kontynuuj pętlę, dopóki jest pierwszy element L
listy booleanów True
. Zatrzymaj także, jeśli L
jest pusty.
# 17 chars
while L and L[0]:
Problem 8 : Kontynuuj pętlę, dopóki n
jest ona większa niż 1. n
Gwarantowana liczba jest dodatnią liczbą całkowitą.
# 10 chars
while n>1:
Problem 9 : Sprawdź, czy liczba całkowita reprezentowana przez ciąg s
jest ujemna (tzn. Zaczyna się od „-”).
# 9 chars
s[0]=='-'
Problem 10 : Konwertuj wartość logiczną b
na "Win"
/ "Lose"
, używając True
-> "Win"
i False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Ostrzeżenie: spoilery poniżej, nie przewijaj w dół, jeśli chcesz je rozwiązać samodzielnie.
Jeśli chcesz poznać optymalny wynik problemu:
Problem 1:
12
Problem 2:
5
Problem 3:
7
Problem 4:
13
Problem 5:
13
Problem 6:
8
Problem 7:
12
Problem 8:
9
Problem 9:
5
Problem 10:
15