Абстрактное синтаксическое дерево гольфа: FizzBuzz, Python


12

Резюме

Реализуйте FizzBuzz в Python, используя как можно меньше токенов.

Вызов

Напишите программу, которая печатает десятичные числа от 1 до 100 включительно. Но для кратных трех выведите «Fizz» вместо числа, а для кратных пяти - «Buzz». Для чисел, кратных трем и пяти, выведите «FizzBuzz». Программы должны быть написаны на какой-то версии Python.

Для получения более подробной информации см. 1, 2, Fizz, 4, Buzz

счет

Ваша оценка будет равна количеству узлов в абстрактном синтаксическом дереве вашего кода, как сообщается этой программой для Python 3 или этой программой для Python 2 . Чтобы запустить программы, укажите имя файла вашего кода в качестве аргумента командной строки для программы. Например:

python simple_counter.py fizzbuzz.py

Эти программы основаны на Ast модуле Python . Если у вас возникнут трудности, дайте мне знать.

Чтобы предотвратить тривиальные решения, такие как выполнение длинной строки с реальной программой или жесткое кодирование вывода, существуют некоторые дополнительные ограничения:

  • Никакой токен в вашем коде не может быть длиннее 15 символов. Вышеуказанные программы проверит это требование для вас. Обратите внимание, что для простоты реализации вышеупомянутые программы считают комментарии как токены.

  • Выполнение / оценка кода запрещена.

Если у вас есть вопросы относительно того, разрешено ли что-то, спросите меня.

Скоринг эвристики

Следующие правила, как правило, достаточно для расчета балла вашей программы:

  • Заявления блока 1 точек: if, for ... in ..., while, elseи т.д.

  • Отдельные заявления 1 пункт: printв Python 2 break, passи т.д.

  • Переменные 2 балла

  • Single-токены литералы 1 точка: 2131, "Hello, world!",True

  • Функции - это 3 точки (2 для использования переменной, 1 дополнительная): printв Python 3 rangeи т. Д.

  • Операторы 2 точки: +, *, %, and, notи т.д.

  • = это 1 балл

  • Дополненная задание 2 балла: +=, |=и т.д.

  • Круглые скобки, отступы и т. Д. - 0 баллов.

  • Строка, содержащая выражение, в отличие от присваивания или выражения, равна + 1 балл.

  • Наличие кода вообще 1 балл.

Вызов:

Самый низкий балл побеждает. Удачи!


1
Мне нравится этот стиль. Вы должны пойти на простые программы, а не просто короткие.
Esolanging Fruit

1
Нам действительно нужен код-вызов ast-golf для этого? Разве это не специфическая форма атомного кода-гольфа ?
Мартин Эндер

@MartinEnder Причина, по которой я сделал это таким образом, заключается в том, что в тексте тега для atomic-code-golf написано: «Атомный код-гольф оценивается по количеству токенов в вашей программе», и это не то же самое, хотя, возможно, только довольно небольшое количество.
Исаак

Ответы:



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
reprНасколько я помню, @DestructibleWatermelon Python 3 не имеет обратных сигналов .
Каде

3
Печать может принять целое число в качестве аргумента, была моя точка зрения
Разрушаемый Лимон


0

Python 2, 36

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

Я думаю, что это самый короткий из подходов, которые не используют большие числа / строки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.