El script de Python más pequeño para imprimir números pares del 0 al 100

11

Estoy trabajando en un problema que me puse divertido, que es crear un script de Python que imprima los números pares del 0 al 100. El desafío es hacer que el script sea lo más pequeño posible. Esto es lo que tengo hasta ahora:

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

Actualmente es de 60 bytes. ¿Alguien puede pensar en una manera de hacerlo más pequeño?


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

Benedict Lewis
fuente
44
i=2;exec"print i;i+=2;"*50
Vectorizado
2
Este consejo se encuentra en la página de consejos de golf de python codegolf.stackexchange.com/questions/54/… .
Vectorizado el
44
¿Se supone que esto comience en 0o 2? No uso mucho Python, pero me parece que sus dos ejemplos hacen cosas diferentes. Por favor corrígeme si no.
Geobits
20
print "0 10 100"(¿binario está bien?)
r3mainer
1
@squeamishossifrage no te olvides de jugar al golf;)
isaacg

Respuestas:

37

Python 2 - 12 caracteres

print 8**999

La representación decimal de todos los números pares del 0 al 100 se puede encontrar en la salida:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Como beneficio adicional, también pueden hacerlo los números impares.

Feersum
fuente
El único problema: imprime los números impares y mucho más también.
seequ
1
@Sieg, par e impar ... un poco cubrió todas las bases, no estoy seguro de cómo encontrar "mucho más" en eso. ;)
paqogomez
No es la primera vez que tengo una opinión diferente a la de otros usuarios. Me gusta tu respuesta de todos modos.
seequ
@paqogomez números pares 0-100, los números impares y muchos más números pares> 100
OJFord
Demasiado curioso para evitar preguntar a un tonto Q, ¿por qué específicamente 8 * 999?
0xc0de
31

Python 3, 22 (posiblemente no permitido)

Si el desafío es "crear un script de Python que imprima los números pares de 0 a 100" y no "crear un script de Python que imprima los números pares de 0 a 100, separados por una nueva línea ", entonces la solución más corta es:

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

Recuerde, es muy importante en el golf de código que no se imponga limitaciones a sí mismo que no tiene que hacer: hacer lo que el problema le pida y nada más.

isaacg
fuente
1
¿La segunda respuesta de OP en la edición no te hace pensar que él quiere que se separe la nueva línea?
Moop
10
Eso es completamente posible, y es por eso que possibly not allowedestá en el título. Por otro lado, también es posible que él / ella se haya quedado atrapado en la coincidencia de la salida de su programa inicial y haya olvidado la especificación del problema inicial. Como no sé cuál es el caso, di esta respuesta.
isaacg
22

Python2 26

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

descubrimiento independiente de la solución de @ bitpwner

Sparr
fuente
Me sale un SyntaxError cuando intento ejecutar eso. ¿Debería la línea superior de esta respuesta decir "Python 2, 26"?
+1, parece que has sido 58 segundos más rápido para publicar esta solución. :)
Ilmari Karonen
19

Python 2 - 26

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

Basado en la sugerencia de ejecución con multiplicación de cuerdas que se encuentra en Consejos para jugar golf en Python .

Vectorizado
fuente
Debe incluir 0, ver la solución de Sparr.
isaacg
Me sale un SyntaxError cuando intento ejecutar eso. ¿Debería la línea superior de esta respuesta decir "Python 2 - 26"?
13

Python 2, 26 (posiblemente no permitido)

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

No se especificó estrictamente, en qué orden se iban a imprimir los números.

Wrzlprmft
fuente
9

Pitón 2, 28

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

Python 2 - 20 (posiblemente no permitido)

Esto es específico de Python 2 y probablemente hace trampa ya que imprime la lista, pero dado que todos los números terminan en la pantalla:

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

Python 2 en * NIX, 24

os.system('seq 0 2 100')

Si necesitas agregar

import os

Entonces el total es de 33 caracteres.

Ken A
fuente
Inteligente: esto podría ser superior en algunos casos. ¿Es específico del sistema operativo?
isaacg
44
@isaacg Mucho, como os.systemllama a un programa del sistema.
seequ
3
Si eso está permitido, entonces os.system('a'), porque tengo un programa llamado acon el comportamiento deseado en mi sistema ...
OJFord
55
@OllieFord seq es parte de gnu coreutils. No tienes tanta influencia.
Sparr
4

Pitón 3, 29

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

Si está en Python 2 y ya ha importado la función de impresión, no tiene que convertir el objeto iterador en una lista y se convierte en 25 caracteres:

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

Sin embargo, no sé si eso sea completamente justo.

Aquí hay otra idea divertida que funciona en Python 2 o 3. Es un poco más larga.

def p(i):
    if i+2:p(i-2);print i
p(100)
IanH
fuente
1
La versión de Python 3 se puede acortar para *a,=map(print,range(0,101,2))usar el Desembalaje Iterable Extendido .
flornquake
@flornquake Gracias, lo he actualizado.
IanH
3

Python 2 - 24

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

(basado en la solución Bitpwner y Sparr)

En el shell, "_" contiene el valor de la expresión evaluada previamente

le_vine
fuente
Debe tener en cuenta que esto solo funciona si se pega en el modo interactivo de algunos intérpretes de Python (por ejemplo, no funciona en IPython) y no como un script.
Wrzlprmft
tienes razón, olvidé mencionar eso. (por cierto funciona en la consola estándar de Python)
le_vine
1
-1 - La pregunta menciona explícitamente un script de Python , lo que significa que el código debe escribirse en un archivo y ejecutarse. De lo contrario, una mejor solución sería simplemente: range(0,102,2)ya que esto mostraría todos los números pares (más algunas comas y dos corchetes) en la pantalla.
Bakuriu
1

Comprensión de la lista de Python - 39

Esto utiliza una comprensión de la lista, un truco para hacerlo más corto es multiplicar el índice por 2 en lugar de pasar de 0 a 100 y una if x % 2verificación final para pares.

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

Usando un mapa y la sugerencia de @ isaacg, termina siendo los mismos 39 caracteres:

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

Editar: después de separar los valores por nueva línea, con mucho, no es el más corto.

Ed Griebel
fuente
1
Esto no responde a la pregunta: OP dice prints the even numbers from 0 to 100, no solo generarlos. Además, si solo quieres la lista, range(0,101,2)es más corta.
isaacg
1
@isaacg Se actualizó para responder la pregunta, ahora mucho más tiempo, necesitando insertar cada valor en str () para que la unión lo mate.
Ed Griebel
@Wrzlprmft Gracias por la sugerencia, ¡no sabía que podía hacer eso! El código cambió para reflejar este nuevo conocimiento.
Ed Griebel
1

Python 2 - 20 (cuestionable)

Si la solución separada por espacios de isaacg está bien, entonces presumiblemente el formato de lista normal también es:

print range(0,101,2)

Para una mayor torsión de reglas, aplique la sugerencia de SirBraneDamuj de los comentarios:

print range(101)

y estás en 16. Entonces, ¿qué pasa si hay algo de basura adicional que los separa?

usuario30687
fuente