F#で安藤杏ちゃんの好感度をMAX＆レアアイテムALL GET (POH7)

[プログラミングで彼女を作る](https://paiza.jp/poh/ando "POH7")（paiza Online Hackathon 7）の言語別集計数を見ると、F#で提出している人が少ないようでしたので、一通りF#で書いてみました。
こうした方が良い、等のご指摘は大歓迎です。いつでもお待ちしております。

# 目
## つり目

```
seq { for n in 1 .. int (System.Console.ReadLine()) -> "Ann" }
|> Seq.reduce (+)
|> printfn "%s"
```

## 眼帯

```
open System

ignore (Console.ReadLine())
ignore (Console.ReadLine())

let a = Console.ReadLine().Split(' ')
        |> Set.ofArray

ignore (Console.ReadLine())

let b = Console.ReadLine().Split(' ')
        |> Set.ofArray

let c = b - a
printfn "%s" (if (Set.isEmpty c) then "None" else c |> Set.toSeq
                                                    |> Seq.sortBy (fun elem -> int (elem))
                                                    |> Seq.reduce (fun acc elem -> acc + " " + elem))
```

ソートするのを忘れていてハマりました。


# 髪
## ショートヘア

```
printfn "%d" (int (System.Console.ReadLine()) + int (System.Console.ReadLine()))
```

## ロングヘア

```
let ans =
    seq { for n in 1 .. 5 -> System.Console.ReadLine() }
    |> Seq.fold (fun acc elem -> acc + match elem with
                                        | "yes" -> 1
                                        | "no" -> 0) 0
printfn "%s" (if ans > 2 then "yes" else "no")
```

## ポニーテール

```
[ 1 .. int (System.Console.ReadLine()) ]
|> List.rev
|> List.iter (fun elem -> printfn "%d" elem)
printfn "0!!"
```

## ツインテール

```
open System

let cp (s : string) =
    let arr = s.Split(' ')
    float (arr.[0]) / float (arr.[1])

let ret1 = cp (Console.ReadLine())
let ret2 = cp (Console.ReadLine())
printfn "%s" (if ret1 > ret2 then "1" else "2")
```

# 服
## セーラー服

```
open System

seq { for n in 1 .. int (Console.ReadLine()) -> Console.ReadLine() }
|> Seq.reduce (fun acc elem -> acc + "_" + elem)
|> printfn "%s"
```

## カーディガン

```
seq { 1 .. int (System.Console.ReadLine()) }
|> Seq.reduce (*)
|> printfn "%d"
```

## 縞ニーソ

```
open System

let n = int (Console.ReadLine())
seq { for i in 1 .. int (Console.ReadLine()) -> match (i - 1) % (2 * n) with
                                                | _ as c when c < n -> "R"
                                                | _ as c when c >= n -> "W" }
|> Seq.iter (fun elem -> printf "%s" elem)
```

# レアアイテム
## めがね

```
open System

let n = int (Console.ReadLine())
let large = Array.zeroCreate<string[]> n
            |> Array.map (fun elem -> Console.ReadLine().Split(' '))

let m = int (Console.ReadLine())
let small = Array.zeroCreate<string[]> m
            |> Array.map (fun elem -> Console.ReadLine().Split(' '))

let mutable res = (0, 0)
for i in 0 .. (n - m) do
    for j in 0 .. (n - m) do
        let mutable flag = true

        for k in 0 .. (m - 1) do
            for l in 0 .. (m - 1) do
                 if large.[i + k].[j + l] <> small.[k].[l] then flag <- false
        
        if flag then res <- (i, j)

printfn "%d %d" (fst (res)) (snd (res))
```

宣言型に近いコードになってしまいました。

## サンタ服

```
open System

let xyzn = Console.ReadLine().Split(' ')

let mutable xlist = [ 0; ]
let mutable ylist = [ 0; ]

for i in 1 .. int (xyzn.[3]) do
    let s = Console.ReadLine().Split(' ')
    let v = int (s.[1])
    if s.[0] = "0" then xlist <- v :: xlist else ylist <- v :: ylist

xlist <- int (xyzn.[0]) :: xlist
         |> List.sort

let mutable xslist = []
for i in 0 .. (xlist.Length - 2) do
    xslist <- (xlist.Item(i + 1) - xlist.Item(i)) :: xslist

xslist <- List.sort xslist

ylist <- int (xyzn.[1]) :: ylist
         |> List.sort

let mutable yslist = []
for i in 0 .. (ylist.Length - 2) do
    yslist <- (ylist.Item(i + 1) - ylist.Item(i)) :: yslist

yslist <- List.sort yslist

printfn "%d" (xslist.Head * yslist.Head * int (xyzn.[2]))
```

これも宣言型に近いコードになってしまいました。

## 水着

```
(seq { 1L .. int64 (System.Console.ReadLine()) }
|> Seq.reduce (fun acc elem -> 
               let rec re n = if n % 10L = 0L then re (n / 10L) else n
               re (acc * elem) % 100000000000L)) % 1000000000L
|> printfn "%d"
```

計算途中では、9桁ではなく11桁取る必要がある、と言うことに気付かず苦戦しました。