Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Shinichiro Hamaji
ODP, PPTX
15,180 views
Code Golf
For talk about code golf in program symposium.
Technology
◦
Read more
13
Save
Share
Embed
Embed presentation
Download
Download as ODP, PPTX
1
/ 57
2
/ 57
3
/ 57
4
/ 57
5
/ 57
6
/ 57
7
/ 57
Most read
8
/ 57
9
/ 57
10
/ 57
11
/ 57
12
/ 57
13
/ 57
14
/ 57
15
/ 57
16
/ 57
17
/ 57
Most read
18
/ 57
19
/ 57
20
/ 57
21
/ 57
22
/ 57
23
/ 57
24
/ 57
25
/ 57
26
/ 57
27
/ 57
28
/ 57
29
/ 57
30
/ 57
31
/ 57
32
/ 57
33
/ 57
34
/ 57
35
/ 57
36
/ 57
37
/ 57
38
/ 57
39
/ 57
40
/ 57
41
/ 57
42
/ 57
43
/ 57
44
/ 57
45
/ 57
46
/ 57
47
/ 57
48
/ 57
49
/ 57
50
/ 57
51
/ 57
52
/ 57
53
/ 57
54
/ 57
55
/ 57
56
/ 57
Most read
57
/ 57
More Related Content
PDF
深層生成モデルと世界モデル(2020/11/20版)
by
Masahiro Suzuki
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
PDF
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
by
Kenichi Hironaka
PDF
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
by
CODE BLUE
深層生成モデルと世界モデル(2020/11/20版)
by
Masahiro Suzuki
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
プログラムを高速化する話
by
京大 マイコンクラブ
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
渡辺澄夫著「ベイズ統計の理論と方法」5.1 マルコフ連鎖モンテカルロ法
by
Kenichi Hironaka
ゼロから始める転移学習
by
Yahoo!デベロッパーネットワーク
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
by
CODE BLUE
What's hot
PDF
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
PDF
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
by
Unity Technologies Japan K.K.
PDF
Sift特徴量について
by
la_flance
PDF
【DL輪読会】NeRF in the Palm of Your Hand: Corrective Augmentation for Robotics vi...
by
Deep Learning JP
PDF
coordinate descent 法について
by
京都大学大学院情報学研究科数理工学専攻
PDF
先端技術とメディア表現1 #FTMA15
by
Yoichi Ochiai
PDF
Marp Tutorial
by
Rui Watanabe
PDF
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
by
Takateru Yamagishi
PDF
Rustに触れて私のPythonはどう変わったか
by
ShunsukeNakamura17
PDF
大規模データ時代に求められる自然言語処理
by
Preferred Networks
PDF
敵対的サンプル・摂動サーベイ
by
Simossyi Funabashi
PPTX
AIと最適化の違いをうっかり聞いてしまう前に
by
Monta Yashi
PDF
基礎線形代数講座
by
SEGADevTech
PDF
CUDAプログラミング入門
by
NVIDIA Japan
PDF
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
PPTX
【解説】 一般逆行列
by
Kenjiro Sugimoto
PDF
不遇の標準ライブラリ - valarray
by
Ryosuke839
PPT
レイトレ空間構造入門
by
Toru Matsuoka
PDF
ドロネー三角形分割
by
Yusuke Matsushita
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
by
Unity Technologies Japan K.K.
Sift特徴量について
by
la_flance
【DL輪読会】NeRF in the Palm of Your Hand: Corrective Augmentation for Robotics vi...
by
Deep Learning JP
coordinate descent 法について
by
京都大学大学院情報学研究科数理工学専攻
先端技術とメディア表現1 #FTMA15
by
Yoichi Ochiai
Marp Tutorial
by
Rui Watanabe
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
by
Takateru Yamagishi
Rustに触れて私のPythonはどう変わったか
by
ShunsukeNakamura17
大規模データ時代に求められる自然言語処理
by
Preferred Networks
敵対的サンプル・摂動サーベイ
by
Simossyi Funabashi
AIと最適化の違いをうっかり聞いてしまう前に
by
Monta Yashi
基礎線形代数講座
by
SEGADevTech
CUDAプログラミング入門
by
NVIDIA Japan
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
【解説】 一般逆行列
by
Kenjiro Sugimoto
不遇の標準ライブラリ - valarray
by
Ryosuke839
レイトレ空間構造入門
by
Toru Matsuoka
ドロネー三角形分割
by
Yusuke Matsushita
Similar to Code Golf
PDF
コードゴルフ 〜今日から始める難読コードの世界〜
by
Shingo Inoue
PPT
コードゴルフのススメ(C言語)
by
Fumihito Yokoyama
PPT
コードゴルフのススメ(C言語)
by
Fumihito Yokoyama
PPTX
オセロゲームでコードゴルフ
by
洸人 高橋
PDF
Mathematicaでgolf
by
aomori ringo
ODP
Shortcodin
by
Ken Ogura
PDF
ペアプロワークショップ
by
Yasui Tsutomu
ODP
Lt会01_uetch
by
Tomoaki Ueda
PDF
Procon 20111031
by
Junichi Ito
PPT
Introduction to programming competition
by
yak1ex
PDF
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
by
鉄次 尾形
PDF
ゴルフ
by
Takesxi Sximada
PDF
Introduction to programming competition [revised][PDF]
by
yak1ex
PDF
ゴルフ
by
Takesxi Sximada
KEY
Haskell golf intro
by
notogawa
PDF
競技プログラミングの楽しみ
by
na_o_ys
PDF
プログラミング
by
saireya _
PPTX
競プロでGo!
by
鈴木 セシル
PPTX
AtCoder Beginner Contest 004 解説
by
AtCoder Inc.
PDF
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
by
mametter
コードゴルフ 〜今日から始める難読コードの世界〜
by
Shingo Inoue
コードゴルフのススメ(C言語)
by
Fumihito Yokoyama
コードゴルフのススメ(C言語)
by
Fumihito Yokoyama
オセロゲームでコードゴルフ
by
洸人 高橋
Mathematicaでgolf
by
aomori ringo
Shortcodin
by
Ken Ogura
ペアプロワークショップ
by
Yasui Tsutomu
Lt会01_uetch
by
Tomoaki Ueda
Procon 20111031
by
Junichi Ito
Introduction to programming competition
by
yak1ex
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
by
鉄次 尾形
ゴルフ
by
Takesxi Sximada
Introduction to programming competition [revised][PDF]
by
yak1ex
ゴルフ
by
Takesxi Sximada
Haskell golf intro
by
notogawa
競技プログラミングの楽しみ
by
na_o_ys
プログラミング
by
saireya _
競プロでGo!
by
鈴木 セシル
AtCoder Beginner Contest 004 解説
by
AtCoder Inc.
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
by
mametter
Code Golf
1.
Code Golfについて Shinichiro
Hamaji <shinichiro.hamaji _at_ gmail.com> 2007 年 8 月 9 日 夏のプログラムシンポジウム
2.
概要 Code Golfとは
歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
3.
概要 Code Golf
とは 歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
4.
Code Golfとは ゴルフ:
少ないストローク数でホールインすることを競う Code Golf: 少ないストローク(打鍵)数で仕様を満たすプログラムを書くことを競う ショートコーディングなどとも
5.
具体例(仕様) 空行削除: 標準入力から受け取った文章から改行だけの行を除去しろ。
http://golf.shinh.org/p.rb?delete+blank+lines
6.
具体例(投稿) コードを書いて Webフォームから投稿すると
サーバが自動的に実行して動作確認して OKなら記録が残る
7.
具体例(圧縮) 適当に縮めて37B 短さだけが正義
#includeしてない intの省略、mainの引数が一つだけ int*をgetsに渡してputsに至っては引数省略 リトルエンディアンを仮定 @ (ASCIIで64)で始まる文字列が来ないと仮定
8.
具体例(制約条件) 基本的にはなんでもアリではあるものの 外部プロセス呼び出し禁止
main(){system("perl ...");} モジュール禁止 ファイル入出力禁止 制限時間 バイナリ文字列の使用制限 eval Zlib.decode("*BINARY*") などの制限がつくことも
9.
概要 Code Golfとは
歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
10.
歴史 おそらくオリジナルはPerl Golf
プログラムで変なことさせたらPerlは天下一品 2001年にはNewsGroupでコンペティションが 520ページにも及ぶPerlgolf History Book http://perlgolf.sf.net/ もちろんそれ以前にもコードサイズを縮める文化は多数存在していた 「ハッカーズ」によるとMITの学生はコードサイズを縮めることに魂を注ぎ込んでいた IOCCCにも短いコードは何度も登場
11.
歴史2 Code Golf
(2006/5~) http://codegolf.com/ Perl だけでなく、Ruby, Python, PHPも使用可 運営者が出題して真剣に競う 休止気味? Anarchy Golf (2007/01~) http://golf.shinh.org/ 約50言語をサポート ユーザーが出題して適当に競う
12.
参加者 Code Golfサイトのtop10中6(7?)人が日本人
http://golf.shinh.org/ 全部で: 400000 access/month トップ: 30000 access/month ~1000 unique users ちょっとしたブーム?
13.
Short Coders C言語では北京大学がICPCなどの練習用として公開しているオンラインジャッジシステムを用いてゴルフをする文化がある
他のゴルフよりややアルゴリズム重視 Short Coding 職人達の技法
14.
ゴルフで人気の言語
15.
ゴルフに強い言語
16.
概要 Code Golfとは
歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
17.
意義 昔はコードサイズ=実行速度だった 今でもハードウェア屋だと命令数は重要
とはいえ現在では基本的にゴルフによって作られたコードは実用性は皆無 メンテ不能 最速・省メモリとも限らない というわけで 基本的には Just for Fun だと、私は考えています
18.
何がおもしろいのか? 一般化はできないのですが、個人的には パズルゲームとして
コードを眺めつつチマチマ削るのは数独などのパズルに通じるものがあるかも 元々ヘンなコードが好き Quine, Polyglot, esoteric languages プログラム言語の可能性 1000ケタの円周率をbzip2で圧縮して524B Rubyだと54B
19.
副産物としての意義 プログラマのための頭の体操 新しい言語を学ぶ時にとりあえずゴルフの問題を解いてみるという学習法
ゴルフのためにRubyを覚えたゴルファー、優秀な成績を残すがclassの書き方すら知らない事件 短いイディオムや言語機能は身につく ひとつやり方を覚えると使い続けてしまう現象 勝ちたければ新しい表現を模索する必要がある 実は短いコードはたいてい速い 最初は時間制限にひっかかったけど縮めていたら通ったり
20.
概要 Code Golfとは
歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
21.
基本はアルゴリズム 意外にも、最も差がつく部分 例えば自分が100Bで解いた問題を他の人が70Bで解いてたら間違いなくアルゴリズムが違う
とにかく色んな方法で問題をとらえてみる 多くの場合、速いアルゴリズムは短い 特に長い/難しい問題では
22.
空行削除問題アゲイン 空行削除をCの感覚でRubyで解いてみると 適当に縮める
22B 21B
23.
発想の転換 「一行ずつ読んで空行じゃなきゃ表示する」->「全部読んで空行だけの行を捨てる」 良いアルゴリズム>細かい小細工
18B! 暗号化 ゴルフイディオム適用 14B!
24.
中置記法->後置記法問題 普通に考えると再帰下降のパーサとか書く Shunting
yard algorithm とかいうのがあるらしい 間違いなく暗号(104B)
25.
処理系におまかせ Rubyはもともと中置記法->eval a,b,c,dは未定義な変数->method_missing
逆にpが定義済みなので邪魔->undef 短くなったのに暗号度大幅にダウン http://www.kmonos.net/wlog/71.html#_2014070301 61B!
26.
概要 Code Golfとは
歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
27.
暗号記述言語Perl Hello, world!
by ppencode (http://www.namazu.org/~takesako/ppencode/demo.html)
28.
暗号記述言語Perl rev(1) 明らかに括弧の対応がおかしい
29.
暗号記述言語Perl 実は-pオプションは前後にプログラムコードを追加しているだけというすごい実装
30.
マインスイーパ まわりにある爆弾の数を数える Perl
Golf history book p.268 http://terje2.frox25.no-ip.org/perlgolf_history_070109.pdf
31.
Insane Perl Golfers
36B (ただしPerl Golfでは#!perlはカウントしない) 正規表現1個で終了 しかもほぼ同一の解に4人が到達
32.
正規表現の構文でループ shebangは入力を全て$_に入れるという意味 $_="
........\n........\n....***.\n …"; s!\.!!eg は、全ての.を、右辺を実行した結果に置き換える、という意味 s///egはループの代用としてよく使われる
33.
悪魔の数字 $`はマッチした部分の 左側文字列
666e6=666000000 666e6x3= 666000000666000000666000000 まさにマジックナンバー ここがマッチ したとする
34.
悪魔の数字 $`はマッチした部分の 左側文字列
666e6=666000000 666e6x3= 666000000666000000666000000 つまり右図のような文字列…?
35.
謎の特殊変数 $^は"STDOUT_TOP"という文字列 10Byte(8+1+1)の文字列なら
なんでも良かった $_ は最初に全部読み込んだ 一行と一列 だけずれた
36.
文字列& 全ての文字に対して論理和 &
=
37.
mapで数を数える言語 後は "
の数を数えるだけ 神秘的な理由により、 Perl では関数型言語でおなじみの map 関数を使って文字列中に出現した部分文字列の数を数えることができる
38.
C 機械語をはじめとして、低レベル技術と仲良しであることが必要 スタックやらポインタやら
ビット演算 ~演算子 x*(x+1) vs. x*-~x -10 vs. ~9 for(;~scanf("%d");)
39.
qsort
40.
qsort (正しい実装) intをソートしたい
完全に問題の無い実装 ゴルフとしては0点
41.
qsort (入力依存) intをソートしたい
型宣言を消して引き算でかえり値を計算 オーバーフローの危険 ゴルフとしては50点
42.
qsort (引数減らし) intをソートしたい
メモリ空間の知識がないと理解できない C言語の知識がないと理解できない
43.
qsort (return消し) intをソートしたい
アセンブリの知識がないと理解できない 代入しとけばEAXに残ったままの場合がある
44.
qsort (x86) intをソートしたい
Cは匿名関数をサポートした言語 これで短くなるのはCISCの神秘 11Byteで9命令 pop, pop, pop, push, push, push, mov, sub, ret 処理系依存でさらに短くなったりも
45.
まとめ Code Golf
について概要および実際のコードを紹介しました 言語自身や処理系の癖などについて、広い知識が必要なパズル たぶん時間がないと思って割愛しましたが、OCaml, Haskell, LISP, PHP, PostScript, sed, Bash, Brainf*ck, Befungeでのゴルフや、サーバの構成について補足としてつけました
46.
概要 Code Golfとは
歴史や派閥など 意義と面白さ アルゴリズム選択の重要性 なんでもアリの最小化 各言語のゴルフ
47.
OCaml 関数名が長い(print_string) 型システムをいかに騙すか
Trueより1>0 if c then print_stirng"hoge" より c&()=print_string"hoge" 切り札Obj.magic 自然対数の底の小数点以下を100ケタ表示せよ http://d.hatena.ne.jp/KeisukeNakano/20070319/1174307629
48.
Haskell 割と強い Cより強くてスクリプト言語に負けるくらい
気の効いた標準関数群 interact :: (String -> String) -> IO() 細かいシンタクスシュガー $で括弧を除去 main再帰
49.
CLISP / Scheme
あまり強くない? マクロがあるとは言うけれど そもそもマクロが生きるほど長い問題は少なめ 可読性無視のゴルフでは、LISPのマクロが使える局面では、スクリプト言語のevalも使える
50.
PHP Hello, world!最強言語
基本的には長い標準関数名が不利でスクリプト言語としてはイマイチ ereg_replace
51.
PostScript 割と強い その上バイナリ表現ができる
52.
sed 実は四則演算やソートくらいはできる 単純な問題で無類の強さ
空行除去5B ただし、難しい問題はそもそも制限時間内に解けないことが多い
53.
Bash FizzBuzz最強 1から100まで数え上げていって、3の倍数ならFizzを、5の倍数ならBuzzを、15の倍数ならFizzBuzzを出力し、それらでなければその数値を出力する。
54.
Brainf*ck ただ解くだけでも大変 データの用意のしかたが重要
16を用意したいのなら… メモリ領域を喰いつぶしていく 0クリアしたい場合、[-]とかするより>で新しいメモリアドレスに 空行除去
55.
Befunge 2D言語ゴルフ 演算能力は結構ある
calを253Bで 非常に独特のパズルに なるべく左寄せ 行数は少なく
56.
x86 ELFヘッダとプログラムヘッダと機械語をがんばって重ねる http://shinh.skr.jp/binary/fsij061115/
CISCマジック 1Bでも強力な子たち: push, pop, inc, dec, ... decでZFが立つとか for (int i = 0; i < 10; i++) { ... } for (int i = 10; --i; ) { ... } 未だに残る8bitレジスタ群 2Bで計算実行
57.
サーバ構成 Celeron 1.7GHz,
384MB, Ubuntu linux 負荷記録: 20000access/6hours Webサーバ(lighttpd & mod_fastcgi) 実行以外の全てを担当 実行サーバ(Xen) 基本的にノーガード fork連打やファイル書き込みで破壊可能 ネットワークはホストとしかつながっていない 人様には迷惑をかけない exec(2)対策にstrace(1)を利用
Download