1-100までの和の計算をできるだけ短く、3つの異なるプログラム言語で書いて遊ぶ
先日仕事の休憩中にこんなものを見つけて、 社内のチャットツールで「面白い記事を発見しました!」とページのリンクを貼っつけたところ、 結構盛り上がりまして、自分たちも色んなクソコードを書いてみんなで評価するという一幕があった。(←仕事しろw)
今回はそのクソコードを載せるのではなく、「できるだけ短いコード」ではどうなるのかを3つの言語PHP, Ruby, JavaScript
で書いて遊んでみた。
※基本的にコードはワンライナーになります 。
Ruby
まず始めはRuby
から。この言語が一番短いコードで書けて、その文字数は24文字!
実際のコードはこちら。
puts (1..100).inject(:+)
他にもeach
メソッドを使った書き方もできるが、長くなるので割愛。
余談だが、個人的にはdo |変数| 処理 end
という書き方の方が見やすく、気に入っている。
PHP
お次は一番慣れているPHP
でバージョンは5.6.16
。
PHP
では3パターンで書いたが一番短いコードは37文字。コード中の<?php
はカウントしない。
実際のコードはこちら。
<?php // ループ処理の一番短いコード for($i=1;$i<101;$t+=$i,$i++){}echo$t; // 別のループ処理 foreach(range(1,100)as$j)$s+=$j;echo$s;
一つ目のループでは、for文のブロック内に$t+=i
を記述してもいいが、こっちの方が若干処理が速かったので採用。
以下は裏技というか、ループで計算せず「公差数列(等差数列とも)の和の公式」 を利用したコード。これを利用すると24文字で書くことができる。 (ただこれで1-100までの和と言えるのかはなんとも…)
<?php // 数式を使った計算 $n=100;echo ($n+1)*$n/2;
他にもarray_walk
関数など色々試したが、短くはならなかった。
JavaScript
最後にJavaScript
。これはPHP
とそう大して変わりはないが、出力の書き方や変数に$
が付かないから文字数がちょっと減る。
実際のコードはこちら。(以下は37文字)
for(t=0,i=1;i<101;t+=i,i++){}alert(t)
こっちでも公式を利用して計算するプログラムを一応載せる。文字数は23文字。
n=100;alert((n+1)*n/2)
JSer
の方々からすれば変数にvar
を付けろ!と怒られそうだが、今回はとにかく短いコードを書くことが目的のため、ご了承いただけると幸い。
感想など
まだ他の言語を利用すればもっと短く書けるかもしれないが、やっぱりRuby
は優秀だなと。これより短くなるのかな〜。
また、組み込み関数で十分簡潔かつ分かりやすく書けるのは大きい。
for
ループする場合は、どの言語でもほぼ一緒になるのであまり書き比べる意味はなかったな。
PHP
なら組み込み関数の数が多い件、何かしら便利な関数があるかと思ったが、見つからなかった。
また何か見つかったら更新しまーす。