torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces 160, Division 2, A : Roma and Lucky Numbers

概要

n 個の正整数からなる列が与えられる。
この数列のうち、桁に含まれる 4 または 7 の数が k を超えない項の数を答えよ。

解法

問題定義をそのまま実装すれば解けます。

コード

import Control.Applicative
import Control.Monad
import Data.List

main = do
	[ n, k ] <- map read . words <$> getLine
	as <- words <$> getLine
	let
		res = length $ filter ( ok k ) as
	print res

ok :: Int -> String -> Bool
ok k a = count47 a <= k
	where
		count47 :: String -> Int
		count47 = length . filter ( \c -> c == '4' || c == '7' )