Теперь с ароматом повидла
Monday, 19 April 2010 01:25![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В преддверии Google Code Jam 2010 решил поэкспериментировать, а как на F# пишутся короткие тулзы для простых задач. В соревнованиях такого уровня часто удобно использовать как минимум два языка: один типа Питона или любого другого скриптового - для коротких и простых задач, где важна скорость кодинга, и второй типа С++/C#/Java - для серьезных вычислений. В прошлом году я все писал на C#, а сейчас решил, что овчинка часто не стоит выделки.
Результат приятно удивил - действительно просто, быстро и удобно.
Вот код задачи А из прошлогоднего Qualification:
Результат приятно удивил - действительно просто, быстро и удобно.
Вот код задачи А из прошлогоднего Qualification:
open System
open System.IO
open System.Text.RegularExpressions
let codeJam =
use reader = new StreamReader("A.in")
use writer = new StreamWriter("A.out")
let readLine _ = reader.ReadLine()
let matches regex s = Regex.IsMatch(s, regex)
let countWhere p = List.filter p >> List.length
let line = reader.ReadLine().Split(' ')
let D, N = int line.[1], int line.[2]
let words = List.init D readLine
List.init N readLine
|> List.map (fun s -> s.Replace('(', '[').Replace(')', ']'))
|> List.map (fun re -> countWhere (matches re) words)
|> List.iteri (fun i ans -> writer.WriteLine("Case #{0}: {1}", i+1, ans))