Le plus petit script python pour imprimer les nombres pairs de 0 à 100

11

Je travaille sur un problème que je me suis fixé pour le plaisir, qui est de créer un script python qui imprime les nombres pairs de 0 à 100. Le défi est de rendre le script le plus petit possible. Voici ce que j'ai jusqu'à présent:

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

Actuellement, il est de 60 octets. Quelqu'un peut-il penser à un moyen de le réduire?


Edit: print(*range(2,101,2),sep='\n')qui est de 30 octets. Tout petit?

Benedict Lewis
la source
4
i=2;exec"print i;i+=2;"*50
Vectorisé
2
Cette astuce se trouve sur la page des astuces de golf en python codegolf.stackexchange.com/questions/54/… .
Vectorisé
4
Est-ce censé commencer à 0ou 2? Je ne python pas beaucoup, mais il me semble que vos deux exemples font des choses différentes. Veuillez me corriger sinon.
Geobits
20
print "0 10 100"(est binaire OK?)
r3mainer
1
@squeamishossifrage n'oubliez pas de jouer au golf dans l'espace;)
isaacg

Réponses:

37

Python 2 - 12 caractères

print 8**999

La représentation décimale de tous les nombres pairs de 0 à 100 peut être trouvée dans la sortie:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

En prime, les nombres impairs peuvent aussi.

feersum
la source
Seul problème: il imprime les nombres impairs et bien plus encore.
seequ
1
@Sieg, pair et impair ... un peu toutes les bases couvertes, je ne sais pas comment vous en trouverez "beaucoup plus". ;)
paqogomez
Ce n'est pas la première fois que j'ai une opinion différente de celle des autres utilisateurs. J'aime quand même ta réponse.
seequ
@paqogomez les nombres pairs 0-100, les nombres impairs et bien d'autres nombres pairs> 100
OJFord
Trop curieux pour éviter de demander un Q muet, pourquoi spécifiquement 8 * 999?
0xc0de
31

Python 3, 22 (éventuellement non autorisé)

Si le défi est "de créer un script python qui imprime les nombres pairs de 0 à 100" et non "de créer un script python qui imprime les nombres pairs de 0 à 100, séparés par des sauts de ligne ", alors la solution la plus courte est:

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

N'oubliez pas, il est très important dans le golf de code de ne pas vous imposer de limites, vous n'avez pas à le faire - faites ce que le problème demande, et pas plus.

isaacg
la source
1
La deuxième réponse d'OP dans le montage ne vous ferait-elle pas penser qu'il voulait que la nouvelle ligne soit séparée?
Moop
10
C'est tout à fait possible, et c'est pourquoi possibly not allowedest dans le titre. D'un autre côté, il est également possible qu'il / elle se soit retrouvé (e) à faire correspondre la sortie de son programme initial et ait oublié la spécification de problème initiale. Comme je ne sais pas quel est le cas, j'ai donné cette réponse.
isaacg
22

Python2 26

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

découverte indépendante de la solution de @ bitpwner

Sparr
la source
J'obtiens un SyntaxError lorsque j'essaye de l'exécuter. La ligne supérieure de cette réponse doit-elle indiquer "Python 2, 26"?
+1, vous semblez avoir été 58 secondes plus rapide pour publier cette solution. :)
Ilmari Karonen
19

Python 2 - 26

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

Basé sur l'astuce sur l'exec avec multiplication de chaînes trouvée sur Tips for golfing in Python .

Vectorisé
la source
Doit inclure 0, voir la solution de Sparr.
isaacg
J'obtiens un SyntaxError lorsque j'essaye de l'exécuter. La ligne supérieure de cette réponse doit-elle indiquer "Python 2 - 26"?
13

Python 2, 26 (éventuellement non autorisé)

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

Il n'était pas strictement spécifié, dans quel ordre les numéros devaient être imprimés.

Wrzlprmft
la source
9

Python 2, 28

for i in range(51):print 2*i
fsfd1100
la source
9

Python 2 - 20 (éventuellement non autorisé)

C'est spécifique à Python 2 et probablement à la tricherie car il imprime la liste, mais puisque tous les nombres finissent à l'écran:

print range(0,101,2)
hacatu
la source
7

Python 2 dans * NIX, 24

os.system('seq 0 2 100')

Si vous devez ajouter

import os

Le total est alors de 33 caractères.

Ken A
la source
Clever - Cela pourrait bien être supérieur dans certains cas. Est-ce spécifique au système d'exploitation?
isaacg
4
@isaacg Très bien, comme os.systemappelle un programme système.
seequ
3
Si cela est autorisé, alors os.system('a'), parce que j'ai un programme appelé aavec le comportement souhaité sur mon système ..
OJFord
5
@OllieFord seq fait partie de gnu coreutils. Vous n'avez pas autant de poids.
Sparr
4

Python 3, 29

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

Si vous êtes en Python 2 et que vous avez déjà importé la fonction d'impression, vous n'avez pas besoin de faire l'objet itérateur dans une liste et il devient 25 caractères:

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

Je ne sais pas si c'est tout à fait juste cependant.

Voici une autre idée amusante qui fonctionne en python 2 ou 3. C'est un peu plus long.

def p(i):
    if i+2:p(i-2);print i
p(100)
IanH
la source
1
La version Python 3 peut être raccourcie pour *a,=map(print,range(0,101,2))utiliser le déballage terrable étendu .
flornquake
@flornquake Merci, je l'ai mis à jour.
IanH
3

Python 2-24

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

(basé sur la solution bitpwner et Sparr)

Dans le shell, "_" contient la valeur de l'expression précédemment évaluée

le_vine
la source
Vous devriez noter que cela ne fonctionne que s'il est collé dans le mode interactif de certains interprètes Python (par exemple, il ne fonctionne pas dans IPython) et non en tant que script.
Wrzlprmft
vous avez raison, j'ai oublié de le mentionner. (btw fonctionne dans la console Python standard)
le_vine
1
-1 - La question mentionne explicitement un script python , ce qui signifie que le code doit être écrit dans un fichier et exécuté. Sinon, une meilleure solution serait tout simplement: range(0,102,2)puisque cela afficherait tous les nombres pairs (plus quelques virgules et deux crochets) à l'écran.
Bakuriu
1

Compréhension de la liste Python - 39

Cela utilise une compréhension de liste, une astuce pour la raccourcir est de multiplier l'index par 2 plutôt que de passer de 0 à 100 et une if x % 2vérification de fin pour pair.

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

En utilisant une carte et la suggestion de @ isaacg, cela finit par être les mêmes 39 caractères:

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

Edit: Après avoir séparé les valeurs par un saut de ligne, ce n'est de loin pas le plus court.

Ed Griebel
la source
1
Cela ne répond pas à la question - OP dit prints the even numbers from 0 to 100, pas seulement les générer. De plus, si vous voulez juste que la liste range(0,101,2)soit plus courte.
isaacg
1
@isaacg Updated to answer the question, now much longer, needing to embed each value in str() for the join kills it.
Ed Griebel
@Wrzlprmft Thanks for the suggestion, didn't know I could do that! Code changed to reflect this new knowledge.
Ed Griebel
1

Python 2 - 20 (questionable)

If isaacg's space-separated solution is OK, then presumably the normal list formatting is as well:

print range(0,101,2)

For further rule-twisting, apply SirBraneDamuj's suggestion from the comments:

print range(101)

and you are at 16. So what if there's some extra garbage separating them?

user30687
la source