0〜100の偶数を出力する最小のPythonスクリプト


11

私は楽しみのために自分自身で設定した問題に取り組んでいます。それは0から100までの偶数を出力するPythonスクリプトを作成することです。挑戦はスクリプトをできるだけ小さくすることです。これは私がこれまでに持っているものです:

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
ベクトル化

2
このヒントは、Pythonゴルフのヒントページcodegolf.stackexchange.com/questions/54/…にあります。
ベクトル化

4
これは0またはで始まるはず2ですか?私はあまりPythonをしませんが、あなたの2つの例は異なることをするように思えます。そうでない場合は私を修正してください。
ジオビット14

20
print "0 10 100"(バイナリは大丈夫ですか?)
r3mainer 14

1
@squeamishossifrageスペースをゴルフアウトすることを忘れないでください;)
isaacg 14

回答:


37

Python 2〜12文字

print 8**999

0から100までのすべての偶数の10進表現は、出力にあります。

153778990270139647116444851659594064330089236967104214470764753645007350076834118596920008479824182447803706156756475613564110522612279602948135310258168541404369918794480627176627915013920083365328091029969610052054309789461709376676636344651086297099162082351332867728061686056465813162964114500668343488577962834185114919242101638217077550294093097112980059735456387540301162747936045475366317560310988720435512281742591085641505551107966844283901574058972330493685836063965131445246304097593431852972101058022587137885482726523043570690342524474585327775688980689010069001288756281975198668705741000141718184277589376710426738442847382969979234512669279398030637083755270090078676447687796406001053805898105262326290072552249025832780916090265261064205460488458795026145331708830141367124625271312584437671840499845750728447412590406684361326531266896486146862384988911439049971734022314877278748672

ボーナスとして、奇数もできます。


唯一の問題:奇数とさらに多くを印刷します。
seequ 14

1
@Sieg、偶数と奇数...ちょっとすべてのベースがカバーされましたが、その中に「もっと多く」を見つける方法がわかりません。;)
paqogomez 14

私が他のユーザーと異なる意見を持っているのは初めてではありません。とにかくあなたの答えが好きです。
seequ 14

偶数0-100、奇数、そしてより多くの偶数> 100 @paqogomez
OJFord

馬鹿げた質問をするのを避けるにはあまりにも好奇心が強いのですが、なぜ8 * 999なのでしょうか?
0xc0de

31

Python 3、22(おそらく許可されない)

チャレンジが「0〜100の偶数を印刷するpythonスクリプトを作成する」であり、「0〜100の偶数を印刷する改行を区切る pythonスクリプトを作成する」ではない場合、最短の解決策は次のとおりです。

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

覚えておいてください、コードゴルフでは、あなたがする必要のない自分自身に制限を課さないことは非常に重要です-問題が求めることをしてください。


1
編集におけるOPの2番目の答えは、改行で区切ることを望んでいると思わないか?
ムープ14

10
それは完全に可能性possibly not allowedがあり、タイトルにある理由です。一方、最初のプログラムの出力と一致することに巻き込まれ、最初の問題の仕様を忘れてしまった可能性もあります。私はどちらが当てはまるかわからないので、この答えをしました。
isaacg 14

22

Python2 26

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

@bitpwnerのソリューションの独立した発見


実行しようとするとSyntaxErrorが発生します。この答えの一番上の行は「Python 2、26」と言うべきでしょうか?

+1、このソリューションを投稿するのに58秒早くなったようです。:)
イルマリカロネン14

19

Python 2〜26

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

Pythonでのゴルフのヒントにある文字列の乗算を使用したexecのヒントに基づいています。


0を含める必要があります。Sparrのソリューションを参照してください。
isaacg 14

実行しようとするとSyntaxErrorが発生します。この答えの一番上の行は「Python 2-26」と言うべきですか?

13

Python 2、26(許可されていない可能性があります)

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

番号が印刷される順序は厳密には指定されていません。




7

* NIXのPython 2、24

os.system('seq 0 2 100')

追加する必要がある場合

import os

合計は33文字です。


賢い-これは場合によっては優れている可能性があります。OS固有ですか?
isaacg 14

4
@isaacg os.systemシステムプログラムを呼び出すように、非常にそうです。
seequ 14

3
それが許可されている場合、 os.system('a')、私が呼ばれるプログラム持って起こるので、a私のシステム上に所望の動作をする...
OJFord

5
@OllieFord seqは、gnu coreutilsの一部です。それほど影響力はありません。
スパー

4

Python 3、29

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

Python 2を使用していて、既にprint関数をインポートしている場合、イテレーターオブジェクトをリストにする必要はなく、25文字になります。

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

しかし、それが完全に公平であることはわかりません。

python 2または3で動作する別の楽しいアイデアがあります。それは少し長いです。

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

1
Python 3バージョンは、Extended Iterable Unpacking*a,=map(print,range(0,101,2))使用するように短縮できます。
flornquake 14

@flornquakeありがとう、更新しました。
IanH

3

Python 2から24

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

(bitpwnerおよびSparrソリューションに基づく)

シェルでは、「_」には以前に評価された式の値が含まれます


これは、一部のPythonインタープリターの対話モードに貼り付けられた場合にのみ機能し(たとえば、IPythonでは機能しません)、スクリプトとして機能しないことに注意してください。
Wrzlprmft 14

あなたは正しい、私はそれを言及するのを忘れました。(ところで、標準のPythonコンソールで動作します)
le_vine 14

1
-1-質問は、Python スクリプトに明示的に言及しています。つまり、コードをファイルに書き込んで実行する必要があるということです。そうしないと、より良い解決策は単純になります。range(0,102,2)これは、すべての偶数(さらにいくつかのコンマと2つの括弧)を画面に表示するからです。
バクリウ14

1

Pythonリストの理解-39

これはリストの内包表記を使用します。短くするための1つのトリックは、インデックスを0から100に変更するのではなく、2で乗算し、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 14

1
@isaacg更新され、質問に回答するようになりました。今でははるかに長くなり、結合のためにstr()に各値を埋め込む必要があります。
エドグリベル14

@Wrzlprmft提案をありがとう、それができるとは知らなかった!この新しい知識を反映するようにコードが変更されました。
エド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.