トップ «前の日記(2014-09-06(Sat)) 最新 次の日記(2014-09-08(Mon))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2014-09-07(Sun) まだ眠ってないが

また適当に

JavaScriptの奇妙な「数」

> NaN == NaN
false
> NaN != NaN
true

x != x が成立するのは x = NaN の ときだけだそうである。

> 0 == -0
true
> 0 === -0
 
> 1/0
Infinity
> 1/(-0)
-Infinity
 
> -Infinity + Infinity
NaN

一億行のfizzbuzzくらいなら

スクリプト言語でも。

$ time gosh  sfizzbuzz.scm  100000000 > /dev/null
 
real	0m50.740s
user	0m50.627s
sys	0m0.016s
 
$ time gosh  sfizzbuzz.scm  10000000 > /dev/null
 
real	0m4.240s
user	0m4.220s
sys	0m0.008s
 
$ time gosh  sfizzbuzz.scm  1000000 > /dev/null
 
real	0m0.439s
user	0m0.428s
sys	0m0.008s

ついでにpython2と3の比較も。
以前とは違うが、 下らないの 少し変えて実行。
変えた結果(毎回剰余を求める代わりに毎回listをpopと insertで更新している)、ずっと 遅くなったようだ。

$ time python pylist_fizzbuzz.py3 100000000 > /dev/null
 
real	1m33.917s
user	1m32.734s
sys	0m1.004s
 
$ time python3 pylist_fizzbuzz.py3 100000000 > /dev/null
 
real	2m58.786s
user	2m58.407s
sys	0m0.048s

自分のnode.jsは一桁以上低速だった。ので一千万回。
それでも。

$ time node listfb.js 10000000 > /dev/null
 
real	4m38.935s
user	4m34.721s
sys	0m4.164s

fizz と buzz のリストを

別々にしたfizzbuzz。
これもやはり 既に実装済みであった。
自分のlispの技量では、あまり 綺麗にならなかった。

#!/usr/bin/env python3
from sys import argv
 
try:
  last = int(argv[1]) + 1
except:
  print("No last number.")
  exit(2)
 
flist = ['fizz', False, False]
blist = ['buzz', False, False, False, False]
 
for x in range(1, last):
  y = x % 3
  z = x % 5
  if flist[y]: 
    print(flist[y], end='')
  if blist[z]: 
    print(blist[z], end='')
  if not ( flist[y] or blist[z]):
    print(x, end='')
  print('')

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。