私はthisを解決しようとしましたが、以下は試行品です。私のコードでIOがフラッシュされないのはなぜですか?
これをghciでhSetBuffering stdout NoBuffering
,solveAct 1
,15 10
とテストすると、ghciは数行の結果を示し、多くの時間をブロックし、一度に残りの結果を示しました。
どのようにしてリアルタイムで中間結果を確認できますか?リアルタイムで結果を見て
import Control.Monad
import Data.List
import Data.Maybe
import System.IO
readInts = fmap read . words <$> getLine :: IO [Int]
main = do
t <- readLn :: IO Int
hSetBuffering stdout NoBuffering
sequence_ $ solveAct <$> [1..t]
showTable x = intercalate "\n" $ intercalate " " . fmap show <$> x
solveAct i = do
[j, n] <- readInts
putStrLn $ "Case #" ++ show i ++ ":"
putStrLn $ showTable (take n $ solve (j-1))
digits n = [[x^y | y <- [1..n-1]] | x <- [2..10]]
primes = 2 : [x | x <- [3,5..], all (\y -> x `rem` y /= 0) $ takeWhile (<= intSqrt x) primes]
intSqrt = floor . sqrt . fromIntegral
getNDivisor n = listToMaybe [x | x <- takeWhile (<= intSqrt n) primes, n `rem` x == 0]
casesOfMat = subsequences . transpose . digits
casesOfJam n = fmap ([1 + x^n | x <- [2..10]]:) $ casesOfMat n
eachBaseReps n = fmap sum . transpose <$> casesOfJam n
solve :: Int -> [[Int]]
solve n = do
decimals <- eachBaseReps n
let divs = getNDivisor <$> decimals
guard $ all isJust divs
return $ last decimals : catMaybes divs
'sequence :: [Maybe a] - > Maybe [a]'が好きかもしれません。入力のすべての要素が 'Just'であるときに' Just xs'を正確に返します。次に、 'all isJust'チェックと' catMaybes'オペレーションを単一の 'case'オペレーションにラップすることができます。 –