81
CodeJP2013で行った ショートコーディング について

Code jp2013で行った ショートコーディング について

Embed Size (px)

Citation preview

Page 1: Code jp2013で行った ショートコーディング について

CodeJP2013で行った

ショートコーディング

について

Page 2: Code jp2013で行った ショートコーディング について

Who am I ?

@tututen (momo_*)

業務→vim + C言語( not C++ )

趣味→アセンブラを読む

パネポンを1人2役でやれる!

Page 3: Code jp2013で行った ショートコーディング について

Who am I ?

@tututen (momo_*)

業務→vim + C言語( not C++ )

趣味→アセンブラを読む

パネポンを1人2役でやれる!

Page 4: Code jp2013で行った ショートコーディング について
Page 5: Code jp2013で行った ショートコーディング について
Page 6: Code jp2013で行った ショートコーディング について
Page 7: Code jp2013で行った ショートコーディング について
Page 8: Code jp2013で行った ショートコーディング について
Page 9: Code jp2013で行った ショートコーディング について
Page 10: Code jp2013で行った ショートコーディング について

次回

2014/07/19,20 の予定!

Page 11: Code jp2013で行った ショートコーディング について

ショートコーディングとは

ソースコードを短く書くこと

打数の少なさを競うのに似てることから

コードゴルフと呼ばれることも

Page 12: Code jp2013で行った ショートコーディング について

日本語に例えるなら

略語(ネットスラングやギャル語?)に近い

例:

微レ存→

とりま→

Page 13: Code jp2013で行った ショートコーディング について

日本語に例えるなら

略語(ネットスラングやギャル語?)に近い

例:

微レ存→◯◯である可能性が微粒子レベ

ルで存在している

とりま→

Page 14: Code jp2013で行った ショートコーディング について

日本語に例えるなら

略語(ネットスラングやギャル語?)に近い

例:

微レ存→◯◯である可能性が微粒子レベ

ルで存在している

とりま→とりあえず、まぁ

Page 15: Code jp2013で行った ショートコーディング について

ここで簡単な問題!

Page 16: Code jp2013で行った ショートコーディング について

http://jsfiddle.net/kQ4rD/

Page 17: Code jp2013で行った ショートコーディング について

http://jsfiddle.net/kQ4rD/

Page 18: Code jp2013で行った ショートコーディング について

1.100byte代

 

 

Page 19: Code jp2013で行った ショートコーディング について

1.100byte代

2.80byte代

 

 

Page 20: Code jp2013で行った ショートコーディング について

1.100byte代

2.80byte代

3.70byte代

Page 21: Code jp2013で行った ショートコーディング について

1.100byte代

2.80byte代

3.70byte代

4.もっと短くできる

Page 22: Code jp2013で行った ショートコーディング について

発表中に70byte未満に

もれなく景品があります!

Page 23: Code jp2013で行った ショートコーディング について

CodeJPのお題

Page 24: Code jp2013で行った ショートコーディング について

2380 byte の

JSコードを

Page 25: Code jp2013で行った ショートコーディング について

できるだけ短く書き直し

時計を動かす!

Page 26: Code jp2013で行った ショートコーディング について

ルール

index.htmlを編集するのはNG

動作するブラウザの種類は問わない

詳しくは「資料」を参照

https://github.com/yoshiakist/codegolf

Page 27: Code jp2013で行った ショートコーディング について

チーム編成

2−3人1チーム

A、B、C、D、Eチームの計5チーム

Page 28: Code jp2013で行った ショートコーディング について

クリア基準800 byte 台 : もっと頑張りましょう

 

 

 

 

Page 29: Code jp2013で行った ショートコーディング について

クリア基準800 byte 台 : もっと頑張りましょう

500 byte 台 : よくできました

 

 

Page 30: Code jp2013で行った ショートコーディング について

クリア基準800 byte 台 : もっと頑張りましょう

500 byte 台 : よくできました

400 byte 台 : たいへんよくできました

 

 

Page 31: Code jp2013で行った ショートコーディング について

クリア基準800 byte 台 : もっと頑張りましょう

500 byte 台 : よくできました

400 byte 台 : たいへんよくできました

300 byte 台 : 次回、このコーナー担当

 

Page 32: Code jp2013で行った ショートコーディング について

クリア基準800 byte 台 : もっと頑張りましょう

500 byte 台 : よくできました

400 byte 台 : たいへんよくできました

300 byte 台 : 次回、このコーナー担当

200 byte 台 : あなたが神か

Page 33: Code jp2013で行った ショートコーディング について

今回の課題の肝

変数宣言の省略

for文のデクリメント化

Math.floor(切り捨て)の代替

デジタル数字表記の省略

Page 34: Code jp2013で行った ショートコーディング について

変数宣言の省略

Page 35: Code jp2013で行った ショートコーディング について

変数宣言の省略

変数の長さを極力1文字に

varの省略(変数のグローバル化)

業務での使用、ダメ、絶対!!

minifyツールを使用することで対応可能

Page 36: Code jp2013で行った ショートコーディング について

for文のデクリメント化

Page 37: Code jp2013で行った ショートコーディング について

for文のデクリメント化

for (初期化; 継続条件; 変数更新)

変数の更新と継続条件が同時に出来る

これで3 byteは美味しいですね!

Page 38: Code jp2013で行った ショートコーディング について

Math.floorを使わずに切り捨て

Page 39: Code jp2013で行った ショートコーディング について

Math.floorを使わずに切り捨て

ビット演算をすると強制的に整数値に

これを式中で使う場合は演算子優先順位に注意

~演算子は優先順位高め

|演算子は優先順位低め

or演算子を使うかnor演算子どちらを使っても

byte 数は変わらない

Page 40: Code jp2013で行った ショートコーディング について

Math.floorを使わずに切り捨て

Page 41: Code jp2013で行った ショートコーディング について

デジタル数値表記の省略

http://jsfiddle.net/8D2c4/

Page 42: Code jp2013で行った ショートコーディング について

デジタル数値表記の省略

今回短くする上で一番のミソ

最終的にここの発想次第

 

Page 43: Code jp2013で行った ショートコーディング について

デジタル数値表記の省略

今回短くする上で一番のミソ

最終的にここの発想次第

以降、他人のソースコードを垣間見つつ

Page 44: Code jp2013で行った ショートコーディング について

第2位

Page 45: Code jp2013で行った ショートコーディング について

2位のチームのソース

うちの率いるチームです(362文字)

当初は上手い方法だと思っていました

運営者曰く「ソースを見ただけではやっ

てることがわかりませんでした」

Page 46: Code jp2013で行った ショートコーディング について

ソース

Page 47: Code jp2013で行った ショートコーディング について

ソース

Page 48: Code jp2013で行った ショートコーディング について

解説

“■■■”,”□□■”,”■□■”,”■□□”の4パターンというのを

利用

多次元配列を使ってい

たが、最終的に1次元が

有効手

Page 49: Code jp2013で行った ショートコーディング について

解説(m/10|0)(m%10):(s/10|0)(s%10)

Sは一時的に01の文字列保持(br含)

:(コロン)は4パターン外なので三項

演算子で対応

Page 50: Code jp2013で行った ショートコーディング について

改善点

forのデクリメント化

P配列の並びを逆順にするだけで対応可能

replace関数を2度使うのがそもそもナンセンス

これ以外即思いつかない時点で将来性がない

コード

Page 51: Code jp2013で行った ショートコーディング について

第1位

Page 52: Code jp2013で行った ショートコーディング について

優勝チームのソース

@sandinist さんの率いるチームです

(359文字)

運営側曰く「圧倒的な圧縮力とアルゴリズ

ムでの優勝!!その圧縮方法はまさにド変

態のそれと表現していいでしょう。」

Page 53: Code jp2013で行った ショートコーディング について

皆さん!この人です!!

Page 54: Code jp2013で行った ショートコーディング について

ソース

Page 55: Code jp2013で行った ショートコーディング について

ソース

Page 56: Code jp2013で行った ショートコーディング について

個人的な感想

運営も評してる通り変態

JSに慣れてないのがとても惜しい

噛めば噛むほど味がでるソース

Page 57: Code jp2013で行った ショートコーディング について

解説(できるかな…

Page 58: Code jp2013で行った ショートコーディング について

解説(できるかな…

Page 59: Code jp2013で行った ショートコーディング について

解説(できるかな…

Page 60: Code jp2013で行った ショートコーディング について

解説(できるかな…

Page 61: Code jp2013で行った ショートコーディング について

解説(できるかな…

Page 62: Code jp2013で行った ショートコーディング について

改善点var いらない

eの初期化いらない

b=h++ はf,gの初期化時

に代入すればいらない

<br/> → <br>

[(“”+parseInt(...)).slice(e,e+1) ]→ (“”+parseInt(...))[e]

innerHTMLへの代入方

ファイル末尾のセミコ

ロン排除

Page 63: Code jp2013で行った ショートコーディング について

改善後(328文字)

http://jsfiddle.net/ptU46/

Page 64: Code jp2013で行った ショートコーディング について

改善後(315文字)

http://jsfiddle.net/ptU46/2/

Page 65: Code jp2013で行った ショートコーディング について

如何でしたでしょうか?

Page 66: Code jp2013で行った ショートコーディング について

2380byte → 320byte前後

Page 67: Code jp2013で行った ショートコーディング について

2050byteのスリム化

Page 68: Code jp2013で行った ショートコーディング について

すばらしいド変態!!

Page 69: Code jp2013で行った ショートコーディング について

http://jsfiddle.net/kQ4rD/

Page 70: Code jp2013で行った ショートコーディング について
Page 71: Code jp2013で行った ショートコーディング について

どうですか?

Page 72: Code jp2013で行った ショートコーディング について

http://jsfiddle.net/kQ4rD/

Page 73: Code jp2013で行った ショートコーディング について

1.100byte代

2.80byte代

3.70byte代

4.もっと短くできる

Page 74: Code jp2013で行った ショートコーディング について

http://jsfiddle.net/gHLzq/

Page 75: Code jp2013で行った ショートコーディング について

http://jsfiddle.net/VarcL/

Page 76: Code jp2013で行った ショートコーディング について

おまけ

Page 77: Code jp2013で行った ショートコーディング について

ネットの人々は

もっとすごかった

Page 78: Code jp2013で行った ショートコーディング について

みんなの力を合わせたら

http://jsfiddle.net/3vegp/

Page 79: Code jp2013で行った ショートコーディング について

みんなの力を合わせたら

http://jsfiddle.net/3vegp/

Page 80: Code jp2013で行った ショートコーディング について

対戦しましょ?

Page 81: Code jp2013で行った ショートコーディング について

対戦しましょ?ご静聴ありがとうございました