Il più piccolo script in pitone per stampare numeri pari da 0 a 100


11

Sto lavorando a un problema che mi sono prefissato di divertire, ovvero creare uno script Python che stampa i numeri pari da 0 a 100. La sfida è rendere lo script il più piccolo possibile. Questo è quello che ho finora:

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

Attualmente è di 60 byte. Qualcuno può pensare a un modo per ridurlo?


Modifica: print(*range(2,101,2),sep='\n')che è di 30 byte. Più piccolo?


4
i=2;exec"print i;i+=2;"*50
Vectorized

2
Questo suggerimento si trova nella pagina dei suggerimenti sul golf di Python codegolf.stackexchange.com/questions/54/… .
Vectorized

4
Questo dovrebbe iniziare alle 0o 2? Non scrivo molto, ma mi sembra che i tuoi due esempi facciano cose diverse. Per favore, correggimi se no.
Geobits l'

20
print "0 10 100"(è binario OK?)
r3mainer

1
@squeamishossifrage non dimenticare di giocare a golf nello spazio;)
isaacg

Risposte:


37

Python 2 - 12 caratteri

print 8**999

La rappresentazione decimale di tutti i numeri pari da 0 a 100 è disponibile nell'output:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Come bonus, anche i numeri dispari possono essere.


Unico problema: stampa i numeri dispari e molto di più.
Seequ,

1
@Sieg, pari e dispari ... un po 'ho coperto tutte le basi, non sono sicuro di come trovi "molto di più" in questo. ;)
paqogomez,

Non è la prima volta che ho un'opinione diversa rispetto agli altri utenti. Mi piace comunque la tua risposta.
Seequ,

@paqogomez numeri pari 0-100, numeri dispari e molti più numeri pari> 100
OJFord

Troppo curioso per evitare di chiedere una stupida Q, perché nello specifico 8 * 999?
0xc0de

31

Python 3, 22 (forse non consentito)

Se la sfida è "creare uno script Python che stampa i numeri pari da 0 a 100" e non "creare uno script Python che stampa i numeri pari da 0 a 100, newline separati ", la soluzione più breve è:

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

Ricorda, è molto importante nel codice golf non porre limiti a te stesso che non devi fare - fai quello che il problema ti chiede e non di più.


1
La seconda risposta di OP nell'editing non ti farebbe pensare che lo volesse separato da Newline?
Moop,

10
Questo è del tutto possibile, ed è il motivo per cui possibly not allowedè nel titolo. D'altra parte, è anche possibile che sia stato coinvolto nell'abbinamento dell'output del suo programma iniziale e abbia dimenticato le specifiche iniziali del problema. Dato che non so quale sia il caso, ho dato questa risposta.
isaacg,

22

Python2 26

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

scoperta indipendente della soluzione di @ bitpwner


Ottengo un SyntaxError quando provo a eseguirlo. La prima riga di questa risposta dovrebbe dire "Python 2, 26"?

+1, sembra che tu abbia accelerato di 58 secondi la pubblicazione di questa soluzione. :)
Ilmari Karonen,

19

Python 2 - 26

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

Basato sul suggerimento su exec con moltiplicazione di stringhe trovato in Suggerimenti per il golf in Python .


Dovrebbe includere 0, vedere la soluzione di Sparr.
isaacg,

Ottengo un SyntaxError quando provo a eseguirlo. La prima riga di questa risposta dovrebbe dire "Python 2 - 26"?

13

Python 2, 26 (forse non consentito)

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

Non è stato specificato rigorosamente, in quale ordine i numeri dovevano essere stampati.



9

Python 2 - 20 (forse non consentito)

Questo è specifico di Python 2 e probabilmente bara poiché stampa l'elenco, ma poiché tutti i numeri finiscono sullo schermo:

print range(0,101,2)

7

Python 2 in * NIX, 24

os.system('seq 0 2 100')

Se è necessario aggiungere

import os

Quindi il totale è di 33 caratteri.


Intelligente - In alcuni casi potrebbe essere superiore. È specifico del sistema operativo?
isaacg,

4
@isaacg Molto, come os.systemchiama un programma di sistema.
Seequ,

3
Se questo è permesso, allora os.system('a'), perché mi capita di avere un programma chiamato acon il comportamento desiderato sul mio sistema ..
OJFord

5
@OllieFord seq fa parte di gnu coreutils. Non hai abbastanza influenza.
Sparr

4

Python 3, 29

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

Se ti trovi in ​​Python 2 e hai già importato la funzione di stampa, non devi creare l'oggetto iteratore in un elenco e diventa 25 caratteri:

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

Non so che sia del tutto giusto, però.

Ecco un'altra idea divertente che funziona in Python 2 o 3. È un po 'più a lungo.

def p(i):
    if i+2:p(i-2);print i
p(100)

1
La versione di Python 3 può essere abbreviata *a,=map(print,range(0,101,2))utilizzando la decompressione Iterable estesa .
terremoto

@flornquake Grazie, l'ho aggiornato.
IanH

3

Python 2 - 24

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

(basato sulla soluzione bitpwner e Sparr)

Nella shell, "_" contiene il valore dell'espressione precedentemente valutata


Dovresti notare che funziona solo se incollato nella modalità interattiva di alcuni interpreti Python (ad esempio, non funziona in IPython) e non come uno script.
Wrzlprmft,

hai ragione, ho dimenticato di menzionarlo. (btw funziona nella console standard di Python)
le_vine

1
-1 - La domanda menziona esplicitamente uno script Python , il che significa che il codice deve essere scritto in un file ed eseguito. Altrimenti una soluzione migliore sarebbe semplicemente: range(0,102,2)poiché ciò mostrerebbe tutti i numeri pari (più alcune virgole e due parentesi) sullo schermo.
Bakuriu,

1

Comprensione elenco Python - 39

Questo utilizza una comprensione dell'elenco, un trucco per renderlo più breve è moltiplicare l'indice per 2 anziché andare da 0 a 100 e un trailing if x % 2 controllo per pari.

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

Usando una mappa e il suggerimento di @ isaacg finisce per essere gli stessi 39 caratteri:

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

Modifica: dopo aver separato i valori da newline non è di gran lunga il più breve.


1
Questo non risponde alla domanda - dice OP prints the even numbers from 0 to 100, non solo generarli. Inoltre, se si desidera solo l'elenco, range(0,101,2)è più breve.
isaacg,

1
@isaacg Aggiornato per rispondere alla domanda, ora molto più a lungo, è necessario incorporare ogni valore in str () perché l'unione lo uccida.
Ed Griebel,

@Wrzlprmft Grazie per il suggerimento, non sapevo di poterlo fare! Il codice è cambiato per riflettere questa nuova conoscenza.
Ed Griebel,

1

Python 2 - 20 (discutibile)

Se la soluzione separata da spazio di isaacg è OK, presumibilmente anche la normale formattazione dell'elenco è:

print range(0,101,2)

Per un'ulteriore modifica delle regole, applica il suggerimento di SirBraneDamuj dai commenti:

print range(101)

e hai 16 anni. E se ci fosse della spazzatura in più che li separa?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.