Take the 2-minute tour ×
Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It's 100% free, no registration required.

I'm work on a problem which I set myself for fun, which is to create a python script which prints the even numbers from 0 to 100. The challenge is to make the script as small as possible. This is what I have so far:

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

Currently it is 60 bytes. Can anyone think of a way to make it smaller?


Edit: print(*range(2,101,2),sep='\n') which is 30 bytes. Any smaller?

share|improve this question
3  
i=2;exec"print i;i+=2;"*50 –  bitpwner Aug 11 at 14:37
2  
This tip is located in the python golfing tips page codegolf.stackexchange.com/questions/54/…. –  bitpwner Aug 11 at 14:52
3  
Is this supposed to start at 0 or 2? I don't python much, but it looks to me like your two examples do different things. Please correct me if not. –  Geobits Aug 11 at 16:03
17  
print "0 10 100" (is binary OK?) –  squeamish ossifrage Aug 11 at 19:13
1  
@squeamishossifrage don't forget to golf out the space ;) –  isaacg Aug 11 at 19:25

13 Answers 13

Python 3, 22 (Possibly not allowed)

If the challenge is "to create a python script which prints the even numbers from 0 to 100" and not "to create a python script which prints the even numbers from 0 to 100, newline separated", then the shortest solution is:

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

Remember, it's very important in code golf not to put any limitations on yourself you don't have to - do what the problem asks, and no more.

share|improve this answer
1  
Wouldn't OP's second answer in the edit make you think he wanted it newline separated? –  Moop Aug 11 at 17:31
10  
That's entirely possibly, and is why possibly not allowed is in the title. On the other hand, it's also possible that he/she got caught up in matching the output of his initial program, and forgot the initial problem spec. Since I don't know which is the case, I gave this answer. –  isaacg Aug 11 at 17:33
    
print("the even numbers from 0 to 100") Tips fedora –  Daz C Aug 18 at 20:07
1  
@DazC 1. That's unnecessarily long, by a wide margin. 2. Why are you posting that on this answer? Please don't do that. 3. No longer funny, first answer. meta.codegolf.stackexchange.com/questions/1061/… –  isaacg Aug 18 at 21:06
    
1, almost like it happened intentionally. 2, It's funny. 3, <insert #2> + I'm not frequent to this particular stex so it's still subjectively amusing to me. 4, posting as a comment over a legitimate answer seems like your issue is splitting hairs so I can only speculate what pet peeves keep you sensitive. In return, I'll try not to do exactly this same joke on your questions (unless I forget). –  Daz C Aug 18 at 21:37

Python 2 - 12 characters

print 8**999

The decimal representation of all even numbers from 0 to 100 can be found in the output:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

As a bonus, so can the odd numbers.

share|improve this answer
    
Only problem: It prints the odd numbers and a lot more too. –  Sieg Aug 13 at 16:33
10  
+1 for making me laugh. –  paqogomez Aug 13 at 17:14
1  
@Sieg, even and odd... kinda got all the bases covered, not sure how you find "a lot more" in that. ;) –  paqogomez Aug 13 at 17:16
    
Isn't the first time I have a different opinion than other users. I like your answer anyways. –  Sieg Aug 13 at 17:24
    
@paqogomez even numbers 0-100, the odd numbers, and a lot more even numbers >100 –  Ollie Ford Aug 14 at 10:33

Python2 26

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

independent discovery of @bitpwner's solution

share|improve this answer
    
I get a SyntaxError when I try to run that. Should this answer's top line say "Python 2, 26"? –  Ricky Demer Aug 12 at 0:53
    
+1, you appear to have been 58 seconds faster to post this solution. :) –  Ilmari Karonen Aug 17 at 14:47

Python 2 - 26

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

Based on the tip on exec with string multiplication found at Tips for golfing in Python.

share|improve this answer
    
Should include 0, see Sparr's solution. –  isaacg Aug 11 at 17:23
    
I get a SyntaxError when I try to run that. Should this answer's top line say "Python 2 - 26"? –  Ricky Demer Aug 12 at 2:57

Python 2, 26 (possibly not allowed)

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

It wasn’t strictly specified, in which order the numbers were to be printed.

share|improve this answer

Python 2, 28

for i in range(51):print 2*i
share|improve this answer

Python 2 in *NIX, 24

os.system('seq 0 2 100')

If you need to add

import os

Then the total is 33 characters.

share|improve this answer
    
Clever - This might well be superior in some cases. Is it OS specific? –  isaacg Aug 11 at 19:54
4  
@isaacg Very much so, as os.system calls a system program. –  Sieg Aug 11 at 20:31
3  
If that's allowed, then os.system('a'), because I happen to have a program called a with the desired behaviour on my system.. –  Ollie Ford Aug 13 at 12:33
4  
@OllieFord seq is part of gnu coreutils. You don't have quite as much clout. –  Sparr Aug 14 at 1:55

Python 2 - 20 (Possibly not allowed)

This is python 2 specific and probably cheating since it prints the list, but since all numbers end up on the screen:

print range(0,101,2)
share|improve this answer

Python 3, 29

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

If you're in Python 2 and happen to have already imported the print function, you don't have to make the iterator object into a list and it becomes 25 characters:

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

I don't know that that's entirely fair though.

Here's another fun idea that works in python 2 or 3. It's a tad longer.

def p(i):
    if i+2:p(i-2);print i
p(100)
share|improve this answer
1  
The Python 3 version can be shortened to *a,=map(print,range(0,101,2)) using Extended Iterable Unpacking. –  flornquake Aug 13 at 23:12
    
@flornquake Thanks, I've updated it. –  IanH Aug 14 at 1:47

Python 2 - 24

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

(based on bitpwner and Sparr solution)

In the shell, "_" contains the value of the previously evaluated expression

share|improve this answer
    
You should note that this only works, if pasted into the interactive mode of some Python interpreters (e.g., it does not work in IPython) and not as a script. –  Wrzlprmft Aug 12 at 12:10
    
you're right, i forgot to mention that. (btw works in the standard Python console) –  le_vine Aug 12 at 12:13
1  
-1 -- The question explicitly mentions a python script, which means the code should be written to a file and executed. Otherwise a better solution would simply be:range(0,102,2) since this would display all the even numbers (plus some commas and two brackets) on the screen. –  Bakuriu Aug 13 at 11:41

Python List Comprehension - 39

This uses a list comprehension, one trick to make it shorter is to multiply the index by 2 rather than going from 0 to 100 and a trailing if x % 2 check for even.

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

Using a map and @isaacg's suggestion it ends up being the same 39 characters:

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

Edit: After separating values by newline it is by far not the shortest.

share|improve this answer
1  
This doesn't answer the question - OP says prints the even numbers from 0 to 100, not just generate them. Also, if you just want the list, range(0,101,2) is shorter. –  isaacg Aug 11 at 19:51
1  
@isaacg Updated to answer the question, now much longer, needing to embed each value in str() for the join kills it. –  Ed Griebel Aug 11 at 21:11
    
@Wrzlprmft Thanks for the suggestion, didn't know I could do that! Code changed to reflect this new knowledge. –  Ed Griebel Aug 12 at 15:01

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?

share|improve this answer

33 bytes

print [x for x in range(0,101,2)]
share|improve this answer
3  
You can edit your previous post if you want to make changes. And please include a byte count of your code. –  Martin Büttner Dec 1 at 14:02
    
This does not provide an answer to the question. To critique or request clarification from an author, leave a comment below their post - you can always comment on your own posts, and once you have sufficient reputation you will be able to comment on any post. –  hsl Dec 1 at 15:01

protected by Community Dec 5 at 22:00

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.