Ini adalah pertanyaan tips untuk bermain golf di python .
Dalam banyak golf yang saya lakukan dengan Python, nilai tetap diberikan ke salah satu dari dua variabel yang dipilih oleh Boolean. Variabel yang dipilih ditimpa oleh nilai yang diberikan, dan yang lainnya tidak berubah.
17 karakter:
if b:y=z
else:x=z
Menetapkan nilai kondisional itu mudah , tetapi menetapkan ke variabel kondisional tampaknya kikuk. Saya bertanya-tanya apakah ada cara yang lebih pendek saya hilang.
Ini akan mudah jika x,y
bukan daftar L
, tetapi menganggap konteksnya memerlukan merujuk pada variabel cukup bahwa menulis L[0]
dan L[1]
dilarang. Konversi terlalu lama:
20 karakter:
L=[x,y];L[b]=z;x,y=L
Cara tercepat yang saya tahu adalah dengan Python 2 exec
, yang aneh:
16 karakter, Python 2:
exec"xy"[b]+"=z"
Memilih Tuple tampaknya lebih lama:
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
Apakah ada metode yang lebih pendek atau optimasi hemat karakter? Anda dapat berasumsi b
adalah 0
atau 1
, bukan hanya Falsey atau Truthy, dan juga membuat asumsi tentang tipe dan nilai data jika itu membantu.
x,y=C(x,y,z,b)
(14 karakter) dan mendorong salah satu dari implementasi ini ke dalam tubuhC
.Jawaban:
12 karakter / tugas + 9 karakter biaya overhead
Perhatikan bahwa ini hanya berfungsi pada lingkup global, tidak berfungsi di dalam suatu fungsi.
sumber
V
pembaruan secara otomatis, tanpa perlu memanggil fungsi lagi. Jadi ini impas denganexec
dua penggunaan. Juga, hanya melakukanvars()["xy"[b]]=z
adalah 17 karakter, yang merupakan yang terbaik yang kami miliki sejauh ini untuk Python 3, tanpa aliran kontrolif/else
yang dapat menyebabkan masalah.vars()["xy"[b]]=z
:?14 karakter, Python 2
Dua variabel tersebut adalah
y
danxy
. Jika b = 0, ini ditetapkanxy=z
. Jika b = 1, ini ditetapkany=z
. Ini akan sia-sia jikaxy
digunakan tidak lebih dari satu kali di tempat lain dalam kode.sumber
xy
setidaknya dua kali, untuk tugas awalnya, dan membacanya setelah itu.15 karakter, Python 2
Mengharuskan bahwa variabel dipanggil
F
danT
bukannyax
dany
, dan itub is False
ataub is True
, daripada menjadi angka yang sama0
atau1
.Ini menyimpan char dari
"xy"[b]
alih-alih mengambil huruf pertama dari representasi stringb
, yaituT
atauF
.sumber
a
danr
,l
danu
ataus
dane
, dengan indeks yang sesuai.