競プロ

闇に近づくPython【Python競プロ】

こんにちは、チズチズです!

競プロにおいてコードの短さは重要ですよね。

もちろん短すぎて可読性が著しく低くなってるものもありますが、基本は短いものが良いとされています。

処理速度は気にせずにただ短縮させるコードです。

基本

まずは、ここからやってみましょう。

記号と文字は隣接

普段は読みやすいように=の間、「,」の後ろ1文字は半角スペースを入れることが望ましいです。

しかし、これらは隣接させても問題なく動きます。

これ以外でも、

(内包表記)for

でも動きます。(内包表記においてforの前に[]等があったときはくっつけられる

記号と文字は干渉しません。

変数名、関数名の短縮

なるべく1文字にします。

テスト用は文字は何文字だろうと構いませんが、ショートコードには変数名や関数名は1文字が不可欠です。

ワンライナー

内包表記に触れる

if~else~やfor~の処理は大抵1行で書けます。

上のコードは内包表記ではありませんが、内包表記に近いので入れました。

pythonの内包表記を少し詳しく

内包表記についてはこちらがとても詳しいです。

リストをforで全探索させて条件分岐させて処理するのなら確実に内包表記を使いましょう。

行数、インデントを減らす

まず、行と行は「;」で連結させることで改行扱いできます。

(for中には使っちゃいけない

このように短縮させることも出来ます。

細かいところ

2乗の場合のみですが、**で累乗計算するよりも普通に掛け算したほうが短縮できます。

iに代入する必要がない場合は、_にすることで計算時間を減らせます(オマケ

n回同じ処理をしたい場合は、range(n)よりも

[0]*n にしたほうが短くなります。

※_と文字はくっつけたらエラー出ます

forを2回以上使う場合は、rにrangeを代入させることで毎回のrange()の入力がr()で済みます。

print()の中にぶち込むことは簡単です。

print()のみに使ってる変数は定義せずにprint()の中に突っ込もう!

内包表記だった場合は、[]外しても動きます。(sum()等関数で囲んでない場合は数が表示されないから注意

変数に代入するものが同じであれば連結させられます

闇Python

本当の闇になると、lamda関数を使ったりmap()を駆使させたりと使ったことのないような関数が出てきます。

可読性はどんどん下がりますが、文字数は減ります。

Pythonの無名関数(ラムダ式、lambda)の使い方

ラムダ式についてもこれは基礎であって、これを応用させる方法は説明しきれませんしまだ僕には使いこなせません。

闇になれば闇になるほどコードの修正が面倒なので、綺麗なコードを残しておいて闇にさせるのをオススメします。

本当の秀才

提出 #4058349

例えばこの人のようなコードなのですが、発想がもう…っていうコードがあります。

そのようなコードは単純な発想では到底不可能ですし、字数だって2番目と大きく離しています。

今までは、元のコードの字数を色んな方法で減らしただけですがこのコードは発想から変わっています。

最終的には新しい発想…ですかね…

ただ、単純にワンライナーにしただけでも相当短くなりますw

 

お読みいただいてありがとうございました

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です