SlideShare a Scribd company logo
CodeJP2013で行った
ショートコーディング
について
Who am I ?
@tututen (momo_*)
業務→vim + C言語( not C++ )
趣味→アセンブラを読む
パネポンを1人2役でやれる!
Who am I ?
@tututen (momo_*)
業務→vim + C言語( not C++ )
趣味→アセンブラを読む
パネポンを1人2役でやれる!
Code jp2013で行った ショートコーディング について
Code jp2013で行った ショートコーディング について
Code jp2013で行った ショートコーディング について
Code jp2013で行った ショートコーディング について
Code jp2013で行った ショートコーディング について
Code jp2013で行った ショートコーディング について
次回
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 いらない

[(“”+parseInt(...)).slice(

eの初期化いらない

→ (“”+parseInt(...))[e]

e,e+1) ]

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

innerHTMLへの代入方

に代入すればいらない

法

<br/> → <br>

ファイル末尾のセミコ
ロン排除
改善後(328文字)

http://jsfiddle.net/ptU46/
改善後(315文字)

http://jsfiddle.net/ptU46/2/
如何でしたでしょうか?
2380byte → 320byte前後
2050byteのスリム化
ド変態!!

すばらしい
http://jsfiddle.net/kQ4rD/
Code jp2013で行った ショートコーディング について
進

どうですか?
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/
対戦しましょ?
対戦しましょ?

ご静聴
ありがとう
ございました

More Related Content

PDF
文字の正統性
PDF
プログラミング言語PRPR
PDF
Python2と3の互換性問題に立ち向かうときにまずやること
PDF
みんなのPython勉強会#62
PDF
リーダブルコード章:理解しやすいコードを読んだ考察
PPTX
#2 プログラミングせよ!
PDF
簡単な算数でできる文章校正
PDF
Epsode 3 4
文字の正統性
プログラミング言語PRPR
Python2と3の互換性問題に立ち向かうときにまずやること
みんなのPython勉強会#62
リーダブルコード章:理解しやすいコードを読んだ考察
#2 プログラミングせよ!
簡単な算数でできる文章校正
Epsode 3 4

More from Fumihito Yokoyama (20)

PDF
Aws その他の概要と勘所
PDF
Aws lambdaで[ソンナコ]を実装してみた
PDF
re:Inventで発表されたAWS Lambdaの更新情報と使い方考察
PDF
今年やってきた中で書いてきたコード
PDF
制約をつけて遊ぼう
PDF
Ohotech特盛 #11 Box2DWebを触ってみよう
PDF
Osc2014 聞くだけじゃもったいない!観客と発表者の双方向通信を実現する「投げ銭box」
PDF
投げ銭Boxのwebクライアントを作ってみた
PDF
Clrh87 minecraftでのタートルのご紹介
PDF
Ohotech 特盛#5 長距離運転の考察ver2
PDF
長距離運転の考察
PDF
リバーシの条件判定をlinqで
PDF
Clrh81 windowsで定期的にキャプチャするために
PDF
monoを使ってlt countdowntimerを動かしてみる
PDF
密着!わたしのコンソールアプリ開発環境
PDF
Linqで画像処理
PDF
LINQ を使ったナンプレの解法を作ったお話
PDF
Ldd kitami(宣伝用 clrh70)
PDF
関数型忘年会Lt用
PDF
Ohotech #8 tututen pdf用
Aws その他の概要と勘所
Aws lambdaで[ソンナコ]を実装してみた
re:Inventで発表されたAWS Lambdaの更新情報と使い方考察
今年やってきた中で書いてきたコード
制約をつけて遊ぼう
Ohotech特盛 #11 Box2DWebを触ってみよう
Osc2014 聞くだけじゃもったいない!観客と発表者の双方向通信を実現する「投げ銭box」
投げ銭Boxのwebクライアントを作ってみた
Clrh87 minecraftでのタートルのご紹介
Ohotech 特盛#5 長距離運転の考察ver2
長距離運転の考察
リバーシの条件判定をlinqで
Clrh81 windowsで定期的にキャプチャするために
monoを使ってlt countdowntimerを動かしてみる
密着!わたしのコンソールアプリ開発環境
Linqで画像処理
LINQ を使ったナンプレの解法を作ったお話
Ldd kitami(宣伝用 clrh70)
関数型忘年会Lt用
Ohotech #8 tututen pdf用
Ad

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