LoginSignup
111
66

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-08-14

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

111
66
31

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
111
66