Skrip python terkecil untuk mencetak angka 0 hingga 100

11

Saya sedang mengerjakan masalah yang saya atur untuk bersenang-senang, yaitu membuat skrip python yang mencetak angka genap dari 0 hingga 100. Tantangannya adalah membuat skrip sekecil mungkin. Inilah yang saya miliki sejauh ini:

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

Saat ini 60 byte. Adakah yang bisa memikirkan cara untuk membuatnya lebih kecil?


Edit: print(*range(2,101,2),sep='\n')yaitu 30 byte. Adakah yang lebih kecil?

Benedict Lewis
sumber
4
i=2;exec"print i;i+=2;"*50
Vektor
2
Tip ini terletak di halaman tips golf python codegolf.stackexchange.com/questions/54/… .
Vektor
4
Apakah ini seharusnya dimulai pada 0atau 2? Saya tidak banyak python, tetapi bagi saya sepertinya dua contoh Anda melakukan hal yang berbeda. Harap perbaiki saya jika tidak.
Geobits
20
print "0 10 100"(is binary OK?)
r3mainer
1
@squeamishossifrage jangan lupa untuk bermain golf;)
isaacg

Jawaban:

37

Python 2 - 12 karakter

print 8**999

Representasi desimal dari semua angka genap dari 0 hingga 100 dapat ditemukan di output:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

Sebagai bonus, begitu juga angka ganjil.

feersum
sumber
Satu-satunya masalah: Ini mencetak angka ganjil dan lebih banyak lagi.
seequ
1
@ Sieg, genap dan ganjil ... agaknya menutupi semua pangkalan, tidak yakin bagaimana Anda menemukan "lebih banyak" di dalamnya. ;)
paqogomez
Bukankah ini pertama kalinya saya memiliki pendapat yang berbeda dari pengguna lain. Saya suka jawaban Anda.
seequ
@paqogomez angka genap 0-100, angka ganjil, dan lebih banyak angka genap> 100
OJFord
Terlalu penasaran untuk menghindari bertanya Q yang bodoh, mengapa secara khusus 8 * 999?
0xc0de
31

Python 3, 22 (Mungkin tidak diizinkan)

Jika tantangannya adalah "untuk membuat skrip python yang mencetak angka genap dari 0 hingga 100" dan bukan "untuk membuat skrip python yang mencetak angka genap dari 0 hingga 100, baris baru dipisahkan ", maka solusi terpendek adalah:

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

Ingat, sangat penting dalam kode golf untuk tidak membatasi diri Anda sendiri - lakukan apa yang ditanyakan masalah, dan jangan lagi.

isaacg
sumber
1
Tidakkah jawaban kedua OP dalam pengeditan membuat Anda berpikir dia ingin baris baru dipisahkan?
Moop
10
Itu sepenuhnya mungkin, dan itulah sebabnya possibly not allowedada dalam judulnya. Di sisi lain, itu juga mungkin bahwa dia terjebak dalam mencocokkan output dari program awalnya, dan lupa spec masalah awal. Karena saya tidak tahu yang mana masalahnya, saya memberikan jawaban ini.
isaacg
22

Python2 26

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

penemuan independen solusi @ bitpwner

Sparr
sumber
Saya mendapatkan SyntaxError ketika saya mencoba menjalankannya. Haruskah baris teratas jawaban ini mengatakan "Python 2, 26"?
+1, Anda tampaknya lebih cepat 58 detik untuk mengirim solusi ini. :)
Ilmari Karonen
19

Python 2 - 26

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

Berdasarkan tip pada exec dengan perkalian string ditemukan di Tips untuk bermain golf di Python .

Vektor
sumber
Harus menyertakan 0, lihat solusi Sparr.
isaacg
Saya mendapatkan SyntaxError ketika saya mencoba menjalankannya. Haruskah baris teratas jawaban ini mengatakan "Python 2 - 26"?
13

Python 2, 26 (mungkin tidak diizinkan)

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

Itu tidak ditentukan secara spesifik, di mana urutan nomor yang akan dicetak.

Wrzlprmft
sumber
9

Python 2, 28

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

Python 2 - 20 (Mungkin tidak diizinkan)

Ini adalah python 2 spesifik dan mungkin curang karena mencetak daftar, tetapi karena semua angka berakhir di layar:

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

Python 2 di * NIX, 24

os.system('seq 0 2 100')

Jika Anda perlu menambahkan

import os

Maka totalnya adalah 33 karakter.

Ken A
sumber
Pintar - Ini mungkin lebih baik dalam beberapa kasus. Apakah ini spesifik OS?
isaacg
4
@isaacg Sangat banyak, seperti os.systempanggilan program sistem.
seequ
3
Jika itu diizinkan, maka os.system('a'), karena saya kebetulan memiliki program yang dipanggil adengan perilaku yang diinginkan pada sistem saya ..
OJFord
5
@OllieFord seq adalah bagian dari gnu coreutils. Anda tidak memiliki pengaruh yang cukup banyak.
Sparr
4

Python 3, 29

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

Jika Anda menggunakan Python 2 dan kebetulan sudah mengimpor fungsi cetak, Anda tidak harus menjadikan objek iterator ke dalam daftar dan itu menjadi 25 karakter:

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

Saya tidak tahu itu sepenuhnya adil.

Inilah ide lain yang menyenangkan yang bekerja di python 2 atau 3. Ini sedikit lebih lama.

def p(i):
    if i+2:p(i-2);print i
p(100)
IanH
sumber
1
Versi Python 3 dapat disingkat *a,=map(print,range(0,101,2))menggunakan Extended Iterable Unpacking .
flornquake
@flake, terima kasih, saya telah memperbaruinya.
IanH
3

Python 2 - 24

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

(berdasarkan pada solusi bitpwner dan Sparr)

Dalam shell, "_" berisi nilai ekspresi yang dievaluasi sebelumnya

le_vine
sumber
Anda harus mencatat bahwa ini hanya berfungsi, jika disisipkan ke mode interaktif dari beberapa penafsir Python (misalnya, itu tidak berfungsi dalam IPython) dan bukan sebagai skrip.
Wrzlprmft
Anda benar, saya lupa menyebutkan itu. (btw bekerja di konsol Python standar)
le_vine
1
-1 - Pertanyaan secara eksplisit menyebutkan skrip python , yang berarti kode harus ditulis ke file dan dieksekusi. Kalau tidak, solusi yang lebih baik adalah: range(0,102,2)karena ini akan menampilkan semua angka genap (ditambah beberapa koma dan dua tanda kurung) di layar.
Bakuriu
1

Pemahaman Daftar Python - 39

Ini menggunakan pemahaman daftar, salah satu trik untuk membuatnya lebih pendek adalah dengan mengalikan indeks dengan 2 daripada pergi dari 0 hingga 100 dan pemeriksaan trailing if x % 2untuk genap.

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

Menggunakan peta dan saran @ isaacg, itu akhirnya menjadi karakter yang sama:

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

Sunting: Setelah memisahkan nilai dengan baris baru, ini bukan yang terpendek.

Ed Griebel
sumber
1
Ini tidak menjawab pertanyaan - kata OP prints the even numbers from 0 to 100 , bukan hanya menghasilkan mereka. Juga, jika Anda hanya menginginkan daftar, range(0,101,2)lebih pendek.
isaacg
1
@isaacg Diperbarui untuk menjawab pertanyaan, sekarang jauh lebih lama, perlu menyematkan setiap nilai di str () untuk bergabung membunuh itu.
Ed Griebel
@Wrzlprmft Terima kasih atas sarannya, tidak tahu saya bisa melakukan itu! Kode diubah untuk mencerminkan pengetahuan baru ini.
Ed Griebel
1

Python 2 - 20 (dipertanyakan)

Jika solusi pisah ruang isaacg OK, maka mungkin pemformatan daftar normal juga:

print range(0,101,2)

Untuk memutar aturan lebih lanjut, terapkan saran SirBraneDamuj dari komentar:

print range(101)

dan Anda berusia 16 tahun. Jadi bagaimana jika ada sampah ekstra yang memisahkan mereka?

pengguna30687
sumber