Squeak Smalltalk でライフゲーム


―というのを見かけたので、ためしに書いてみました。前にも似たようなのを書いたことがあるような気もしますが気にしない。w


| life |
life := [:array2d |
   | sum survivs |
   sum := array2d * 0.
   #(-1 0 1) do: [:dx | #(-1 0 1) do: [:dy |
      sum := sum + ((array2d collect: [:row | row flipRotated: dx*2]) flipRotated: dy*2)]]. 
   survivs := #(3 4) collect: [:alive | 
      sum collect: [:row | row collect: [:elm | (elm = alive) asBit]]].
   (survivs * {1. array2d}) sum]. 

life value: #(
   (0 0 0 0 0) 
   (0 0 1 1 0) 
   (0 1 1 0 0) 
   (0 0 1 0 0) 
   (0 0 0 0 0))
   
"=> #(
   (0 0 0 0 0) 
   (0 1 1 1 0) 
   (0 1 0 0 0) 
   (0 1 1 0 0) 
   (0 0 0 0 0)) "