Upload
fumihito-yokoyama
View
555
Download
3
Embed Size (px)
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 の予定!
ショートコーディングとは
ソースコードを短く書くこと
打数の少なさを競うのに似てることから
コードゴルフと呼ばれることも
日本語に例えるなら
略語(ネットスラングやギャル語?)に近い
例:
微レ存→
とりま→
日本語に例えるなら
略語(ネットスラングやギャル語?)に近い
例:
微レ存→◯◯である可能性が微粒子レベ
ルで存在している
とりま→
日本語に例えるなら
略語(ネットスラングやギャル語?)に近い
例:
微レ存→◯◯である可能性が微粒子レベ
ルで存在している
とりま→とりあえず、まぁ
ここで簡単な問題!
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を使わずに切り捨て
デジタル数値表記の省略
今回短くする上で一番のミソ
最終的にここの発想次第
デジタル数値表記の省略
今回短くする上で一番のミソ
最終的にここの発想次第
以降、他人のソースコードを垣間見つつ
第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への代入方
法
ファイル末尾のセミコ
ロン排除
如何でしたでしょうか?
2380byte → 320byte前後
2050byteのスリム化
すばらしいド変態!!
進
捗
どうですか?
1.100byte代
2.80byte代
3.70byte代
4.もっと短くできる
おまけ
ネットの人々は
もっとすごかった
対戦しましょ?
対戦しましょ?ご静聴ありがとうございました