Ini adalah tantangan dalam mempraktikkan optimasi golf dengan Python - trik dan cara pintas yang dapat digunakan kembali untuk mengurangi beberapa karakter. Banyak yang akan terbiasa dengan pegolf Python dan menggunakan ide-ide umum dari Tips Python . Beberapa di antaranya menggunakan fitur khusus Python yang mungkin tidak Anda ketahui ada kecuali Anda pernah melihatnya, jadi lihatlah kiat-kiatnya jika Anda buntu.
Sasaran: Ada sepuluh masalah, masing-masing potongan referensi kode Python untuk Anda optimalkan dan deskripsi kode tidak. Sasaran Anda adalah menulis ulang agar lebih pendek tetapi masih setara secara fungsional.
Skor Anda, yang ingin Anda perkecil, adalah total panjang kode Anda semua snippet. Panjang cuplikan referensi adalah 150. Tiebreaker adalah posting paling awal.
Posting jawaban: Untuk setiap masalah, posting kode Anda dan jumlah karakternya. Anda dapat memposting cuplikan referensi jika Anda tidak menemukan sesuatu yang lebih pendek. Ini dimaksudkan agar Anda tidak melihat jawaban orang lain ketika Anda memposting jawaban Anda. Silakan beri tag spoiler untuk setiap masalah individu termasuk jumlah karakter individu. Anda dapat membiarkan jumlah total terungkap. Jangan ragu untuk membatalkan solusi Anda atau mengirim solusi baru yang belum rusak.
Detail tentang legalitas: Kesetaraan fungsional berarti kode dapat diganti dalam suatu program tanpa memengaruhi perilakunya (mengabaikan hal-hal seperti penggunaan memori dan prioritas operator sebagai bagian dari ekspresi). Ekspresi harus menghasilkan nilai yang setara dengan ==
. Catat itu 1.0==1==True
. Kode Anda seharusnya tidak memiliki efek samping kecuali dinyatakan lain. Saya tidak bermaksud masalah untuk menjadi versi spesifik, tetapi untuk berjaga-jaga, Anda dapat menentukan versi Python untuk setiap masalah.
Masalah 1: Tetap iterasi selama daftar L
memiliki setidaknya 7 elemen
# 16 chars
while len(L)>=7:
Masalah 2 : Periksa apakah dua mengapung x
dan y
keduanya positif.
# 11 chars
x>0 and y>0
Masalah 3 : Jika Boolean b
benar, hapus elemen pertama dari L
. Jika tidak, biarkan tidak berubah.
# 12 chars
if b:L=L[1:]
Masalah 4 : Periksa apakah semua elemen dari daftar L
angka yang tidak kosong sama. Untuk masalah ini, tidak apa-apa untuk memodifikasi daftar.
# 22 chars
all(x==L[0]for x in L)
Masalah 5 : Tambahkan nomor n
ke akhir daftar L
hanya jika L
sudah berisi nomor itu.
# 16 chars
if n in L:L+=[n]
Masalah 6 : Ekspresikan tanda pelampung x
: +1
untuk positif, 0
untuk 0, -1
untuk negatif.
# 20 chars
abs(x)/x if x else 0
Masalah 7 Lanjutkan loop selama elemen pertama L
, daftar Boolean, adalah True
. Hentikan juga jika L
kosong.
# 17 chars
while L and L[0]:
Masalah 8 : Lanjutkan loop selama n
lebih besar dari 1. Angka n
dijamin bilangan bulat positif.
# 10 chars
while n>1:
Masalah 9 : Periksa apakah bilangan bulat yang direpresentasikan sebagai string s
negatif (mis. Dimulai dengan '-').
# 9 chars
s[0]=='-'
Masalah 10 : Konversikan Boolean b
ke "Win"
/ "Lose"
, dengan True
-> "Win"
dan False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Peringatan: Spoiler di bawah, jangan gulir ke bawah jika Anda ingin menyelesaikannya sendiri.
Jika Anda hanya ingin mengetahui skor optimal untuk suatu masalah:
Masalah 1:
12
Masalah 2:
5
Masalah 3:
7
Masalah 4:
13
Masalah 5:
13
Masalah 6:
8
Masalah 7:
12
Masalah 8:
9
Masalah 9:
5
Masalah 10:
15
Jawaban:
Total:
10410199 karakterMasalah 1
Masalah 2
Masalah 3
Masalah 4
Masalah 5
Masalah 6
Masalah 7
Masalah 8
Masalah 9
Masalah 10
sumber
Ukuran total:
128122120117116115111107104Masalah 1
Tetap iterasi selama daftar
L
memiliki setidaknya 7 elemen.Masalah 2
Periksa apakah dua mengapung
x
dany
keduanya positif.Masalah 3
Jika Boolean
b
benar, hapus elemen pertama dariL
. Jika tidak, biarkan tidak berubah.Masalah 4
Periksa apakah semua elemen daftar
L
angka yang tidak kosong sama. Untuk masalah ini, tidak apa-apa untuk memodifikasi daftar.Masalah 5
Tambahkan nomor
n
ke akhir daftarL
hanya jikaL
sudah berisi nomor itu.Masalah 6
Ekspresikan tanda pelampung
x
:+1
untuk positif,0
untuk 0,-1
untuk negatif.Masalah 7
Lanjutkan lingkaran selama elemen pertama dari
L
, daftar Boolean, adalahTrue
. Hentikan juga jikaL
kosong.Masalah 8
Lanjutkan loop selama
n
lebih besar dari 1. Angkan
dijamin bilangan bulat positif.Masalah 9
Periksa apakah bilangan bulat yang direpresentasikan sebagai string
s
negatif (mis. Dimulai dengan '-').Masalah 10
Konversikan Boolean
b
ke"Win"
/"Lose"
, denganTrue
->"Win"
danFalse
->"Lose"
.sumber
Total:
106104102 karakterMasalah 1
Masalah 2
Masalah 3
Masalah 4
Masalah 5
Masalah 6
Masalah 7
Masalah 8
Masalah 9
Masalah 10
sumber
b
0, 1 atau 2, dan yang dapat Anda lakukan adalah(b-1)*"Hello"or b*"Goodbye"or"Good Afternoon"
)~b*"Hello"
.["Good Afternoon","Goodbye","Hello"][b]
akan menang: PTotal: 99 byte
Masalah 1
Masalah 2
Masalah 3
Masalah 4
Masalah 5
Masalah 6
Masalah 7
Masalah 8
Masalah 9
Masalah 10
sumber
Total: 106
sumber
[L[0]]
?Total ukuran:
# 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10123 121 120116sumber
Total: 121
Upaya pertama:
Masalah 1
Masalah 2
Masalah 3
Masalah 4
Masalah 5
Masalah 6
Masalah 7
Masalah 8
Masalah 9
Masalah 10
sumber