Web Developer's Struggle Memories

日々の業務から思ったこと、学んだことを書き連ねていきます。

1-100までの和の計算をできるだけ短く、3つの異なるプログラム言語で書いて遊ぶ

先日仕事の休憩中にこんなものを見つけて、 社内のチャットツールで「面白い記事を発見しました!」とページのリンクを貼っつけたところ、 結構盛り上がりまして、自分たちも色んなクソコードを書いてみんなで評価するという一幕があった。(←仕事しろw)

今回はそのクソコードを載せるのではなく、「できるだけ短いコード」ではどうなるのかを3つの言語PHP, Ruby, JavaScriptで書いて遊んでみた。
※基本的にコードはワンライナーになります 。

Ruby

まず始めはRubyから。この言語が一番短いコードで書けて、その文字数は24文字!
実際のコードはこちら。

puts (1..100).inject(:+)

他にもeachメソッドを使った書き方もできるが、長くなるので割愛。 余談だが、個人的にはdo |変数| 処理 endという書き方の方が見やすく、気に入っている。

PHP

お次は一番慣れているPHPでバージョンは5.6.16PHPでは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を記述してもいいが、こっちの方が若干処理が速かったので採用。
以下は裏技というか、ループで計算せず「公差数列(等差数列とも)の和の公式」{ \displaystyle
\frac{n}{2}(n+1)
} を利用したコード。これを利用すると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なら組み込み関数の数が多い件、何かしら便利な関数があるかと思ったが、見つからなかった。

また何か見つかったら更新しまーす。