On 23 Oct 2013, at 18:37, David Nolen <dnolen.li...@gmail.com> wrote:

> The problem here is that you're not following your Scala solution closely 
> enough. I suspect if you used defrecords to represent the pieces the way that 
> you used a class in Scala you can avoid the number of collisions for larger 
> problems.
> 
> Not tested much but I tried something like the following and I no longer see 
> hash collisions dominating in YourKit:


It would be lovely if it was that easy, David. However, I still see lots of 
hash collisions when using records. Here's a portion of the output from an 
implementation that's instrumented to print hash codes, similar to what Andy 
did with the vector-based implementation:

"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 2]} 
#chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name 
:N, :pos [0 1]} #chess_clojure.core.Piece{:name :R, :pos [8 4]}}"
"842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 4]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 3]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [8 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 4]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 3]} #chess_clojure.core.Piece{:name 
:B, :pos [1 4]} #chess_clojure.core.Piece{:name :R, :pos [8 1]}}"
"842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 3]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [8 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 3]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [8 4]}}"
"842565000: #{#chess_clojure.core.Piece{:name :R, :pos [0 3]} 
#chess_clojure.core.Piece{:name :Q, :pos [4 2]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :N, :pos [8 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :R, :pos [0 3]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name 
:B, :pos [1 5]} #chess_clojure.core.Piece{:name :N, :pos [8 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 2]} 
#chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name 
:R, :pos [0 0]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:B, :pos [0 5]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 2]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:B, :pos [0 4]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :R, :pos [0 3]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:B, :pos [0 5]} #chess_clojure.core.Piece{:name :N, :pos [8 2]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:B, :pos [0 4]} #chess_clojure.core.Piece{:name :N, :pos [8 2]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name 
:R, :pos [0 2]} #chess_clojure.core.Piece{:name :N, :pos [8 1]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} 
#chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name 
:R, :pos [1 2]} #chess_clojure.core.Piece{:name :N, :pos [8 1]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name 
:R, :pos [7 2]} #chess_clojure.core.Piece{:name :N, :pos [0 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} 
#chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name 
:N, :pos [6 5]} #chess_clojure.core.Piece{:name :R, :pos [1 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 0]} 
#chess_clojure.core.Piece{:name :R, :pos [0 2]} #chess_clojure.core.Piece{:name 
:N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [1 4]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} 
#chess_clojure.core.Piece{:name :R, :pos [0 0]} #chess_clojure.core.Piece{:name 
:N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [1 4]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}"
"842565000: #{#chess_clojure.core.Piece{:name :R, :pos [1 4]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 3]} #chess_clojure.core.Piece{:name 
:N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [2 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name 
:R, :pos [7 2]} #chess_clojure.core.Piece{:name :N, :pos [0 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 1]} 
#chess_clojure.core.Piece{:name :N, :pos [7 3]} #chess_clojure.core.Piece{:name 
:R, :pos [1 5]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 1]} 
#chess_clojure.core.Piece{:name :R, :pos [1 2]} #chess_clojure.core.Piece{:name 
:N, :pos [7 3]} #chess_clojure.core.Piece{:name :B, :pos [2 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:N, :pos [7 3]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}"
"842565000: #{#chess_clojure.core.Piece{:name :R, :pos [1 4]} 
#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name 
:N, :pos [8 3]} #chess_clojure.core.Piece{:name :B, :pos [0 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :B, :pos [0 5]} #chess_clojure.core.Piece{:name 
:N, :pos [7 2]} #chess_clojure.core.Piece{:name :R, :pos [1 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} 
#chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name 
:N, :pos [7 2]} #chess_clojure.core.Piece{:name :R, :pos [1 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [0 5]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} 
#chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name 
:B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [0 4]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 1]} 
#chess_clojure.core.Piece{:name :R, :pos [1 3]} #chess_clojure.core.Piece{:name 
:N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [2 0]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} 
#chess_clojure.core.Piece{:name :R, :pos [0 0]} #chess_clojure.core.Piece{:name 
:N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [1 4]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} 
#chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name 
:N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}"
"842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} 
#chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name 
:N, :pos [0 2]} #chess_clojure.core.Piece{:name :R, :pos [8 1]}}"

--
paul.butcher->msgCount++

Snetterton, Castle Combe, Cadwell Park...
Who says I have a one track mind?

http://www.paulbutcher.com/
LinkedIn: http://www.linkedin.com/in/paulbutcher
MSN: p...@paulbutcher.com
AIM: paulrabutcher
Skype: paulrabutcher

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to