LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-23

プログラミングで彼女を作る(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桁取る必要がある、と言うことに気付かず苦戦しました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1