Bu Python'da golf optimizasyonu yapma zorluğudur - tekrar kullanılabilir püf noktaları ve birkaç karakterden kurtulmak için kısayollar. Birçoğu Python golfçülerine aşina olacak ve Python İpuçları'ndan ortak fikirleri kullanacaktır . Bunların bazıları, görmediğiniz sürece var olamayacağınızı bildiğiniz Python'a özgü özellikler kullanır, bu nedenle takılı kalmışsanız ipuçlarına bakın.
Hedef: On tane sorun var, her biri Python kodunu optimize etmeniz için bir referans pasajı ve kodun bir açıklamasını yapıyor. Amacınız, daha kısa ama yine de işlevsel olarak eşdeğer olması için yeniden yazmak.
En aza indirmeye çalıştığınız puanınız, tüm snippet'lerin kodunuzun toplam uzunluğudur. Referans parçacıklarının uzunluğu 150'dir. Tiebreaker en erken mesajdır.
Cevapları yazma: Her problem için kodunuzu ve karakter sayısını girin. Daha kısa bir şey bulamazsanız referans pasajını gönderebilirsiniz. Sizinkini gönderirken başkalarının cevaplarına bakmamanız amaçlanmıştır. Lütfen bireysel karakter sayısı da dahil olmak üzere her problemi spoiler-etiketleyin. Toplam sayıyı açık bırakabilirsiniz. Çözümünüzü dağıtmaktan veya yeni dağıtılmamış çözümleri göndermek için şimdi çekinmeyin.
Yasallık ile ilgili detaylar: İşlevsel denklik, kodun bir programda davranışını etkilemeden değiştirilebileceği anlamına gelir (bellek kullanımı ve bir ifadenin parçası olarak operatör önceliği gibi şeyler dikkate alınmaz). İfadeler, eşdeğerde değerler üretmelidir ==
. Bunu not al 1.0==1==True
. Aksi belirtilmedikçe, kodunuzun hiçbir yan etkisi olmamalıdır. Sorunların sürüme özgü olmasını istemiyorum, ancak her durumda, her sorun için bir Python sürümü belirleyebilirsiniz.
Sorun 1: Listede L
en az 7 öğe bulunduğundan yinelemeye devam et
# 16 chars
while len(L)>=7:
Sorun 2 : İki yüzen olmadığını kontrol edin x
ve y
her ikisi de olumludur.
# 11 chars
x>0 and y>0
Sorun 3 : Boolean b
doğruysa, ilk öğesini kaldırın L
. Aksi takdirde, değişmeden bırakın.
# 12 chars
if b:L=L[1:]
Sorun 4 : Boş olmayan bir L
numara listesinin tüm öğelerinin eşit olup olmadığını kontrol edin . Bu sorun için, listeyi değiştirmek sorun değil.
# 22 chars
all(x==L[0]for x in L)
Sorun 5 : n
Listenin sonuna L
yalnızca L
bu numarayı içeriyorsa bir numara ekleyin .
# 16 chars
if n in L:L+=[n]
Problem 6 : Şamandıranın işaretini ifade edin x
: +1
pozitif 0
için, 0 -1
için, negatif için.
# 20 chars
abs(x)/x if x else 0
Problem 7 Bir L
Boolean listesinin ilk elemanı olduğu sürece bir döngüye devam edin True
. Ayrıca L
boşsa durdurun .
# 17 chars
while L and L[0]:
Sorun 8 : n
1'den büyük olduğu sürece bir döngüye devam edin . Sayının n
pozitif bir tamsayı olduğu garanti edilir.
# 10 chars
while n>1:
Sorun 9 : Bir dizge olarak temsil edilen bir tamsayının s
negatif olup olmadığını kontrol edin (yani '-' ile başlar).
# 9 chars
s[0]=='-'
Sorun 10 : Bir Boole dönüştürme b
için "Win"
/ "Lose"
ile, True
-> "Win"
ve False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Uyarı: Aşağıdaki Spoiler, bunları kendiniz çözmek istiyorsanız aşağı kaydırmayın.
Sadece bir problem için en uygun puanı bilmek istiyorsanız:
Sorun 1:
12
Sorun 2:
5
Sorun 3:
7
Problem 4:
13
Sorun 5:
13
Sorun 6:
8
Sorun 7:
12
Sorun 8:
9
Sorun 9:
5
Sorun 10:
15