2016年7月31日日曜日

プチコン3号でたらい回し関数

プチコン3号SmileBasicを試してみたく、new3DSLLを手に入れた。たらい回し関数(竹内関数)を入力して実行してみた。

 DEF TARAI(X,Y,Z)
  IF X<=Y THEN
    RETURN Y
  ELSE
    RETURN TARAI(TARAI(X-1, Y, Z), TARAI(Y-1, Z, X), TARAI(Z-1, X, Y))
  ENDIF
END

PRINT TIME$
PRINT TARAI(12,6,0)
PRINT TIME$

BASICとはいっても、行番号いらないし、ローカル変数あるし、再帰呼び出しも可能なんですね。
引数(12, 6, 0)の場合、28秒で返ってきました。

さて、比較するものがないと困るので、メインで使っているToshiba dynabook SS RX1(Windows Vista 32bit)のpython 2.7.6でたらい回し関数を実行してみました。6秒ほどで返ってきました。

#import time
def tarai(x, y, z):
    if (x <= y):
        return y
    else:
        return tarai(
                    tarai(x-1, y, z),
                    tarai(y-1, z, x),
                    tarai(z-1, x, y))
start = time.time()
print tarai(12, 6, 0)
stop = time.time()
print stop - start

これを、zenfone2(ZE551ML)のqpythonで試すと12秒でした。