2014年09月

ループ回数とプログラムの実行時間

Ruby:1億回のループで7秒

手元の環境では、Ruby 2.0.0で、100万回のループに0.07秒、1000万回なら0.7秒、1億回なら7秒ほどかかる。

$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]

$ cat bm.rb
require 'benchmark'
Benchmark.bm do |x|
  x.report {   1_000_000.times {} }
  x.report {  10_000_000.times {} }
  x.report { 100_000_000.times {} }
end

$ ruby bm.rb
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.070087)
   0.670000   0.000000   0.670000 (  0.667117)
   6.870000   0.000000   6.870000 (  6.872852)

PHP:1億回のループで5秒

同様に、PHP 5.3.3では1億回のループで5秒強だった。

$ php -v
PHP 5.3.3 (cli) (built: Aug  6 2014 05:54:27)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

$ cat bm.php
<?php
$n = intval(str_replace("_", "", $argv[1]));
for ($i = 1; $i <= $n; $i++) {}

$ time php bm.php 100_000_000
real    0m5.373s
user    0m5.362s
sys     0m0.009s

結論:paizaでは1億回のループに注意

paizaのチェック環境においても、上記の結果に大差はないだろう。同環境では、RubyやPHPの実行時間が16秒に制限されているので、ループが1億回程度になる場合は注意したほうがよさそうだ。

参考

paizaランクをSにした

久しぶりに paiza のプログラミングスキルチェックに励んでみた。今年2月にRubyのランクBを取って以来、久しぶりの挑戦だ。ランクA以上は時間がかかるので、「いつか時間のあるときにやろう」と止めてしまっていた。

今回はなんとなくPHPを選んだ。久々なのでランクDから始め、ちょこちょこ失敗しつつも、なんとかランクSまで一日のうちに取れた。

paiza

こういう問題は、PHP歴半年でも解ける人は解けるだろうし、PHP歴10年でも解けない人は解けないだろう。「PHP歴2年以上」のような人材募集の文面を見かけるが、経験年数でスキルを判断するのは不合理な悪習だとあらためて感じた。

記事検索
Twitter