Advertisement
Guest User

W3W.hs -- What3C*nts

a guest
May 3rd, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import System.Environment
  2. import Data.Char
  3. import Data.List
  4. import Data.Maybe
  5. main = do
  6.   d <- readFile "/usr/share/hunspell/en_US.dic"
  7.   let ws = filter (all (`elem` ['a'..'z'])) $ takeWhile (/='/') <$> lines (map toLower d)
  8.       wc = fromIntegral $ length ws :: Double
  9.   args <- getArgs
  10.   case length args of
  11.     3 -> let [sx, sy, sz] = args
  12.              (x, y, z) = (read sx, read sy, read sz) :: (Double, Double, Double)
  13.              pick i = let l = round $ (i+90) * (wc-1) / 180
  14.                           (c:cs) =  ws!!l
  15.                       in  toUpper c : cs
  16.          in  putStrLn $ pick x ++ pick y ++ pick z
  17.     1 -> let [(cx:cs)] = args
  18.              (cxs,(cy:cs2)) = span (isLower) cs
  19.              (cys,wz ) = span (isLower) cs2
  20.              wx = cx:cxs; wy = cy:cys
  21.              loc w = let i = fromIntegral . fromJust . elemIndex (map toLower w) $ ws
  22.                      in  show $ i * 180 / (wc-1) - 90
  23.          in  putStrLn $ loc wx ++", "++ loc wy ++ ", " ++ loc wz
  24.     otherwise -> putStrLn "You big dummy!"
  25.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement