Tóm tắt cú pháp chơi gôn cây: FizzBuzz, Python


12

Tóm lược

Triển khai FizzBuzz trong Python, với ít mã thông báo nhất có thể.

Thử thách

Viết chương trình in các số thập phân từ 1 đến 100. Nhưng đối với bội số của ba bản in Fizz, thay vì số lượng và cho bội số của năm bản in Buzz Buzz. Đối với các số là bội số của cả ba và năm bản in FizzBuzz '. Các chương trình phải được viết bằng một số phiên bản của Python.

Để biết thêm chi tiết, xem 1, 2, Fizz, 4, Buzz

Chấm điểm

Điểm của bạn sẽ bằng số lượng nút trong cây cú pháp trừu tượng của mã của bạn, như được báo cáo bởi chương trình này cho Python 3 hoặc chương trình này cho Python 2 . Để chạy các chương trình, cung cấp tên tệp mã của bạn làm đối số dòng lệnh cho chương trình. Ví dụ:

python simple_counter.py fizzbuzz.py

Các chương trình này dựa trên mô-đun ast của Python . Nếu bạn có bất kỳ khó khăn, cho tôi biết.

Để ngăn các giải pháp tầm thường, chẳng hạn như thực hiện một chuỗi dài với chương trình thực tế hoặc mã hóa đầu ra, có một số hạn chế bổ sung:

  • Không có mã thông báo trong mã của bạn có thể dài hơn 15 ký tự. Các chương trình trên sẽ kiểm tra yêu cầu này cho bạn. Lưu ý rằng để dễ thực hiện, các chương trình trên sẽ tính các nhận xét dưới dạng mã thông báo.

  • Thực thi / đánh giá mã bị cấm.

Nếu bạn có câu hỏi là liệu cái gì được cho phép, hãy hỏi tôi.

Ghi điểm Heuristic

Các quy tắc sau đây thường đủ để tính điểm của chương trình của bạn:

  • Khối báo cáo là 1 điểm: if, for ... in ..., while, else,, vv

  • Báo cáo độc lập là 1 điểm: printbằng Python 2, break, passvv

  • Biến là 2 điểm

  • Literals đơn thẻ bài 1 điểm: 2131, "Hello, world!",True

  • Hàm là 3 điểm (2 để sử dụng biến, thêm 1): printtrong Python 3 range, v.v.

  • Các nhà khai thác là 2 điểm: +, *, %, and, not,, vv

  • = là 1 điểm

  • Nhiệm vụ tăng cường là 2 điểm: +=, |=vv

  • Dấu ngoặc đơn, thụt lề, vv là 0 điểm.

  • Một dòng chứa một biểu thức, trái ngược với một bài tập hoặc một biểu thức, là + 1 điểm.

  • Có mã ở tất cả là 1 điểm.

Thử thách:

Điểm thấp nhất sẽ thắng. Chúc may mắn!


1
Tôi thích phong cách này. Bạn phải đi cho các chương trình đơn giản thay vì chỉ những chương trình ngắn.
Esolanging Fruit

1
Chúng ta có thực sự cần mã thách thức ast-golf cho việc này không? Đây không phải là một hình thức cụ thể của golf-code-nguyên tử sao?
Martin Ender

@MartinEnder Lý do tôi làm theo cách này là vì văn bản thẻ cho golf nguyên tử có ghi "Golf mã nguyên tử được ghi bằng số lượng mã thông báo của chương trình của bạn" và điều đó không giống như thế này, mặc dù có lẽ chỉ đẹp số lượng nhỏ.
isaacg

Câu trả lời:


6

33

Con trăn 2

for i in range(1,101):print[i,'Fizz','Buzz','FizzBuzz'][int(`300102100120100`[i%15])]

2

46

for x in range(100):print('Fizz'*(x%3>1)+'Buzz'*(x%5>3)or str(x+1))

Không thể x + 1 không được xâu chuỗi trong python 3?
Lemon phá hủy

1
@DeststallibleWateriwi Python 3 không có backticks reprtheo như tôi nhớ.
Kade

2
In có thể lấy một số nguyên làm đối số của nó, là quan điểm của tôi
Lemon

2

39 34

for i in range(1,101):print [i,'Fizz','Buzz','FizzBuzz'][19142723>>2*(i%15)&3]

0

Con trăn 2, 36

for i in range(1, 101):
    print (not i % 3) * "Fizz" + (not i % 5) * "Buzz" or i

Tôi nghĩ rằng đây là cách tiếp cận ngắn nhất không sử dụng số lượng lớn / chuỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.