Arka fon
Küçültücüler, genellikle Web Tarayıcınıza JavaScript sunarken kullanılır. Genellikle gönderilmesi gereken bayt sayısını azaltmak için kullanılır. Bant genişliğinin kaydedilmesi bariz nedenlerle yararlıdır. Bazı insanlar obfuscaters (kasıtlı olarak kodu okumayı zorlaştırır) kullanır, ben bunlardan bahsetmiyorum.
Python 2'yi küçültecağız
Küçültme deneyimi için JavaScript veya Python kullanıp kullanmayacağımı tartışıyordum ve iki nedenden dolayı Python'a karar verdim: beyaz alan önemlidir ve bence bu ilginç bir dinamik sorunu ekleyecektir. Buna ek olarak, Python 2.7 kullanmak ()
baskı sırasında gereksiz kaldırmak gibi başka bir dinamik sağlayacaktır (örn. print("Hello world")
Vs. print"Hello world"
). Şahsen, herhangi bir dile açmayı tercih ederdim, ancak bazı diller için bu süreç pek mantıklı değil. Ve hangi dili küçültmeye karar verdiğiniz, puanınızı doğrudan etkiler (ve dil bile küçültülüp küçülemeyebilir).
gözlük
Amacınız kodu yalnızca işlevselliğini hiçbir şekilde değiştirmeyecek şekilde değiştirmek. Elbette, çıktıyı etkilemediği sürece ( kapsamı takip edin) değişken adlarını (küçültme programınızın içinde ) değiştirebilirsiniz. Size belirli bir program veriyorum, ancak tüm standart boşlukların yasak olduğu için lütfen test durumu için optimizasyon yapmayın .
Puan : Programın küçültülmesinden sonraki uzunluğu.
Girdi : Herhangi bir Python 2.7 programı (hata içermeyen)
Çıktı : Küçültülmüş bir sürüm.
Kodunuzun tüm geçerli Python 2.7 girişlerini karşılayabilmesine rağmen, etkinliğini kanıtlamak için komut dosyanızı bir şeye karşı test etmeniz gerekir.
Örnek programı görüntülemek için buraya tıklayın .
Sorunu daha ulaşılabilir kılmak
Çözümümün içinde bulunan herhangi bir kodu (aşağıda listelenmiştir) kullanmaktan veya değiştirmektan çekinmeyin. Ben teklif temel teklif işleme ile başlamak için bunu yaptım; ancak girintiye vb. genişletebilirsiniz.
Python'u küçültmenin örnek yolları
Tüm beyaz boşluk mümkün olan en düşük miktarla değiştirilebilir (Python'da sekmelerle bazı zor şeyler yapabileceğinizi kabul ediyorum , ancak bunu uygulamaya ya da uygulamamaya karar vermek için size bırakacağım).
Misal
Devamındaki:
def print_a_range(a):
for i in range(a):
print(i)
Olabilirdi:
def print_a_range(a):
for i in range(a):
print(i)
Teknik olarak, bir döngü içinde sadece bir çizgi varsa, onu daha da sıkıştırabilirsiniz:
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
Ancak, Python'daki beyaz boşluğu küçültmenin başka bir yolu var:
Devamındaki:
print ([a * 2 for a in range(20) if a % 2 == 0])
Olabilirdi:
print([a*2for a in range(20)if a%2==0])
2
Ve arasında bir boşluğa gerek olmadığını unutmayın for
. Değişken, işlevleri ve anahtar olamaz bir rakamla başlayamaz. Yani, Python yorumlayıcısı sorun değil <num><keyword>
, boşluk yok. Ayrıca )
ve arasında bir boşluk olmaması gerektiğini de unutmamalısınız if
.
Not, programın çıktısını değiştirmemelisiniz! Yani:
print"f(x)=x*2 is a great equation!"
Yukarıdaki baskı deyimi arasındaki boşluğu kaldırarak çünkü aynı kalmalıdır 2
ve is
çıkışını değiştirir.
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
içine '1'*100
izin? Davranış aynı olduğundan yapmak ister misiniz?