Ruby と Java と Crystal と C++ で解く プログラマーにしか解けない! #実行時間クイズ の1問目


はじめに

プログラマーにしか解けない! #実行時間クイズ をやってみました。
FoH6ESorz79IWhk さん、kuizy さん、ありがとうございます。

また、実行環境としてAtCoder のコードテストをお借りしました。
AtCoder さん、ありがとうございます。

C++

c.c
#include <iostream>
using namespace std;

int ret[10009];

int main() {
  int N = 10000, sum = 0;
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
      ret[i] += i * j;
      ret[i] %= 10007;
    }
  }
  return 0;
}

元の問題より、出力部分を省略しています。

316 ms

Ruby

ruby.rb
n = 10000
sum = 0
ret = Array.new(10009, 0)
n.times do |i|
  n.times do |j|
    ret[i] += i * j
    ret[i] %= 10007
  end
end
9294 ms

Java

java.java
class Main {
    public static void main(String[] args) {
        int ret[] = new int[10009];
        int N = 10000, sum = 0;
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= N; j++) {
                ret[i] += i * j;
                ret[i] %= 10007;
            }
        }
    }
}
392 ms

Crystal

Crystal.cr
n = 10000
sum = 0
ret = Array.new(10009, 0)
n.times do |i|
  n.times do |j|
    ret[i] += i * j
    ret[i] %= 10007
  end
end
671 ms

まとめ

  • 遅い遅いと言われていますが、本当に遅いのを実感しました
  • 競技プログラミングでRubyを使用している方は、何かの修行なのかもしれませんね