Анотація синтаксичного дерева в гольф: 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
Чи справді нам потрібен кодовий виклик аст-гольфу для цього? Це не просто специфічна форма атомного коду-гольфу ?
Мартін Ендер

@MartinEnder Причина, що я зробив це таким чином, полягає в тому, що в тексті тегів для atomic-code-golf написано: "Атомний код гольфу набирається кількістю жетонів вашої програми", і це не те саме, що це, хоча, можливо, лише досить невелика кількість.
isaacg

Відповіді:





0

Пітон 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.