Anda muak dengan semua tantangan codegolf. Karenanya, Anda memutuskan untuk menulis sebuah program yang secara otomatis golf beberapa kode Python untuk Anda. Ada 3 kasus uji:
print quickSort([0,7,3,-1,8,10,57,2])
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
for i in arr:
if i < pivot:
less.append(i)
elif i > pivot:
more.append(i)
else:
pivotList.append(i)
less = quickSort(less)
more = quickSort(more)
return less + pivotList + more
for i in xrange(1, 101):
if i % 15 == 0:
print "FizzBuzz"
elif i % 3 == 0:
print "Fizz"
elif i % 5 == 0:
print "Buzz"
else:
print i
from sys import argv
def randomGenerator(seed=1):
max_int32 = (1 << 31) - 1
seed = seed & max_int32
while True:
seed = (seed * 214013 + 2531011) & max_int32
yield seed >> 16
def deal(seed):
nc = 52
cards = range(nc - 1, -1, -1)
rnd = randomGenerator(seed)
for i, r in zip(range(nc), rnd):
j = (nc - 1) - r % (nc - i)
cards[i], cards[j] = cards[j], cards[i]
return cards
def show(cards):
l = ["A23456789TJQK"[c / 4] + "CDHS"[c % 4] for c in cards]
for i in range(0, len(cards), 8):
print " ", " ".join(l[i : i+8])
if __name__ == '__main__':
seed = int(argv[1]) if len(argv) == 2 else 11982
print "Hand", seed
deck = deal(seed)
show(deck)
Aturan:
Program Anda tidak boleh menargetkan kode yang saya poskan secara khusus, dan harus bekerja dengan kode Python 2 apa pun. Saya berhak untuk mengubah kode sumber menjadi codegolfed. Anda dapat berasumsi bahwa tidak ada string multi-line (jadi Anda tidak perlu membuat parser full-blown), dan bahwa penduduk lokal () tidak dipanggil.
Output dari program Anda harus dijalankan dengan cara yang sama dengan kode sumber asli. (Yaitu, itu harus menghasilkan output yang sama. Nama variabel dan konstruksi bahasa dapat diubah, selama output tetap sama)
Anda dapat menggunakan STDIO atau File untuk melakukan input / output kode sumber Anda.
Skor Anda akan menjadi jumlah byte dari output program Anda.
(Kode yang tercantum di atas diambil dari http://rosettacode.org/ di bawah Lisensi Dokumentasi Bebas GNU 1.2 )
if __name__ == '__main__':
akan memengaruhi perilaku dalam beberapa konteks tetapi tidak yang lain. Sebagai contoh lain, jika input yang tidak disatukan mengasumsikan bahwa ia membaca int dari stdin dan melempar satu jenis pengecualian jika diberi sesuatu yang lain, dapatkah input yang golf melemparkan jenis pengecualian yang berbeda jika diberikan non-integer?random_long_variable=0;print locals()
:?Jawaban:
Python 2.7, 794
Saya bermaksud membangun minifier untuk Python untuk sementara waktu, jadi ini adalah kesempatan yang baik untuk menyelidiki masalahnya.
Program ini menggunakan campuran analisis ekspresi reguler, dan operasi parser Python. Ruang putih diminimalkan. Variabel yang didefinisikan oleh pengguna digantikan oleh variabel huruf tunggal (yang tidak digunakan!). Akhirnya
while True
pernyataan itu dimasukkan ke dalam diet.Ketiga test case semuanya memverifikasi berjalan dengan benar. Saya bisa membayangkan beberapa contoh patologis yang dapat mengakibatkan kesalahan dalam kode yang dihasilkan tetapi algoritma harus kuat dalam sebagian besar keadaan.
Hasil
Keluaran
Kode
sumber
sed, 1074 (turun dari 1390)
Jenis jawaban yang sangat ringan, rendah tergantung buah, untuk membuat bola menggelinding:
Ganti
<--TAB-->
dengan TABkarakter asliKelemahan yang jelas:
Karena kita dapat mengasumsikan tidak ada string multi-garis, maka kita hanya menghapus spasi di depan / belakang dari operator jika tidak ada
'
atau"
pada jalur yang diberikan. Ini bisa ditingkatkan, tetapi <bergumam tentang sed regex selalu menjadi serakah> .Tes sebagai berikut:
sumber
Python 3.4, 1134
Program ini seharusnya bekerja dengan baik untuk sebagian besar program. Anehnya, test case Sp3000 jauh lebih mudah dioptimalkan untuk program saya daripada program Anda. Input diterima melalui file yang ditentukan dalam argumen pertama. File aktual dimodifikasi.
Bagaimana itu bekerja:
Pertama, program ini memeriksa untuk melihat apakah program Anda berinteraksi dengan pengguna sama sekali atau menggunakan acak. Jika ya, program tidak dimodifikasi. Selanjutnya, program dijalankan. Program ini kemudian diganti dengan
print "output"
. Akhirnya, jika program lebih pendek dari outputnya, itu tidak dimodifikasi.Program Sp3000, dioptimalkan:
Program bonus super Sp3000, dioptimalkan:
Versi yang dioptimalkan hanya mematikan 0,001% dari waktu.
sumber
argv
,input
danrandom
yang akan dipecahkan oleh kode Anda. ;)print id(0)
itu bagus.