Edited at

「1から100の偶数の和を求めるワンライナー」まとめ

2019年8月11日頃にTwitterで「1から100の偶数の和を求める方法」(ワンライナー)が話題になったので

各言語ごとにまとめてみました。

私の独断と偏見ですが

「2550を直接出力するもの」「公式を使って総和を計算するもの」は

除外しています。

あくまでそれぞれのプログラミング言語の特色が現れるものをまとめたいと考えています。

以前あったズンドコきよしのまとめみたいなノリです。

https://qiita.com/shunsugai@github/items/971a15461de29563bf90

編集リクエスト歓迎です。

新しいワンライナーはコメント欄ではなく編集リクエストにて追加していただけると助かります!

---

8/15 11:30

コメント欄を取り込み&新たにツイートを拾いました。

---


発端のツイート


Python

上の改良版

result = sum(i for i in range(1, 101) if i % 2 == 0)


Haskell


C


LISP


PHP


C#

---

コメント欄より

C#のLINQでWhere使わないバージョンです。

var sum = Enumerable.Range(1, 100).Sum(x => x % 2 == 0 ? x : 0);


F#


Clojure


Ruby


Scala


PureScript


Swift


Julia


Perl


bash

1から100までの偶数の和もBashならたったの1行で書ける

echo {2..100..2}+ 0 | bc

とてもシンプルですね。Bashなら複雑なコードもシンプルに。

そう、Bashならね

---

コメント欄より

seq コマンドには -s オプションがありますので、

$ seq -s+ 2 2 100 | bc

と書けます。また、bc コマンドの代わりに bash の arithmetic expansion を使って、

$ echo $(($(seq -s+ 2 2 100)))

とする事もできます。


Java


標準のみで算出

jshell> IntStream.rangeClosed(1,100).filter(i->i%2==0).sum();

$5 ==> 2550

ライブラリを使わずに書いてみました。

(jshell(Java9以降)で実行するということで…)

java

int result = java.util.stream.IntStream.rangeClosed(1, 100).filter(i -> i % 2 == 0).sum();


Smalltalk


Elixir


Excel

---

コメント欄より

Excel/Power BIにおけるPower Queryでも何通りかできますね。(^^;

List.Sum(List.Generate(()=>2,each _<=100,each _+2))

あとは、

List.Sum(List.Numbers(2,100/2,2))

とかですね。

---

---

行列積を使ったバージョン

=MMULT(MOD(COLUMN(B1:CW1),2),ROW(A1:A100))


JavaScript

---

コメント欄より

JavaScriptは

[...Array(100).keys()].reduce((s,v) => ++v % 2 ? s:s + v,0)

のほうがちょっと短い?

---

再帰関数を使ったバージョン

(f=(x,y)=>(y<=100?f(x+(y%2?0:y),++y):x))(0,0);


Dart


Rust


R

コメント欄より

-----

Rなら。

sum(seq(2,100,2))

----


elm

コメント欄より

List.range 1 100 |> List.filter (\x -> modBy 2 x == 0) |> List.sum


VBA


Kotlin

コメント欄より

1から100までの偶数の和もKotlinならたったの1行で書ける

val result = (1..100).filter { it % 2 == 0 }.sum()

(filterとsumは標準ライブラリーの関数なのでデフォルトでインポートされるkotlin.collectionsパッケージの関数なのでimportなしで使えます。)

とてもシンプルですね。Kotlinなら複雑なコードもシンプルに。

そう、Kotlinならね

---


SQL


PowerShell


HSP


Vim script

exe 'echo ' . join(range(2, 101, 2), '+')

" vim 8以上、偶数の判定も行う版
exe 'echo ' . join(filter(range(101), {i, v -> v % 2 == 0}), '+')


Groovy


Go

for i, N, result := 1, 100 + 2, 0; i <= N; i++ { if i == N { fmt.Println(result) } else { result += (i + 1) & 1 * i } }

ref: https://qiita.com/noobow/items/28cd77968815f329ca77#comment-324899874e91ab0ea091


Delphi


DOS


コマンドプロンプト

set s=0 & for /l %a in (0,2,100) do set /a s = s + %a



J

奇数の項をゼロに置き換えて総和を求める

+/(2&|0:^:["_1])>:i.100

偶数の項だけ選び出して総和を求める

+/(#~[:-.2&|)>:i.100

偶数の項に1、奇数の項に0を掛けてから総和を求める

+/(*[:-.2&|)>:i.100


jq