コードゴルフのススメ(C言語)

3,989 views

Published on

Sapporo.cpp #2 LT枠で発表させてもらったもの。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,989
On SlideShare
0
From Embeds
0
Number of Embeds
1,230
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

コードゴルフのススメ(C言語)

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

×