Найменший скрипт пітона для друку парних цифр від 0 до 100


11

Я працюю над проблемою, яку я поставив собі для розваги, а це створити сценарій пітона, який надрукує парні числа від 0 до 100. Завдання полягає в тому, щоб зробити сценарій якомога меншим. Ось що я маю досі:

for x in range(0, 101):
    if (x % 2 == 0):
        print x

Наразі це 60 байт. Хтось може придумати спосіб зробити його меншим?


Правка: print(*range(2,101,2),sep='\n')що становить 30 байт. Будь-який менший?


4
i=2;exec"print i;i+=2;"*50
Векторизований

2
Ця порада розміщена на сторінці підказок щодо гольфу на пітоні codegolf.stackexchange.com/questions/54/… .
Векторизований

4
Це повинно починатися з 0або 2? Я не дуже пітон, але мені здається, що твої два приклади роблять різні речі. Будь ласка, виправте мене, якщо ні.
Геобіц

20
print "0 10 100"(є бінарним?)
r3mainer

1
@squeamishossifrage не забудьте пограти в космос;)
isaacg

Відповіді:


37

Python 2 - 12 символів

print 8**999

Десяткове представлення всіх парних чисел від 0 до 100 можна знайти у висновку:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Як бонус, так можуть бути і непарні номери.


Єдина проблема: вона друкує непарні цифри і багато іншого теж.
seequ

1
@Sieg, парний і дивний ... щось накрило всі основи, не знаючи, як ти знайдеш "набагато більше" в цьому. ;)
paqogomez

Це не перший раз, коли я маю іншу думку, ніж інші користувачі. Мені подобається відповідь у будь-якому випадку.
seequ

@paqogomez парні числа 0-100, непарні числа та ще багато парних чисел> 100
OJFord

Занадто цікаво, щоб не запитувати німого Q, чому саме 8 * 999?
0xc0de

31

Python 3, 22 (можливо, не дозволено)

Якщо завдання полягає в тому, щоб "створити скрипт python, який виводить парні числа від 0 до 100", а не "створити сценарій python, який виводить парні числа від 0 до 100, розділяючи нову лінію ", то найкоротшим рішенням є:

print(*range(0,101,2))

Пам’ятайте, що в коді гольфу дуже важливо не ставити обмежень на себе, чого не потрібно - робити те, що задає проблема, і не більше того.


1
Хіба не друга відповідь ОП в редакції не змусить вас думати, що він хотів, щоб це було розділене новим рядком?
Moop

10
Це цілком можливо, і саме тому possibly not allowedв заголовку. З іншого боку, також можливо, що він / вона потрапив у відповідність результатам своєї початкової програми та забув початкову специфікацію проблеми. Оскільки я не знаю, у чому справа, я дав цю відповідь.
isaacg

22

Python2 26

i=0;exec"print i;i+=2;"*51

незалежне відкриття рішення @ bitpwner


Я отримую SyntaxError, коли намагаюся запустити це. Чи повинен цей верхній рядок відповіді писати "Python 2, 26"?

+1, вам здається, що на 58 секунд швидше розмістити це рішення. :)
Ільмарі Каронен

19

Пітон 2 - 26

i=0;exec"print i;i+=2;"*51

На основі підказки на exec із розмноженням рядків, знайденим у Підказки для гольфу в Python .


Слід включити 0, див. Рішення Sparr.
isaacg

Я отримую SyntaxError, коли намагаюся запустити це. Чи повинен у верхній рядку цієї відповіді бути "Python 2 - 26"?

13

Python 2, 26 (можливо, не дозволено)

i=102
while i:i-=2;print i

Не було чітко визначено, в якому порядку слід було б надрукувати номери.



9

Python 2 - 20 (можливо, не дозволено)

Це специфічний python 2 і, ймовірно, обман, оскільки він друкує список, але оскільки всі цифри закінчуються на екрані:

print range(0,101,2)

7

Python 2 в * NIX, 24

os.system('seq 0 2 100')

Якщо вам потрібно додати

import os

Тоді загальна кількість 33 символів.


Розумний - у деяких випадках це може бути найкращим. Це специфічна ОС?
isaacg

4
@isaacg Дуже так, як os.systemназиває системну програму.
seequ

3
Якщо це дозволено, то os.system('a')тому, що у мене aв моїй системі є програма, яка називається бажаною поведінкою ..
OJFord

5
@OllieFord seq є частиною gnu coreutils. У вас не так багато прихильності.
Спарр

4

Пітон 3, 29

*a,=map(print,range(0,101,2))

Якщо ви перебуваєте в Python 2 і, можливо, вже імпортували функцію друку, вам не доведеться вносити об’єкт ітератора до списку, і він стає 25 символів:

map(print,range(0,101,2))

Я не знаю, що це абсолютно справедливо.

Ось ще одна цікава ідея, яка працює в python 2 або 3. Це довше, ніж довше.

def p(i):
    if i+2:p(i-2);print i
p(100)

1
Версію Python 3 можна скоротити до *a,=map(print,range(0,101,2))використання Extended Iterable Unpacking .
flornquake

@flornquake Спасибі, я оновив його.
Ян Ян

3

Пітон 2 - 24

0;exec"_+=2;print _;"*50

(на основі рішення bitpwner та Sparr)

У оболонці "_" міститься значення раніше оціненого виразу


Слід зазначити, що це працює лише в тому випадку, якщо його вставлено в інтерактивний режим деяких інтерпретаторів Python (наприклад, він не працює в IPython), а не як сценарій.
Wrzlprmft

ти маєш рацію, я забув це згадати. (btw працює у стандартній консолі Python)
le_vine

1
-1 - У питанні прямо вказано сценарій python , що означає, що код повинен бути записаний у файл та виконаний. Інакше кращим рішенням буде просто: range(0,102,2)оскільки це відображатиме всі парні цифри (плюс деякі коми та дві дужки) на екрані.
Бакуріу

1

Зрозуміння списку Python - 39

Для цього використовується розуміння списку, одна хитрість зробити його скороченням - це множення індексу на 2, а не перехід від 0 до 100 і проходження if x % 2чекової перевірки на парне.

print'\n'.join(`2*x`for x in range(51))

Використовуючи карту та пропозицію @ isaacg, це 39 символів:

print'\n'.join(map(str,range(0,101,2)))

Правка: Після розділення значень на новий рядок це далеко не найкоротше.


1
Це не відповідає на питання - каже ОП prints the even numbers from 0 to 100, а не просто їх генерувати. Крім того, якщо ви просто хочете, щоб список range(0,101,2)був коротшим.
isaacg

1
@isaacg Оновлено, щоб відповісти на питання, тепер набагато довше, потрібно вставити кожне значення в str (), щоб приєднання вбиває його.
Ед Грібель

@Wrzlprmft Дякую за пропозицію, не знав, що можу це зробити! Кодекс змінили, щоб відобразити це нове знання.
Ed Griebel

1

Python 2 - 20 (сумнівно)

Якщо рішення з розділеним простором розділом isaacg добре, то, мабуть, нормальне форматування списку також:

print range(0,101,2)

Для подальшого скручування правил застосуйте пропозицію SirBraneDamuj з коментарів:

print range(101)

а вам у 16. То що робити, якщо розділяє їх додаткове сміття?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.