結果
| 問題 |
No.223 1マス指定の魔方陣
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-11-04 22:59:09 |
| 言語 | Haskell (9.10.1) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,229 bytes |
| コンパイル時間 | 269 ms |
| コンパイル使用メモリ | 168,320 KB |
| 最終ジャッジ日時 | 2024-11-14 23:54:03 |
| 合計ジャッジ時間 | 912 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
Loaded package environment from /home/judge/.ghc/x86_64-linux-9.8.2/environments/default
[1 of 2] Compiling Main ( Main.hs, Main.o )
Main.hs:18:27: error: [GHC-87543]
Ambiguous occurrence ‘.^.’.
It could refer to
either ‘Data.Bits..^.’,
imported from ‘Data.Bits’ at Main.hs:3:1-26,
or ‘Main..^.’, defined at Main.hs:30:1.
|
18 | item = if (((j + 1) .^. (i + 1)) .&. 2) /= 0 then n * n - 1 - k else k
| ^^^
Main.hs:25:39: error: [GHC-87543]
Ambiguous occurrence ‘.^.’.
It could refer to
either ‘Data.Bits..^.’,
imported from ‘Data.Bits’ at Main.hs:3:1-26,
or ‘Main..^.’, defined at Main.hs:30:1.
|
25 | putStr . (++ sep) . show $ (item1 .^. item2 .^. z) + 1
| ^^^
Main.hs:25:49: error: [GHC-87543]
Ambiguous occurrence ‘.^.’.
It could refer to
either ‘Data.Bits..^.’,
imported from ‘Data.Bits’ at Main.hs:3:1-26,
or ‘Main..^.’, defined at Main.hs:30:1.
|
25 | putStr . (++ sep) . show $ (item1 .^. item2 .^. z) + 1
| ^^^
ソースコード
{-# LANGUAGE BangPatterns #-}
import Data.Bits
import qualified Data.Vector.Fusion.Stream.Monadic as VFSM
import qualified Data.Vector.Unboxed.Mutable as VUM
main :: IO ()
main = do
[n, x', y', z'] <- map (read :: String -> Int) . words <$> getLine
let
x = x' - 1
y = y' - 1
z = z' - 1
as <- VUM.unsafeNew 256 :: IO (VUM.IOVector Int)
rep n $ \i -> rep n $ \j -> do
let
k = i * n + j
item = if (((j + 1) .^. (i + 1)) .&. 2) /= 0 then n * n - 1 - k else k
VUM.unsafeWrite as (i * 16 + j) item
rep n $ \i -> rep n $ \j -> do
let
sep = if j `mod` n == (n - 1) then "\n" else " "
item1 <- VUM.unsafeRead as (i * 16 + j)
item2 <- VUM.unsafeRead as (y * 16 + x)
putStr . (++ sep) . show $ (item1 .^. item2 .^. z) + 1
infixl 6 .^.
(.^.) :: Bits b => b -> b -> b
(.^.) = xor
{-# INLINE (.^.) #-}
stream :: Monad m => Int -> Int -> VFSM.Stream m Int
stream !l !r = VFSM.Stream step l
where
step x
| x < r = return $ VFSM.Yield x (x + 1)
| otherwise = return $ VFSM.Done
{-# INLINE [0] step #-}
{-# INLINE [1] stream #-}
rep :: Monad m => Int -> (Int -> m ()) -> m ()
rep n = flip VFSM.mapM_ (stream 0 n)
{-# INLINE rep #-}