추상 구문 트리 골프 : FizzBuzz, Python


12

요약

가장 적은 토큰으로 Python에서 FizzBuzz를 구현하십시오.

도전

1에서 100까지의 10 진수를 인쇄하는 프로그램을 작성하십시오. 그러나 숫자 대신 3 개의 인쇄“Fizz”의 배수와 5 개의 인쇄“Buzz”의 배수의 경우. 3과 5의 배수 인“FizzBuzz”의 숫자입니다. 일부 버전의 Python으로 프로그램을 작성해야합니다.

자세한 내용은 1, 2, Fizz, 4, Buzz를 참조하십시오.

채점

Python 3의 경우이 프로그램 또는 Python 2의 경우이 프로그램에서 보고 한 바와 같이 점수는 코드의 추상 구문 트리에있는 노드 수와 같습니다 . 프로그램을 실행하려면 코드 파일 이름을 프로그램에 명령 행 인수로 제공하십시오. 예를 들어 :

python simple_counter.py fizzbuzz.py

이 프로그램은 Python의 ast 모듈을 기반으로 합니다 . 어려움이 있으면 알려주세요.

실제 프로그램으로 긴 문자열을 실행하거나 출력을 하드 코딩하는 것과 같은 사소한 솔루션을 방지하기 위해 몇 가지 추가 제한 사항이 있습니다.

  • 코드의 토큰은 15자를 초과 할 수 없습니다. 위의 프로그램은이 요구 사항을 확인합니다. 쉽게 구현할 수 있도록 위의 프로그램은 주석을 토큰으로 계산합니다.

  • 코드 실행 / 평가가 금지됩니다.

어떤 것이 허용되는지에 관해 궁금한 점이 있으면 저에게 물어보십시오.

스코어링 휴리스틱

다음 규칙은 일반적으로 프로그램 점수를 계산하기에 충분합니다.

  • 블록 문은 1 점이다 : if, for ... in ..., while, else, 등

  • : 독립형 문은 1 점입니다 print파이썬 2, break, pass, 등

  • 변수는 2 점입니다

  • 단일 토큰 리터럴이 1 점이다 : 2131, "Hello, world!",True

  • 함수는 3 점입니다 (변수를 사용하는 경우 2, 1 추가) : printPython 3 range

  • 운영자는 2 점이다 : +, *, %, and, not, 등

  • = 1 포인트

  • : 증강 할당은 2 점이다 +=, |=

  • 괄호, 들여 쓰기 등은 0 점입니다.

  • 대입 또는 식과 달리 식을 포함하는 선은 + 1 점입니다.

  • 코드를 작성하는 것은 1 점입니다.

도전:

가장 낮은 점수가 이깁니다. 행운을 빕니다!


1
나는이 스타일을 좋아한다. 짧은 프로그램보다는 단순한 프로그램을 찾아야합니다.
Esolanging 과일

1
우리 는 이것을 위해 코드 도전 ast-golf 가 정말로 필요 합니까? 이것은 단순한 형태의 원자 코드 골프가 아닌가?
Martin Ender

@MartinEnder 내가 이런 식으로 한 이유는 atomic-code-golf의 태그 텍스트에 "원자 코드 골프는 프로그램의 토큰 수에 따라 점수가 매겨집니다." 소량.
isaacg

답변:


6

33

파이썬 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))

Python 3에서 x + 1을 문자열로 지정할 수 없습니까?
Destructible Lemon

1
@DestructibleWatermelon Python 3에는 repr내가 기억하는 한 백틱이 없습니다 .
Kade

3
인쇄는 논증으로 정수를 취할 수 있습니다. 제 요점은
Destructible Lemon

2

39 34

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

0

파이썬 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.