%%% $Id: hash.oz,v 1.0 2002/08/19 16:24:00 dada Exp $ %%% http://dada.perl.it/shootout/ %%% %%% contributed by Isaac Gouy %% Usage: start from command line with %% ozc -x hash.oz -o hash.oz.exe %% hash.oz.exe 2000 functor import System Application define fun {IntToHexString I Hex} if I =< 0 then Hex else local M D in D = I div 16 M = I mod 16 if M < 10 then {IntToHexString D M+&0|Hex} else {IntToHexString D (M-10)+&a|Hex} end end end end proc {InsertHexKeys H N} for I in 0..N-1 do {Dictionary.put H {String.toAtom {IntToHexString I nil}} I} end end proc {CountLookups H I S C} if I >= 0 then if {Dictionary.member H {String.toAtom {IntToString I}}} then {CountLookups H I-1 S+1 C} else {CountLookups H I-1 S C} end else C = S end end in local Args N H Count in [Args] = {Application.getArgs plain} N = {String.toInt Args} {NewDictionary H} {InsertHexKeys H N} {CountLookups H N 0 Count} {System.showInfo Count} end {Application.exit 0} end