fork(9) download
  1. {-# OPTIONS -O2 #-}
  2. import Control.Applicative
  3. import System.Random
  4.  
  5.  
  6. main = f [replicate (15 - i) ' ' ++ replicate (i * 2 - 1) '.' | i <- [1..15]] >>= mapM_ putStrLn
  7.  
  8. f elka | ['O' | 'O' <- concat elka] /= "OOOOOOOOO" = sequence [(`mod` 15) <$> randomIO, randomIO] >>= f . dovaj elka
  9. | otherwise = return elka
  10.  
  11. dovaj e [r, c] = a ++ [v ++ 'O':g] ++ b where
  12. (a, t:b) = splitAt r e
  13. (v, _:g) = splitAt (mod c (r * 2 + 1) + (14 - r)) t
  14.  
Success #stdin #stdout 0.02s 3592KB
stdin
Standard input is empty
stdout
              O
             .O.
            .....
           .......
          .........
         ...........
        .............
       ...............
      ...OO............
     .......OO..........
    .....................
   .......................
  ......O..................
 .......O............O......
.............................