さまざまな言語で数値計算
Only Do What Only You Can Do
100未満の3の倍数の和 (reduce)
VBScript
JScript
range 機能を自作
Array.prototype.range = function(start, end) { var array = new Array(); var j = 0; for (var i = start; i <= end; i++) { array[j++] = i; } return array; }
filter 機能を自作
Array.prototype.filter = function(func) { var array = new Array(); var j = 0; for (var i = 0; i < this.length; i++) { if (func(this[i])) array[j++] = this[i]; } return array; }
sum 機能を自作
Array.prototype.sum = function() { var res = 0 for (var i = 0; i < this.length; i++) { res += this[i]; } return res; }
100未満の3の倍数の和
var sum = new Array(). range(1, 99). filter(function (n) { return (n % 3 == 0); }). sum(); WScript.Echo(sum);
Z:\>cscript //nologo Js0203.js 1683
PowerShell
対話型実行環境を起動
Z:\>powershell Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved.
100未満の3の倍数の和
$sum = 0 1..99 | where {$_ % 3 -eq 0} | foreach {$sum += $_} $sum
PS Z:\> $sum = 0 PS Z:\> 1..99 | where {$_ % 3 -eq 0} | foreach {$sum += $_} PS Z:\> $sum 1683
終了
PS Z:\> exit
Perl
対話型実行環境を起動
Z:\>perl -de 0 Loading DB routines from perl5db.pl version 1.37 Editor support available. Enter h or 'h h' for help, or 'perldoc perldebug' for more help. main::(-e:1): 0
100未満の3の倍数の和
use List::Util; print List::Util::reduce {$a + $b} grep {$_ % 3 == 0} 1..99
DB<1> use List::Util; DB<2> print List::Util::reduce {$a + $b} grep {$_ % 3 == 0} 1..99 1683
print List::Util::sum grep {$_ % 3 == 0} 1..99
DB<3> print List::Util::sum grep {$_ % 3 == 0} 1..99 1683
終了
DB<4> q
PHP
対話型実行環境を起動
Z:\>php -a Interactive mode enabled
100未満の3の倍数の和
<?php $ary = array_filter(range(1,9), function ($n) {return ($n % 3 == 0);}); echo array_reduce($ary, function($x, $y) {return $x + $y;}, 0); ?>
<?php $ary = array_filter(range(1,9), function ($n) {return ($n % 3 == 0);}); echo array_reduce($ary, function($x, $y) {return $x + $y;}, 0); ?>
終了
^Z 1683
Python
対話型実行環境を起動
Z:\>python Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information.
100未満の3の倍数の和
ary = [n for n in range(1, 100) if (n % 3 == 0)] reduce(lambda x, y: x + y, ary, 0)
>>> ary = [n for n in range(1, 100) if (n % 3 == 0)] >>> reduce(lambda x, y: x + y, ary, 0) 1683
sum([n for n in range(1, 100) if (n % 3 == 0)])
>>> sum([n for n in range(1, 100) if (n % 3 == 0)]) 1683
終了
>>> quit()
Ruby
対話型実行環境を起動
Z:\>irb
100未満の3の倍数の和
(1..99).select { |n| n % 3 == 0}.inject(:+)
irb(main):001:0> (1..99).select { |n| n % 3 == 0}.inject(:+) => 1683
(1..99).select { |n| n % 3 == 0}.inject("+")
irb(main):002:0> (1..99).select { |n| n % 3 == 0}.inject("+") => 1683
終了
irb(main):003:0> exit
Groovy
Pascal
Ada
VB.NET
C#
using System.Linq; public class CS0203 { public static void Main() { int sum = Enumerable.Range(1, 99).Where(num => (num % 3 == 0)).Sum(); System.Console.WriteLine(sum); sum = Enumerable.Range(1, 99).Where(num => (num % 3 == 0)).Aggregate((x, n) => x + n); System.Console.WriteLine(sum); } }
Z:\>csc CS0203.cs -nologo Z:\>CS0203 1683 1683
Java
C++
Objective-C
D
Go
Scala
対話型実行環境を起動
Z:\>scala Welcome to Scala version 2.10.2 (Java HotSpot(TM) Client VM, Java 1.7.0_21). Type in expressions to have them evaluated. Type :help for more information.
100未満の3の倍数の和
(1 to 99).filter(n => n % 3 == 0).reduce((x, n) => x + n)
scala> (1 to 99).filter(n => n % 3 == 0).reduce((x, n) => x + n) res0: Int = 1683
(1 to 99).filter(n => n % 3 == 0).sum
scala> (1 to 99).filter(n => n % 3 == 0).sum res1: Int = 1683
終了
scala> :quit
F#
対話型実行環境を起動
Z:\>fsi Microsoft (R) F# 2.0 Interactive build 4.0.40219.1 Copyright (c) Microsoft Corporation. All Rights Reserved. For help type #help;;
100未満の3の倍数の和
[1..99] |> List.filter (fun x -> x % 3 = 0) |> List.reduce(+)
> [1..99] - |> List.filter (fun x -> x % 3 = 0) - |> List.reduce(+) - ;; val it : int = 1683
[1..99] |> List.filter (fun x -> x % 3 = 0) |> List.sum
> [1..99] - |> List.filter (fun x -> x % 3 = 0) - |> List.sum - ;; val it : int = 1683
終了
> #quit;;
Clojure
対話型実行環境を起動
Z:\>java -cp C:\ProgramFiles\clojure-1.5.1\clojure-1.5.1.jar clojure.main Clojure 1.5.1
100未満の3の倍数の和
(apply + (filter #(= (mod % 3) 0) (range 1 100)))
user=> (apply + (filter #(= (mod % 3) 0) (range 1 100))) 1683
(reduce + (filter #(= (mod % 3) 0) (range 1 100)))
user=> (reduce + (filter #(= (mod % 3) 0) (range 1 100))) 1683
終了
user=> (. System exit 0)
Haskell
対話型実行環境を起動
Z:\>ghci GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done.
100未満の3の倍数の和
foldl (+) 0 $ filter (\x -> mod x 3 == 0) [1..99]
Prelude> foldl (+) 0 $ filter (\x -> mod x 3 == 0) [1..99] 1683
sum $ filter (\x -> mod x 3 == 0) [1..99]
Prelude> sum $ filter (\x -> mod x 3 == 0) [1..99] 1683
終了
Prelude> :quit Leaving GHCi.