Đây là một thách thức của việc thực hành tối ưu hóa golf trong Python - các thủ thuật và phím tắt có thể sử dụng lại để loại bỏ một vài ký tự. Nhiều người sẽ quen thuộc với những người chơi gôn Python và sử dụng những ý tưởng phổ biến từ Mẹo Python . Một số trong số này sử dụng các tính năng dành riêng cho Python mà bạn có thể không biết tồn tại trừ khi bạn nhìn thấy chúng, vì vậy hãy xem các mẹo nếu bạn bị mắc kẹt.
Mục tiêu: Có mười vấn đề, mỗi đoạn mã tham chiếu của mã Python để bạn tối ưu hóa và mô tả mã. Mục tiêu của bạn là viết lại nó ngắn hơn nhưng vẫn tương đương về chức năng.
Điểm số của bạn, mà bạn đang cố gắng giảm thiểu, là tổng độ dài mã của bạn tất cả các đoạn. Độ dài của đoạn trích tham chiếu là 150. Tiebreaker là bài đăng sớm nhất.
Gửi câu trả lời: Đối với mỗi vấn đề, hãy đăng mã của bạn và số ký tự của nó. Bạn có thể đăng đoạn tham chiếu nếu bạn không tìm thấy nội dung ngắn hơn. Nó dự định rằng bạn không nhìn vào câu trả lời của người khác khi bạn đăng bài của bạn. Vui lòng spoiler-tag từng vấn đề riêng lẻ bao gồm cả số lượng ký tự riêng lẻ. Bạn có thể để lại tổng số tiết lộ. Bây giờ hãy thoải mái hủy bỏ giải pháp của bạn hoặc đăng các giải pháp mới chưa bị phá hỏng.
Chi tiết về tính hợp pháp: Tương đương về chức năng có nghĩa là mã có thể được thay thế trong một chương trình mà không ảnh hưởng đến hành vi của nó (bỏ qua những thứ như sử dụng bộ nhớ và ưu tiên toán tử là một phần của biểu thức). Biểu thức sẽ tạo ra các giá trị tương đương bởi ==
. Lưu ý rằng 1.0==1==True
. Mã của bạn sẽ không có tác dụng phụ trừ khi có quy định khác. Tôi không có ý định các vấn đề cụ thể theo phiên bản, nhưng chỉ trong trường hợp, bạn có thể chỉ định một phiên bản Python cho từng vấn đề.
Vấn đề 1: Tiếp tục lặp lại miễn là danh sách L
có ít nhất 7 yếu tố
# 16 chars
while len(L)>=7:
Vấn đề 2 : Kiểm tra xem hai phao x
và y
cả hai đều dương.
# 11 chars
x>0 and y>0
Vấn đề 3 : Nếu Boolean b
là đúng, loại bỏ phần tử đầu tiên của L
. Nếu không, hãy để nó không thay đổi.
# 12 chars
if b:L=L[1:]
Bài 4 : Kiểm tra xem tất cả các phần tử của danh sách L
số không trống có bằng nhau không. Đối với vấn đề này, bạn có thể sửa đổi danh sách.
# 22 chars
all(x==L[0]for x in L)
Vấn đề 5 : Nối một số n
vào cuối danh sách L
chỉ khi L
đã chứa số đó.
# 16 chars
if n in L:L+=[n]
Bài 6 : Thể hiện dấu phao x
: +1
cho dương, 0
cho 0, -1
cho âm.
# 20 chars
abs(x)/x if x else 0
Bài toán 7 Tiếp tục một vòng lặp miễn là phần tử đầu tiên của L
, một danh sách Booleans, là True
. Cũng dừng lại nếu L
trống.
# 17 chars
while L and L[0]:
Bài 8 : Tiếp tục một vòng lặp miễn n
là lớn hơn 1. Số n
được đảm bảo là số nguyên dương.
# 10 chars
while n>1:
Bài 9 : Kiểm tra xem một số nguyên được biểu thị dưới dạng chuỗi s
có âm hay không (nghĩa là bắt đầu bằng '-').
# 9 chars
s[0]=='-'
Bài 10 : Chuyển đổi Boolean b
thành "Win"
/ "Lose"
, với True
-> "Win"
và False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Cảnh báo: Spoiler bên dưới, không cuộn xuống nếu bạn muốn tự giải quyết chúng.
Nếu bạn chỉ muốn biết điểm tối ưu cho một vấn đề:
Vấn đề 1:
12
Vấn đề 2:
5
Vấn đề 3:
7
Vấn đề 4:
13
Vấn đề 5:
13
Vấn đề 6:
số 8
Vấn đề 7:
12
Vấn đề 8:
9
Vấn đề 9:
5
Vấn đề 10:
15