Latar Belakang
Minifier digunakan, biasanya, saat menyajikan JavaScript ke Browser Web Anda. Ini biasanya digunakan untuk mengurangi jumlah byte yang harus dikirim. Menghemat bandwidth berguna untuk alasan yang jelas. Beberapa orang menggunakan obfuscaters (yang sengaja membuat kode lebih sulit dibaca), saya tidak membicarakannya.
Kami akan memperkecil Python 2
Saya berdebat tentang apakah menggunakan JavaScript atau Python untuk pengalaman minifying atau tidak, dan saya memutuskan pada Python karena dua alasan: ruang putih penting dan saya pikir itu akan menambah dinamika masalah yang menarik. Selain itu, menggunakan Python 2.7 akan memberikan dinamika lain, seperti menghapus berlebihan ()
saat mencetak (yaitu print("Hello world")
vs. print"Hello world"
). Secara pribadi, saya lebih suka membukanya untuk bahasa apa pun, tetapi untuk beberapa bahasa proses ini tidak masuk akal. Dan, bahasa apa yang Anda putuskan untuk dikurangi akan berdampak langsung pada skor Anda (dan jika bahasa itu bahkan dapat diperkecil).
Spesifikasi
Tujuan Anda adalah hanya memodifikasi kode dengan cara yang tidak akan mengubah fungsinya dengan cara apa pun. Anda dapat, tentu saja, mengubah nama variabel (di dalam program minifying Anda) selama itu tidak mempengaruhi output (melacak cakupan ). Meskipun saya memberi Anda program khusus, tolong jangan optimalkan untuk kasus uji karena semua lubang standar dilarang.
Nilai : panjang program setelah Anda memperkecilnya.
Input : Setiap program Python 2.7 (yang tidak mengandung kesalahan)
Output : Versi yang diperkecil.
Meskipun kode Anda harus dapat mengakomodasi semua input Python 2.7 yang valid, Anda perlu menguji skrip Anda terhadap sesuatu untuk membuktikan efektivitasnya.
Klik di sini untuk melihat contoh program.
Membuat masalah lebih mudah didekati
Jangan ragu untuk menggunakan atau memodifikasi kode apa pun yang ditemukan di dalam solusi saya (tercantum di bawah). Saya melakukan ini untuk membantu Anda memulai dengan penanganan penawaran dasar quote; Namun, Anda dapat memperluasnya ke lekukan, dan lain-lain.
Contoh cara untuk memperkecil Python
Semua ruang putih dapat diganti dengan jumlah minimum yang mungkin (saya akui bahwa dengan Python Anda dapat melakukan beberapa hal rumit dengan tab , tetapi saya akan menyerahkannya kepada Anda untuk memutuskan apakah akan menerapkannya atau tidak).
Contoh
Pengikut:
def print_a_range(a):
for i in range(a):
print(i)
Bisa jadi:
def print_a_range(a):
for i in range(a):
print(i)
Secara teknis, jika hanya ada satu baris di dalam satu loop, Anda dapat lebih menekannya:
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
Namun, ada cara lain Anda dapat meminimalkan ruang putih di Python:
Pengikut:
print ([a * 2 for a in range(20) if a % 2 == 0])
Bisa jadi:
print([a*2for a in range(20)if a%2==0])
Perhatikan, bahwa tidak perlu ruang antara 2
dan for
. Variabel, fungsi, dan kata kunci tidak dapat dimulai dengan angka. Jadi, juru bahasa Python tidak apa-apa <num><keyword>
, tidak ada ruang. Anda juga harus memperhatikan bahwa tidak ada jarak antara )
dan if
.
Catatan, Anda tidak boleh mengubah output program! Begitu:
print"f(x)=x*2 is a great equation!"
Pernyataan cetak di atas harus tetap sama karena menghilangkan ruang di antara 2
dan is
akan mengubah output.
sumber
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
menjadi'1'*100
diizinkan? Perlu dilakukan karena perilaku yang sama?Jawaban:
Skor Python 2.7, 2013
Program ini dapat digunakan sebagai referensi, dan Anda diizinkan untuk mengambil kode berikut dan memodifikasinya lalu mempostingnya di solusi Anda sendiri.
Kalau dipikir-pikir, saya mungkin seharusnya menggunakan regex untuk penanganan kutipan juga, tapi saya pikir dalam kondisi saat ini mungkin cukup untuk melompati orang ke dalam masalah.
Mengapa saya memilih Python 2.7: Saya pikir akan lebih mudah untuk menguji apakah saya membuat program macet melalui
exec
kata kunci.Kode ini membuat program sebagai
in.txt
.Saya pikir saya setidaknya harus mendapatkan bola bergulir untuk siapa pun yang ingin berpartisipasi dengan menulis parser kutipan (yang juga terjadi untuk menangani komentar) dan contoh singkat tentang bagaimana regex, ketika dikombinasikan dengan parser kutipan benar-benar dapat mengubah permainan dalam hal kompleksitas masalah ini.
Catatan: masih ada banyak ruang untuk perbaikan dalam minifier ini. Seperti Anda bisa bermain-main dengan lekukan, nama variabel, dan menghapus tanda kurung ketika sedang digunakan kata kunci saya, suka
print
atauyield
.Output dari program:
sumber