To jest wskazówka dotycząca gry w golfa w pythonie .
W wielu golfach, które zrobiłem w Pythonie, stała wartość jest przypisywana do jednej z dwóch zmiennych wybranych przez Boolean. Wybrana zmienna jest nadpisywana przez podaną wartość, a druga pozostaje niezmieniona.
17 znaków:
if b:y=z
else:x=z
Przypisywanie wartości warunkowej jest łatwe , ale przypisywanie do zmiennej warunkowej wydaje się niewygodne. Zastanawiam się, czy brakuje mi krótszej drogi.
Byłoby to łatwe, jeśli x,y
były, a nie lista L
, ale zakładamy, że kontekst wymaga odnosząc się do zmiennych tyle, że pisanie L[0]
i L[1]
są wygórowane. Konwersja trwa zbyt długo:
20 znaków:
L=[x,y];L[b]=z;x,y=L
Najszybszy sposób, jaki znam, to użycie Pythona 2 exec
, co jest dziwne:
16 znaków, Python 2:
exec"xy"[b]+"=z"
Wybór krotek wydaje się dłuższy:
18, 19, 18, 18 znaków:
x,y=b*(x,z)or(z,y)
x,y=[z,x,y,z][b::2]
y,x=[y,z,x][b:b+2]
y,x,*_=[y,z,x][b:] # Python 3
Czy istnieje krótsza metoda lub optymalizacja oszczędzania znaków? Można założyć, b
jest 0
lub 1
nie tylko Falsey lub Truthy, a także założenia dotyczące typów danych i wartości, czy to pomaga.
x,y=C(x,y,z,b)
(14 znaków) i wcisnąć dowolną z tych implementacji do ciałaC
.