Bu python golf için ipuçları bir soru .
Python'da yaptığım birden fazla golfte, bir Boolean tarafından seçilen iki değişkenten birine sabit bir değer atanır. Seçilen değişkenin üzerine verilen değer yazılır ve diğeri değişmez.
17 karakter:
if b:y=z
else:x=z
Koşullu bir değer atamak kolaydır , ancak koşullu bir değişkene atamak karmaşık görünmektedir. Kaçırdığım daha kısa bir yol olup olmadığını merak ediyorum.
Bunun x,y
yerine bir liste olsaydı bu kolay olurdu L
, ancak bağlamın yazma için yeterince değişkene atıfta bulunmayı gerektirdiğini L[0]
ve L[1]
engelleyici olduğunu varsayalım . Dönüştürme işlemi çok uzun sürüyor:
20 karakter:
L=[x,y];L[b]=z;x,y=L
Bildiğim en hızlı yol exec
, tuhaf olan bir Python 2 ile :
16 karakter, Python 2:
exec"xy"[b]+"=z"
Grup seçimi daha uzun gibi görünüyor:
18, 19, 18, 18 karakter:
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
Daha kısa bir yöntem veya karakter tasarrufu optimizasyonu var mı? Sen varsayabiliriz b
olduğu 0
ya 1
, Falsey veya Truthy sadece, ve yardımcı olmadığını da veri türleri ve değerleri hakkında varsayımlarda bulunmak.
x,y=C(x,y,z,b)
(14 karakter) yapabilir ve bu uygulamalardan herhangi birini gövdesine itebilirsinizC
.