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役でやれる!
次回
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/
進

どうですか?
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

More from Fumihito Yokoyama

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

More from Fumihito Yokoyama (20)

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

Recently uploaded

JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 

Recently uploaded (10)

JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 

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