สคริปต์ python ที่เล็กที่สุดในการพิมพ์เลข 0 ถึง 100


11

ฉันทำงานกับปัญหาที่ฉันตั้งตัวเองเพื่อความสนุกสนานซึ่งก็คือการสร้างสคริปต์หลามซึ่งพิมพ์ตัวเลขคู่จาก 0 ถึง 100 ความท้าทายคือการทำให้สคริปต์มีขนาดเล็กที่สุดเท่าที่จะทำได้ นี่คือสิ่งที่ฉันมี:

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

ปัจจุบันมีขนาด 60 ไบต์ มีใครคิดวิธีที่จะทำให้มันเล็กลงได้ไหม?


แก้ไข: print(*range(2,101,2),sep='\n')ซึ่งคือ 30 ไบต์ เล็กกว่านี้ไหม?


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

2
เคล็ดลับนี้ตั้งอยู่ในเคล็ดลับการเล่นกอล์ฟหลามหน้าcodegolf.stackexchange.com/questions/54/...
Vectorized

4
นี้คือควรจะเริ่มต้นที่0หรือ2? ฉันไม่ได้หลามมากนัก แต่ดูเหมือนว่าฉันสองตัวอย่างของคุณจะทำสิ่งที่แตกต่าง โปรดแก้ไขฉันถ้าไม่
Geobits

20
print "0 10 100"(เป็นไบนารี่โอเค?)
r3mainer

1
@squeamishossifrage อย่าลืมตีกอล์ฟออกนอกพื้นที่;)
isaacg

คำตอบ:


37

Python 2 - 12 ตัวอักษร

print 8**999

การแทนค่าทศนิยมของตัวเลขคู่ทั้งหมดจาก 0 ถึง 100 สามารถพบได้ในผลลัพธ์:

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

เป็นโบนัสจึงสามารถเป็นเลขคี่ได้


ปัญหาเท่านั้น: มันพิมพ์ตัวเลขคี่และมากเกินไป
seequ

1
@ ซิกแม้และแปลก ... ได้ฐานครอบคลุมทั้งหมดไม่แน่ใจว่าคุณพบ "มากขึ้น" ในที่ ;)
paqogomez

ไม่ใช่ครั้งแรกที่ฉันมีความคิดเห็นที่แตกต่างจากผู้ใช้รายอื่น ฉันชอบคำตอบของคุณ
seequ

@paqogomez ใช้เลขคู่ 0-100, เลขคี่, และเลขคู่อื่น ๆ อีกมากมาย> 100
OJFord

อยากรู้อยากเห็นมากเกินไปที่จะหลีกเลี่ยงการถามคำถามโง่ทำไมโดยเฉพาะ 8 * 999?
0xc0de

31

Python 3, 22 (อาจไม่ได้รับอนุญาต)

หากความท้าทายคือ "เพื่อสร้างสคริปต์ python ซึ่งพิมพ์หมายเลขคู่จาก 0 ถึง 100" และไม่ใช่ "เพื่อสร้างสคริปต์ python ซึ่งพิมพ์หมายเลขคู่จาก 0 ถึง 100, บรรทัดใหม่คั่นด้วย " ทางออกที่สั้นที่สุดคือ:

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

จำไว้ว่ามันสำคัญมากในการตีกอล์ฟที่จะไม่วางข้อ จำกัด ใด ๆ กับตัวคุณเองโดยที่คุณไม่ต้องทำสิ่งที่ปัญหาถามและไม่ต้องทำอีกต่อไป


1
คำตอบที่สองของ OP ในการแก้ไขไม่ทำให้คุณคิดว่าเขาต้องการให้มีการขึ้นบรรทัดใหม่หรือไม่
Moop

10
นั่นอาจเป็นไปได้ทั้งหมดและเป็นเหตุผลที่possibly not allowedอยู่ในชื่อ ในอีกทางหนึ่งก็เป็นไปได้ว่าเขา / เธอถูกจับในการจับคู่ผลลัพธ์ของโปรแกรมเริ่มต้นของเขาและลืมข้อมูลจำเพาะปัญหาเบื้องต้น เนื่องจากฉันไม่รู้ว่าเป็นกรณีใดฉันจึงให้คำตอบนี้
isaacg

22

Python2 26

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

การค้นพบอิสระของโซลูชันของ @ bitpwner


ฉันได้รับ SyntaxError เมื่อฉันพยายามเรียกใช้ บรรทัดบนสุดของคำตอบนี้ควรพูดว่า "Python 2, 26" หรือไม่?

+1 คุณดูเหมือนจะเร็วขึ้น 58 วินาทีในการโพสต์โซลูชันนี้ :)
Ilmari Karonen

19

Python 2 - 26

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

ขึ้นอยู่กับเคล็ดลับใน exec กับสตริงคูณพบเคล็ดลับสำหรับการเล่นกอล์ฟในหลาม


ควรมี 0 ดูวิธีแก้ปัญหาของ Sparr
isaacg

ฉันได้รับ SyntaxError เมื่อฉันพยายามเรียกใช้ บรรทัดบนสุดของคำตอบนี้ควรพูดว่า "Python 2 - 26" หรือไม่?

13

Python 2, 26 (อาจไม่ได้รับอนุญาต)

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

ไม่ได้ระบุอย่างเข้มงวดซึ่งจะพิมพ์ตัวเลขตามลำดับ



9

Python 2 - 20 (อาจไม่ได้รับอนุญาต)

นี่คือ python 2 ที่เฉพาะเจาะจงและอาจเป็นการโกงเนื่องจากจะพิมพ์รายการ แต่เนื่องจากตัวเลขทั้งหมดจบลงที่หน้าจอ:

print range(0,101,2)

7

Python 2 ใน * NIX, 24

os.system('seq 0 2 100')

หากคุณต้องการเพิ่ม

import os

จากนั้นทั้งหมดคือ 33 ตัวอักษร


Clever - นี่อาจดีกว่าในบางกรณี มันเป็นระบบปฏิบัติการที่เฉพาะเจาะจง?
isaacg

4
@isaacg เป็นอย่างมากดังนั้นเมื่อos.systemเรียกใช้โปรแกรมระบบ
seequ

3
หากที่ได้รับอนุญาตแล้วos.system('a')เพราะผมเกิดขึ้นจะมีโปรแกรมที่เรียกว่าaมีพฤติกรรมที่ต้องการในระบบของฉัน ..
OJFord

5
@OllieFord seq เป็นส่วนหนึ่งของ gnu coreutils คุณไม่มีอิทธิพลค่อนข้างมาก
Sparr

4

Python 3, 29

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

หากคุณอยู่ใน Python 2 และมีการนำเข้าฟังก์ชั่นการพิมพ์แล้วคุณไม่จำเป็นต้องทำวัตถุตัววนซ้ำลงในรายการและมันจะกลายเป็น 25 ตัวอักษร:

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

ฉันไม่รู้ว่ามันยุติธรรมทั้งหมด

นี่เป็นแนวคิดที่สนุกสนานอีกอย่างหนึ่งที่ทำงานใน python 2 หรือ 3 ได้อีกต่อไป

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

1
รุ่นหลาม 3 สามารถลงไป*a,=map(print,range(0,101,2))ใช้ขยาย Iterable เอาออก
flornquake

@ flornquake ขอบคุณฉันได้อัปเดตแล้ว
IanH

3

Python 2 - 24

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

(ขึ้นอยู่กับ bitpwner และโซลูชั่น Sparr)

ในเชลล์ "_" มีค่าของนิพจน์ที่ประเมินก่อนหน้านี้


คุณควรทราบว่าวิธีนี้ใช้งานได้หากวางลงในโหมดโต้ตอบของล่าม Python บางตัว (เช่นจะไม่ทำงานใน IPython) และไม่เป็นสคริปต์
Wrzlprmft

คุณถูกต้องฉันลืมที่จะพูดถึงว่า (btw ทำงานในคอนโซล Python มาตรฐาน)
le_vine

1
-1 - คำถามที่กล่าวถึงสคริปต์หลามอย่างชัดเจนซึ่งหมายความว่ารหัสควรจะเขียนไปยังไฟล์และดำเนินการ มิฉะนั้นทางออกที่ดีกว่าก็คือ: range(0,102,2)เนื่องจากจะแสดงตัวเลขคู่ทั้งหมด (รวมถึงเครื่องหมายจุลภาคและวงเล็บสองอัน) บนหน้าจอ
Bakuriu

1

Python List เข้าใจ - 39

วิธีนี้ใช้ list comprehension หนึ่งเคล็ดลับที่ทำให้สั้นกว่าคือการคูณดัชนีด้วย 2 แทนที่จะไปจาก 0 ถึง 100 และif x % 2ตรวจสอบการลากต่อเนื่อง

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

การใช้แผนที่และคำแนะนำของ @ isaacg ทำให้มีอักขระ 39 ตัวเหมือนกัน:

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

แก้ไข: หลังจากการแยกค่าด้วยการขึ้นบรรทัดใหม่มันไม่ได้สั้นที่สุด


1
นี่ไม่ได้ตอบคำถาม - OP บอกว่าprints the even numbers from 0 to 100ไม่ใช่แค่สร้างมันขึ้นมา นอกจากนี้หากคุณต้องการให้รายการrange(0,101,2)สั้นลง
isaacg

1
@isaacg อัปเดตเพื่อตอบคำถามตอนนี้ใช้เวลานานขึ้นต้องฝังค่าแต่ละค่าใน str () สำหรับการเข้าร่วมฆ่ามัน
Ed Griebel

@Wrzlprmft ขอบคุณสำหรับข้อเสนอแนะไม่ทราบว่าฉันสามารถทำได้! เปลี่ยนรหัสเพื่อสะท้อนความรู้ใหม่นี้
Ed Griebel

1

Python 2 - 20 (สงสัย)

หากโซลูชันที่คั่นด้วยช่องว่างของ isaacg นั้นตกลงการจัดรูปแบบรายการปกติน่าจะเป็นเช่นกัน:

print range(0,101,2)

สำหรับการบิดกฏเพิ่มเติมให้ใช้คำแนะนำของ SirBraneDamuj จากความคิดเห็น:

print range(101)

และคุณอยู่ที่ 16 ดังนั้นถ้ามีขยะพิเศษแยกพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.