Menor script python para imprimir números pares de 0 a 100

11

Estou trabalhando em um problema que me propus por diversão, que é criar um script python que imprima os números pares de 0 a 100. O desafio é tornar o script o menor possível. Isto é o que eu tenho até agora:

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

Atualmente, são 60 bytes. Alguém pode pensar em uma maneira de torná-lo menor?


Editar: print(*range(2,101,2),sep='\n')que é 30 bytes. Qualquer menor?

Benedict Lewis
fonte
4
i=2;exec"print i;i+=2;"*50
Vetorizado
2
Esta dica está localizada na página de dicas de golfe em python codegolf.stackexchange.com/questions/54/… .
Vetorizado
4
Isso deveria começar em 0ou 2? Eu não python muito, mas me parece que seus dois exemplos fazem coisas diferentes. Por favor, corrija-me se não.
Geobits
20
print "0 10 100"(é binário OK?)
r3mainer
1
@squeamishossifrage não se esqueça de golfe fora do espaço;)
isaacg

Respostas:

37

Python 2 - 12 caracteres

print 8**999

A representação decimal de todos os números pares de 0 a 100 pode ser encontrada na saída:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Como bônus, os números ímpares também.

feersum
fonte
Único problema: imprime os números ímpares e muito mais também.
13/08/14
1
@ Sieg, par e ímpar ... meio que cobri todas as bases, não sei como você encontra "muito mais" nisso. ;)
paqogomez 13/08
Não é a primeira vez que tenho uma opinião diferente de outros usuários. Eu gosto da sua resposta de qualquer maneira.
13/08/14
@paqogomez mesmo números 0-100, os números ímpares e números muito mais até> 100
OJFord
Curioso demais para evitar perguntar um Q idiota, por que especificamente 8 * 999?
0xc0de
31

Python 3, 22 (possivelmente não permitido)

Se o desafio é "criar um script python que imprima os números pares de 0 a 100" e não "criar um script python que imprima os números pares de 0 a 100, nova linha separada ", a solução mais curta é:

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

Lembre-se de que é muito importante no código golf não impor limitações a si mesmo que você não precisa - faça o que o problema pede e nada mais.

isaacg
fonte
1
A segunda resposta do OP na edição não o fez pensar que ele queria que a nova linha fosse separada?
Moop
10
É inteiramente possível, e é por isso que possibly not allowedestá no título. Por outro lado, também é possível que ele / ela seja pego na correspondência do resultado do seu programa inicial e tenha esquecido a especificação do problema inicial. Como não sei qual é o caso, dei essa resposta.
Isaacg
22

Python2 26

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

descoberta independente da solução da @ bitpwner

Sparr
fonte
Eu recebo um SyntaxError quando tento executar isso. A resposta principal desta resposta deve ser "Python 2, 26"?
+1, você parece ter sido 58 segundos mais rápido para publicar esta solução. :)
Ilmari Karonen
19

Python 2-26

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

Com base na dica sobre exec, com multiplicação de strings, encontrada em Dicas para jogar golfe em Python .

Vetorizado
fonte
Deve incluir 0, consulte a solução da Sparr.
Isaacg
Eu recebo um SyntaxError quando tento executar isso. A resposta principal desta resposta deve ser "Python 2 - 26"?
13

Python 2, 26 (possivelmente não permitido)

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

Não foi especificado estritamente, em que ordem os números seriam impressos.

Wrzlprmft
fonte
9

Python 2, 28

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

Python 2 - 20 (Possivelmente não permitido)

Isso é específico do python 2 e provavelmente engana, pois imprime a lista, mas como todos os números acabam na tela:

print range(0,101,2)
hacatu
fonte
7

Python 2 em * NIX, 24

os.system('seq 0 2 100')

Se você precisar adicionar

import os

Em seguida, o total é de 33 caracteres.

Ken A
fonte
Inteligente - isso pode muito bem ser superior em alguns casos. É específico do SO?
Isaacg
4
@isaacg Muito, como os.systemchama um programa de sistema.
seequ
3
Se isso é permitido, então os.system('a'), porque eu tenho um programa chamado acom o comportamento desejado no meu sistema ..
OJFord
5
@OllieFord seq faz parte do gnu coreutils. Você não tem tanta influência.
Sparr
4

Python 3, 29

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

Se você está no Python 2 e já importou a função de impressão, não é necessário transformar o objeto iterador em uma lista e ele se torna 25 caracteres:

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

Não sei se isso é totalmente justo.

Aqui está outra idéia divertida que funciona no python 2 ou 3. É um pouco mais longo.

def p(i):
    if i+2:p(i-2);print i
p(100)
IanH
fonte
1
A versão do Python 3 pode ser reduzida para o *a,=map(print,range(0,101,2))uso da Descompactação Iterável Estendida .
Flornquake
Obrigado @flornquake, eu atualizei.
IanH
3

Python 2-24

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

(com base na solução bitpwner e Sparr)

No shell, "_" contém o valor da expressão avaliada anteriormente

le_vine
fonte
Você deve observar que isso só funciona se colado no modo interativo de alguns intérpretes Python (por exemplo, não funciona no IPython) e não como um script.
Wrzlprmft
você está certo, eu esqueci de mencionar isso. (o btw funciona no console padrão do Python)
le_vine 12/08
1
-1 - A pergunta menciona explicitamente um script python , o que significa que o código deve ser gravado em um arquivo e executado. Caso contrário, uma solução melhor seria simplesmente: range(0,102,2)já que isso exibirá todos os números pares (mais algumas vírgulas e dois colchetes) na tela.
Bakuriu 13/08/14
1

Compreensão da lista em Python - 39

Isso usa uma compreensão de lista, um truque para reduzi-lo é multiplicar o índice por 2, em vez de ir de 0 a 100 e fazer uma if x % 2verificação final para o par.

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

Usando um mapa e a sugestão de @ isaacg, ele acaba tendo os mesmos 39 caracteres:

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

Editar: Após separar os valores por nova linha, não é de longe o menor.

Ed Griebel
fonte
1
Isso não responde à pergunta - o OP diz prints the even numbers from 0 to 100, não apenas os gera. Além disso, se você quiser apenas a lista, range(0,101,2)é menor.
Isaacg
1
@isaacg Atualizado para responder à pergunta, agora por muito mais tempo, é necessário incorporar cada valor em str () para a junção.
Ed Griebel
@Wrzlprmft Obrigado pela sugestão, não sabia que eu poderia fazer isso! O código foi alterado para refletir esse novo conhecimento.
Ed Griebel
1

Python 2-20 (questionável)

Se a solução separada por espaço do isaacg estiver OK, presumivelmente a formatação normal da lista também será:

print range(0,101,2)

Para distorcer ainda mais as regras, aplique a sugestão de SirBraneDamuj nos comentários:

print range(101)

e você tem 16 anos. E se houver algum lixo extra separando-os?

user30687
fonte