- プログラミングのお題スレ Part6©2ch.net
458 :デフォルトの名無しさん[sage]:2015/02/05(木) 20:31:02.61 ID:yEh0kGG/ - >>444 F#
let points (x, y) = seq { for x in [x-1; x; x+1] do for y in [y-1; y; y+1] -> x, y } let spaces map p = points p |> Seq.filter(fun p -> Set.contains p map) let findRoom map p = Seq.tryFind (Set.intersect (Set(spaces map p)) >> Seq.isEmpty >> not) let lookup map rooms p = match findRoom map p rooms with | None -> Set.add (Set [p]) rooms | Some room -> Set.remove room rooms |> Set.add (Set.add p room) let charsi data = (data+"").Split '\n' |> Seq.mapi(fun y -> Seq.mapi(fun x c -> (x,y),c)) |> Seq.collect id let makeMap = charsi >> Seq.choose(function p, '.' -> Some p | _ -> None) >> Set.ofSeq let printCount data = let map = makeMap data Seq.fold (lookup map) Set.empty map |> Set.count |> printfn "%s\n%d rooms" data printCount "##### #.#.# ##.## #####"
|
|