D scored well in the Google CodeJam Qualification Round

bearophile bearophileHUGS at lycos.com
Mon Apr 16 08:23:41 PDT 2012


Steven Schveighoffer:

> I would caution however, from my past experience, that looking 
> at how well one language does vs. another is extremely 
> subjective -- really good coders can do really well no matter 
> what language they use.

But the "Hall of Mirrors"-large Haskell solution by tmoHaskell is 
elegant:
http://codepad.org/bxf3CYwW
http://www.go-hero.net/jam/12/name/tmoHaskell

That contains simple usage of pattern matching on values:

nextCell :: Hall -> (Int,Int) -> (Int,Int) -> (Ratio Int,Ratio 
Int)
             -> Maybe ((Int,Int), (Int,Int), (Ratio Int,Ratio Int))
nextCell hall (vx,vy) (ix,iy) (x,y) = do
     ((vx',ix',x'),(vy',iy',y')) <- case (x,y) of
         (0,0) -> corner (-1) (-1)
         (0,1) -> corner (-1)   1
         (1,0) -> corner   1  (-1)
         (1,1) -> corner   1    1
         (0,_) -> hitHorizontal (-1)
         (1,_) -> hitHorizontal 1
         (_,0) -> hitVertical (-1)
         (_,1) -> hitVertical 1
     return ((vx',vy'),(ix',iy'),(x',y'))


Switch on structs are useful:
http://d.puremagic.com/issues/show_bug.cgi?id=596

(1,_) -> hitHorizontal 1

becomes something like:

case tuple(1,void): r = hitHorizontal(1); break;

Or:
case tuple(1,_): r = hitHorizontal(1); break;

------------------------

One Scala solution to the "Speaking in Tongues" contains:

val map = new TreeMap[Char, Char]
     " abcdefghijklmnopqrstuvwxyz".zip(" 
yhesocvxduiglbkrztnwjpfmaq").foreach(x => map.put(x._1, x._2))


That in Python you write with just:

>>> dict(zip(" abcdefghijklmnopqrstuvwxyz", " 
>>> yhesocvxduiglbkrztnwjpfmaq"))
{' ': ' ', 'a': 'y', 'c': 'e', 'b': 'h', 'e': 'o', ...

It's handy to have a similar AssociativeArray from pairs iterable 
in Phobos too (or even in object).

Bye,
bearophile


More information about the Digitalmars-d mailing list