{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# HLINT ignore "Used otherwise as a pattern" #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-overlapping-patterns #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
module Main where
import Control.Monad
import Control.Monad.ST
import Data.Array (Array)
import Data.Array.IArray
import Data.Array.IO
import Data.Array.MArray
import Data.Array.ST
import Data.Array.Unboxed (UArray)
import Data.Bool (bool)
import qualified Data.ByteString.Char8 as BC
import qualified Data.Char as C
import Data.Function (fix)
import qualified Data.IntMap as IM
import qualified Data.IntSet as IS
import Data.Ix
import Data.List (elemIndices, foldl', group, groupBy, sort, sortBy, sortOn, unfoldr)
import Data.List.Extra (breakEnd, lower, splitOn, upper, (!?))
import Data.Maybe (fromMaybe)
import Data.Ord (Down (Down), comparing)
import Data.STRef (modifySTRef', newSTRef, readSTRef, writeSTRef)
import qualified Data.Sequence as Seq
import qualified Data.Set as S
import qualified Data.Vector as V
import qualified Data.Vector.Generic as VG
import qualified Data.Vector.Unboxed as VU
import Debug.Trace (traceShow)
import GHC.IO (unsafePerformIO)
import System.Environment (lookupEnv)
main :: IO ()
main = do
[n, d] <- getInts
s <- getLine
let s' = solve (reverse s) d
putStrLn $ take (n - length s') s ++ s'
solve :: (Eq t, Num t, Enum t) => [Char] -> t -> [Char]
solve s d = f s [] d
where
f s ans 0 = ans
f (sh : st) ans d
| sh == '@' = f st ('.' : ans) (pred d)
| sh == '.' = f st ('.' : ans) d
{-- lib --}
getInts :: IO [Int]
getInts = unfoldr (BC.readInt . BC.dropWhile C.isSpace) <$> BC.getLine
{-- debug --}
dbg :: (Show a) => a -> ()
dbg = case getDebugEnv of
Just _ -> (`traceShow` ())
Nothing -> const ()
getDebugEnv :: Maybe String
getDebugEnv = unsafePerformIO (lookupEnv "DEBUG")
{-# NOINLINE getDebugEnv #-}
app/Main.hs:15:1: warning: [-Wunused-imports]
The import of ‘Control.Monad’ is redundant
except perhaps to import instances from ‘Control.Monad’
To import instances alone, use: import Control.Monad()
|
15 | import Control.Monad
| ^^^^^^^^^^^^^^^^^^^^
app/Main.hs:16:1: warning: [-Wunused-imports]
The import of ‘Control.Monad.ST’ is redundant
except perhaps to import instances from ‘Control.Monad.ST’
To import instances alone, use: import Control.Monad.ST()
|
16 | import Control.Monad.ST
| ^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:17:1: warning: [-Wunused-imports]
The import of ‘Data.Array’ is redundant
except perhaps to import instances from ‘Data.Array’
To import instances alone, use: import Data.Array()
|
17 | import Data.Array (Array)
| ^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:18:1: warning: [-Wunused-imports]
The import of ‘Data.Array.IArray’ is redundant
except perhaps to import instances from ‘Data.Array.IArray’
To import instances alone, use: import Data.Array.IArray()
|
18 | import Data.Array.IArray
| ^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:19:1: warning: [-Wunused-imports]
The import of ‘Data.Array.IO’ is redundant
except perhaps to import instances from ‘Data.Array.IO’
To import instances alone, use: import Data.Array.IO()
|
19 | import Data.Array.IO
| ^^^^^^^^^^^^^^^^^^^^
app/Main.hs:20:1: warning: [-Wunused-imports]
The import of ‘Data.Array.MArray’ is redundant
except perhaps to import instances from ‘Data.Array.MArray’
To import instances alone, use: import Data.Array.MArray()
|
20 | import Data.Array.MArray
| ^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:21:1: warning: [-Wunused-imports]
The import of ‘Data.Array.ST’ is redundant
except perhaps to import instances from ‘Data.Array.ST’
To import instances alone, use: import Data.Array.ST()
|
21 | import Data.Array.ST
| ^^^^^^^^^^^^^^^^^^^^
app/Main.hs:22:1: warning: [-Wunused-imports]
The import of ‘Data.Array.Unboxed’ is redundant
except perhaps to import instances from ‘Data.Array.Unboxed’
To import instances alone, use: import Data.Array.Unboxed()
|
22 | import Data.Array.Unboxed (UArray)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:23:1: warning: [-Wunused-imports]
The import of ‘Data.Bool’ is redundant
except perhaps to import instances from ‘Data.Bool’
To import instances alone, use: import Data.Bool()
|
23 | import Data.Bool (bool)
| ^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:26:1: warning: [-Wunused-imports]
The import of ‘Data.Function’ is redundant
except perhaps to import instances from ‘Data.Function’
To import instances alone, use: import Data.Function()
|
26 | import Data.Function (fix)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:27:1: warning: [-Wunused-imports]
The qualified import of ‘Data.IntMap’ is redundant
except perhaps to import instances from ‘Data.IntMap’
To import instances alone, use: import Data.IntMap()
|
27 | import qualified Data.IntMap as IM
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:28:1: warning: [-Wunused-imports]
The qualified import of ‘Data.IntSet’ is redundant
except perhaps to import instances from ‘Data.IntSet’
To import instances alone, use: import Data.IntSet()
|
28 | import qualified Data.IntSet as IS
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:29:1: warning: [-Wunused-imports]
The import of ‘Data.Ix’ is redundant
except perhaps to import instances from ‘Data.Ix’
To import instances alone, use: import Data.Ix()
|
29 | import Data.Ix
| ^^^^^^^^^^^^^^
app/Main.hs:30:1: warning: [-Wunused-imports]
The import of ‘elemIndices, foldl', group, groupBy, sort, sortBy,
sortOn’
from module ‘Data.List’ is redundant
|
30 | import Data.List (elemIndices, foldl', group, groupBy, sort, sortBy, sortOn, unfoldr)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:31:1: warning: [-Wunused-imports]
The import of ‘Data.List.Extra’ is redundant
except perhaps to import instances from ‘Data.List.Extra’
To import instances alone, use: import Data.List.Extra()
|
31 | import Data.List.Extra (breakEnd, lower, splitOn, upper, (!?))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:32:1: warning: [-Wunused-imports]
The import of ‘Data.Maybe’ is redundant
except perhaps to import instances from ‘Data.Maybe’
To import instances alone, use: import Data.Maybe()
|
32 | import Data.Maybe (fromMaybe)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:33:1: warning: [-Wunused-imports]
The import of ‘Data.Ord’ is redundant
except perhaps to import instances from ‘Data.Ord’
To import instances alone, use: import Data.Ord()
|
33 | import Data.Ord (Down (Down), comparing)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:34:1: warning: [-Wunused-imports]
The import of ‘Data.STRef’ is redundant
except perhaps to import instances from ‘Data.STRef’
To import instances alone, use: import Data.STRef()
|
34 | import Data.STRef (modifySTRef', newSTRef, readSTRef, writeSTRef)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:35:1: warning: [-Wunused-imports]
The qualified import of ‘Data.Sequence’ is redundant
except perhaps to import instances from ‘Data.Sequence’
To import instances alone, use: import Data.Sequence()
|
35 | import qualified Data.Sequence as Seq
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:36:1: warning: [-Wunused-imports]
The qualified import of ‘Data.Set’ is redundant
except perhaps to import instances from ‘Data.Set’
To import instances alone, use: import Data.Set()
|
36 | import qualified Data.Set as S
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:37:1: warning: [-Wunused-imports]
The qualified import of ‘Data.Vector’ is redundant
except perhaps to import instances from ‘Data.Vector’
To import instances alone, use: import Data.Vector()
|
37 | import qualified Data.Vector as V
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:38:1: warning: [-Wunused-imports]
The qualified import of ‘Data.Vector.Generic’ is redundant
except perhaps to import instances from ‘Data.Vector.Generic’
To import instances alone, use: import Data.Vector.Generic()
|
38 | import qualified Data.Vector.Generic as VG
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:39:1: warning: [-Wunused-imports]
The qualified import of ‘Data.Vector.Unboxed’ is redundant
except perhaps to import instances from ‘Data.Vector.Unboxed’
To import instances alone, use: import Data.Vector.Unboxed()
|
39 | import qualified Data.Vector.Unboxed as VU
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/Main.hs:56:5: warning: [-Wincomplete-patterns]
Pattern match(es) are non-exhaustive
In an equation for ‘f’:
Patterns of type ‘[Char]’, ‘[Char]’, ‘t’ not matched:
[] _ p where p is not one of {0}
(_:_) _ p where p is not one of {0}
|
56 | f s ans 0 = ans
| ^^^^^^^^^^^^^^^...
app/Main.hs:56:7: warning: [-Wunused-matches]
Defined but not used: ‘s’
|
56 | f s ans 0 = ans
| ^
app/Main.hs:56:7: warning: [-Wname-shadowing]
This binding for ‘s’ shadows the existing binding
bound at app/Main.hs:54:7
|
56 | f s ans 0 = ans
| ^
app/Main.hs:57:21: warning: [-Wname-shadowing]
This binding for ‘d’ shadows the existing binding
bound at app/Main.hs:54:9
|
57 | f (sh : st) ans d
| ^