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,yyerine 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 bolduğu 0ya 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.