บทคัดย่อการเล่นกอล์ฟแผนภูมิต้นไม้: FizzBuzz, Python


12

สรุป

ใช้ FizzBuzz ใน Python พร้อมกับโทเค็นที่น้อยที่สุดที่เป็นไปได้

ท้าทาย

เขียนโปรแกรมที่พิมพ์ตัวเลขทศนิยมตั้งแต่ 1 ถึง 100 แต่สำหรับทวีคูณของสามพิมพ์ "Fizz" แทนจำนวนและสำหรับทวีคูณของห้าพิมพ์ "Buzz" สำหรับตัวเลขที่เป็นทวีคูณของทั้งสามและห้าพิมพ์“ FizzBuzz” โปรแกรมจะต้องเขียนใน Python บางเวอร์ชัน

สำหรับรายละเอียดเพิ่มเติมดู1, 2, Fizz, 4, Buzz

เกณฑ์การให้คะแนน

คะแนนของคุณจะเท่ากับจำนวนโหนดในต้นไม้ไวยากรณ์นามธรรมของรหัสของคุณตามที่รายงานโดยโปรแกรมนี้สำหรับหลาม 3หรือโปรแกรมนี้สำหรับงูหลาม 2 ในการรันโปรแกรมให้ระบุชื่อไฟล์ของรหัสของคุณเป็นอาร์กิวเมนต์บรรทัดคำสั่งของโปรแกรม ตัวอย่างเช่น

python simple_counter.py fizzbuzz.py

โปรแกรมเหล่านี้จะตามออกของ ธโมดูล AST หากคุณมีปัญหาใด ๆ แจ้งให้เราทราบ

เพื่อป้องกันการแก้ปัญหาที่ไม่สำคัญเช่นการรันสตริงแบบยาวด้วยโปรแกรมจริงหรือการเข้ารหัส hardcoding เอาต์พุตมีข้อ จำกัด เพิ่มเติมบางประการ:

  • ไม่มีโทเค็นในรหัสของคุณอาจยาวเกิน 15 อักขระ โปรแกรมด้านบนจะตรวจสอบข้อกำหนดนี้สำหรับคุณ โปรดทราบว่าเพื่อความสะดวกในการนำไปใช้งานโปรแกรมด้านบนจะนับความคิดเห็นเป็นโทเค็น

  • การเรียกใช้รหัส / การประเมินผลถูกห้าม

หากคุณมีคำถามว่ามีบางอย่างที่ได้รับอนุญาตหรือไม่โปรดถามฉัน

การให้คะแนนฮิวริสติก

โดยทั่วไปแล้วกฎต่อไปนี้เพียงพอที่จะคำนวณคะแนนของโปรแกรมของคุณ:

  • งบบล็อกคือ 1 จุด: if, for ... in ..., while, elseฯลฯ

  • งบแบบสแตนด์อโลนเป็นจุดที่ 1: printในหลาม 2 break, passฯลฯ

  • ตัวแปรมี 2 คะแนน

  • ตัวอักษร-โทเค็นเดี่ยวมี 1 จุด: 2131, "Hello, world!",True

  • ฟังก์ชั่นคือ 3 คะแนน (2 สำหรับการใช้ตัวแปร, 1 พิเศษ): printใน Python 3 range, ฯลฯ

  • ผู้ประกอบการ 2 จุด: +, *, %, and, notฯลฯ

  • = คือ 1 จุด

  • ที่ได้รับมอบหมาย Augmented คือ 2 จุด: +=, |=ฯลฯ

  • วงเล็บ, การเยื้องและอื่น ๆ คือ 0 คะแนน

  • บรรทัดที่มีนิพจน์ซึ่งตรงข้ามกับการมอบหมายหรือการแสดงออกคือ + 1 จุด

  • มีรหัสทั้งหมด 1 จุด

ท้าทาย:

คะแนนต่ำสุดชนะ โชคดี!


1
ฉันชอบสไตล์นี้ คุณต้องไปโปรแกรมง่าย ๆ มากกว่าแค่โปรแกรมสั้น ๆ
แยกผลไม้

1
เราจำเป็นต้องใช้รหัสที่ท้าทาย สำหรับแอสกอล์ฟ นี่เป็นเพียงรูปแบบเฉพาะของรหัสอะตอมมิกกอล์ฟหรือไม่
Martin Ender

@ มาร์ตินเอนเดอร์เหตุผลที่ฉันทำแบบนี้เป็นเพราะแท็กข้อความของอะตอม - โค้ด - กอล์ฟบอกว่า "รหัสอะตอมกอล์ฟคะแนนโดยจำนวนโทเค็นของโปรแกรมของคุณ" และนั่นก็ไม่เหมือนกัน จำนวนเล็กน้อย
isaacg

คำตอบ:



2

46

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

ไม่สามารถ x + 1 ไม่ได้ทำให้เป็นสตริงใน python 3 หรือไม่
เลมอนที่ถูกทำลายได้

1
@DestructibleWatermelon Python 3 ไม่มี backticks ให้นานreprที่สุดเท่าที่ฉันจำได้
Kade

3
พิมพ์สามารถใช้จำนวนเต็มเป็นอาร์กิวเมนต์เป็นจุดของฉัน
มะนาวที่ถูกทำลาย


0

Python 2, 36

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

ฉันคิดว่านี่เป็นวิธีที่สั้นที่สุดที่ไม่ได้ใช้จำนวนมาก / สายอักขระ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.