110
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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以降)で実行するということで…)

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

110
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
110
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?