コードゴルフのススメ(c言語)
DESCRIPTION
Sapporo.cpp #2 LT枠で発表させてもらったもの。TRANSCRIPT
![Page 1: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/1.jpg)
コードゴルフのススメ( C言語)
横山 文人(@tututen)
![Page 2: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/2.jpg)
自己紹介 社会人 1年生(北見工業大学 大学院卒)
LOCAL学生部 OB 学生の方で興味があれば
作品とか作らないプログラマ 言語仕様でいろいろ簡単なものを作るのが大好き
パネルでポンの対戦者募集中(ry
![Page 3: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/3.jpg)
コードゴルフ 【 code golf】より少ないバイト数で所与の課題をプログラミングする遊び。より少ない打 (鍵 )数を競うところがゴルフに似
ているところからの命名。 (はてなキーワード)
ある処理に対して、できるだけ短く記述する行為
LL( Lightweight Language)が主流 ↑主に、 Perl、 PHP、 Ruby、 Python
![Page 4: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/4.jpg)
コードゴルフの利点 いろいろな書き方を覚えることができる
「こう書いたら読みにくい」の書き方
スパゲッティコードを読む根気が養われる アンチコードを LTネタとして用意できる
![Page 5: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/5.jpg)
コードゴルフの欠点 実用性皆無 趣味の領域 ただ短くするだけでは、手法が偏ってしまう →そこで、ただ短くするだけではなく難読化や手法の改善・改悪などを重視して書き換えることも行うとよい
![Page 6: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/6.jpg)
コードゴルフのネタ 見つけたソースがすべてがネタ ここでは「1~10を表示する」を例にプログラムを例に紹介いていこうと思います。
![Page 7: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/7.jpg)
基本形
![Page 8: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/8.jpg)
コードゴルフの方針 変数を 1文字にする 無駄な空白、中括弧({})を省く いろんな処理を 1行にまとめる なるべく、英数字を使わない(←俺俺ルール)
![Page 9: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/9.jpg)
第 1形態
![Page 10: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/10.jpg)
解説 変数名を「 _」にした
int _; 初期化の部分を条件式で 0と 1を再現した
_ = _!=_ // i = 0 _ + (_ == _) // i + 1
括弧の間のスペース削除 コマンドライン引数の削除
![Page 11: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/11.jpg)
第 2形態
![Page 12: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/12.jpg)
解説 数字「 10」をビット演算で生成
int ten=1<<3|1<<1; //0b1010 => 10 int $=_<<_+_+_|_<<_;
’改行コード \n’を 10と置き換える printf(“%d\n”, i + 1); printf(“%d%c”, i + 1, 10); printf(“%d%c”,_+(_==_),$);
![Page 13: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/13.jpg)
tututen的最終形態
![Page 14: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/14.jpg)
解説
しません! LT枠では少し時間が短すぎる
![Page 15: コードゴルフのススメ(C言語)](https://reader038.vdocuments.site/reader038/viewer/2022100605/559e02d81a28ab156a8b4703/html5/thumbnails/15.jpg)
結び
C++と関係なくてごめんなさい
ご清聴ありがとうございました