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?


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.


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.


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


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 .


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.



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)

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.


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)

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


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.


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?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.