skiminok: (Default)
[personal profile] skiminok

open System

open System.IO

 

do

    use reader = new StreamReader("B.in")

    use writer = new StreamWriter("B.out")

    let readLine _ = reader.ReadLine()

 

    let testCount = reader.ReadLine() |> int

    let split (s: String) = s.Split(' ') |> List.ofArray

    let gcd a b = bigint.GreatestCommonDivisor(a, b)

 

    let solve (y::_ as moments) =

        Seq.pairwise moments

        |> Seq.map (fun (x,y) -> abs(y-x))

        |> Seq.reduce gcd

        |> fun g -> (g - (y % g)) % g

 

    List.init testCount

        (readLine >> split >> List.map bigint.Parse >> List.tail >> List.sort >> List.rev)

    |> List.map solve       

    |> List.iteri (fun i ans -> writer.WriteLine("Case #{0}: {1}", i+1, ans))

Date: Monday, 10 May 2010 19:54 (UTC)
From: [identity profile] kit1980ukr.livejournal.com
Раз ты большой любитель F#, может есть желание добавить/исправить примеры и т.д. на http://progopedia.ru/language/fsharp/ (а в английской версии http://progopedia.com/ F# вообще пока нету)?

И вот только что комментарий кто-то добавил: http://progopedia.ru/language/fsharp/#comment-49390764 Прав он или нет?

Date: Monday, 10 May 2010 20:00 (UTC)
From: [identity profile] skiminog.livejournal.com
Насчет комментария. Такая возможность есть в синтаксисе, но, ей, наоборот, стараются пользоваться пореже, пока есть возможность. У компилятора F# сильный вывод типов, в частности, int в примере совершенно необязательно писать, компилятор сам его определит. Указывать типы вручную нужно в крайних случаях. А указывать их там, где это не требуется - вот это и есть "некошерно" :)

А насчет примеров - было бы время, может, и занялся бы.
На самом деле на Хабрахабре, fsharp.net и в книгах вроде "Expert F#" есть огромное количество примеров, демонстрирующих те или иные возможности языка. Для энциклопедии скопипастить их будет вполне достаточно.

Profile

skiminok: (Default)
skiminok

Most Popular Tags

July 2011

S M T W T F S
     12
3456789
10111213141516
17181920212223
242526272829 30
31