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

Preview:

Citation preview

CodeJP2013で行った

ショートコーディング

について

Who am I ?

@tututen (momo_*)

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

趣味→アセンブラを読む

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

Who am I ?

@tututen (momo_*)

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

趣味→アセンブラを読む

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

次回

2014/07/19,20 の予定!

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

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

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

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

日本語に例えるなら

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

例:

微レ存→

とりま→

日本語に例えるなら

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

例:

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

ルで存在している

とりま→

日本語に例えるなら

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

例:

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

ルで存在している

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

ここで簡単な問題!

http://jsfiddle.net/kQ4rD/

http://jsfiddle.net/kQ4rD/

1.100byte代

 

 

1.100byte代

2.80byte代

 

 

1.100byte代

2.80byte代

3.70byte代

1.100byte代

2.80byte代

3.70byte代

4.もっと短くできる

発表中に70byte未満に

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

CodeJPのお題

2380 byte の

JSコードを

できるだけ短く書き直し

時計を動かす!

ルール

index.htmlを編集するのはNG

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

詳しくは「資料」を参照

https://github.com/yoshiakist/codegolf

チーム編成

2−3人1チーム

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

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

 

 

 

 

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

500 byte 台 : よくできました

 

 

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

500 byte 台 : よくできました

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

 

 

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

500 byte 台 : よくできました

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

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

 

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

500 byte 台 : よくできました

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

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

200 byte 台 : あなたが神か

今回の課題の肝

変数宣言の省略

for文のデクリメント化

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

デジタル数字表記の省略

変数宣言の省略

変数宣言の省略

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

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

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

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

for文のデクリメント化

for文のデクリメント化

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

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

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

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

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

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

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

~演算子は優先順位高め

|演算子は優先順位低め

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

byte 数は変わらない

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

デジタル数値表記の省略

http://jsfiddle.net/8D2c4/

デジタル数値表記の省略

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

最終的にここの発想次第

 

デジタル数値表記の省略

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

最終的にここの発想次第

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

第2位

2位のチームのソース

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

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

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

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

ソース

ソース

解説

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

利用

多次元配列を使ってい

たが、最終的に1次元が

有効手

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

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

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

演算子で対応

改善点

forのデクリメント化

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

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

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

コード

第1位

優勝チームのソース

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

(359文字)

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

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

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

皆さん!この人です!!

ソース

ソース

個人的な感想

運営も評してる通り変態

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

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

解説(できるかな…

解説(できるかな…

解説(できるかな…

解説(できるかな…

解説(できるかな…

改善点var いらない

eの初期化いらない

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

に代入すればいらない

<br/> → <br>

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

innerHTMLへの代入方

ファイル末尾のセミコ

ロン排除

改善後(328文字)

http://jsfiddle.net/ptU46/

改善後(315文字)

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

如何でしたでしょうか?

2380byte → 320byte前後

2050byteのスリム化

すばらしいド変態!!

http://jsfiddle.net/kQ4rD/

どうですか?

http://jsfiddle.net/kQ4rD/

1.100byte代

2.80byte代

3.70byte代

4.もっと短くできる

http://jsfiddle.net/gHLzq/

http://jsfiddle.net/VarcL/

おまけ

ネットの人々は

もっとすごかった

みんなの力を合わせたら

http://jsfiddle.net/3vegp/

みんなの力を合わせたら

http://jsfiddle.net/3vegp/

対戦しましょ?

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

Recommended