読者です 読者をやめる 読者になる 読者になる

ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Code 2013 のコードゴルフに挑戦してみた

JavaScript

Code 2013 における JavaScriptコードゴルフが面白そうだったので挑戦してみました。 JavaScript でデジタル時計を表示するプログラムを短くするという問題です。

先にコードを出してる人よりも短くはできなかったのであんまり意味はないけどコードを載せておきます。

初期

最初の頃は 2 桁の数字を 1 つのデータで表現しようとしてました。

2 桁の数字から 1 桁ずつ値を取り出す処理を省ける分短くなるかなと思ってこうしていたのですが、実際のところは 2 桁の数字用のデータを生成する処理が長くなってしまって逆効果でしたね。 分と秒を分ける処理も面倒だと思っていたのでもともと秒と分を別個の変数で持たせたりしてました。

あと 「ブラウザの種類は問わない」 って書かれていたのでここぞとばかりに Arrow Function を使ってます *1

インデントとか含めた状態で 434 バイト。

自力で到達した最後

で、結局 1 桁ずつ数字を書きだすように変更して、いろいろ書きかえていって、他の人のコードを見ずにたどり着いたのがこの状態です。

関数定義の function とか return とかに結構字数を取られてしまうので、関数定義は 1 つだけにしておいて引数で関数の挙動を変えるということをしてます。

除去できる改行と空白を除去して 283 バイト。

nanto さんのコードを見て改良

nanto さんのコードを見て、文字列に charCodeAt メソッドを使って値を取り出すようにしたらバイト数減らせるのだなー、と思って改良しました。

除去できる空白や改行を除去して 263 バイト。

感想

普段だったら絶対書かないようなコードを書くことになるので、普段のコーディング経験が邪魔になってしまうなーって思いました。 nanto さん 230 バイト切っててすごすぎます。

私は関数定義を 1 個だけ書くようにしてみたわけですが、他の人のコードを見ると eval を使って関数定義をそもそも書かないようにしてたりして、なんていうか次元が違うなーと感じました。 怖い世界です。

本当は怖い世界の童話

本当は怖い世界の童話

*1:Firefox で試してね!