
Nikolay
19.05.2017
12:05:44
Или тайп провайдеры не умеют так?

Evgeniy
19.05.2017
12:06:23
@Dolfik WriteTo?

Nikolay
19.05.2017
12:07:10

Roman
19.05.2017
12:07:45
А почему не использовать нормальные сериализаторы вместо тайп провайдера?

Google

Evgeniy
19.05.2017
12:07:51
@Dolfik По идее, этот метод у инстанса твоего типа должен быть.

Artemy
19.05.2017
12:09:30
Вроде, через свойство JsonValue доступно.

Nikolay
19.05.2017
12:09:50

Artemy
19.05.2017
12:10:41
Типа:
let x = Settings.Load(...)
x.JsonValue.WriteTo(textWriter)

Nikolay
19.05.2017
12:11:08
Settings.GetSample().JsonValue.WriteTo(...)
Вот так)

Evgeniy
19.05.2017
12:11:23
Ага, это оно.

Roman
19.05.2017
12:12:23

Nikolay
19.05.2017
12:13:30

Evgeniy
19.05.2017
12:18:30
@Dolfik Так ты загрузку из файла починил?

Nikolay
19.05.2017
12:21:41
Я тут в перерывах между переносом базы пишу на фшарпе)

Google

Evgeniy
19.05.2017
12:22:55
Ах ты!

Akhmed
19.05.2017
14:33:06
Парни у меня тут одна задачка есть. Я ее решил на F# но такое ощущение что решение не очень.
Кто хочет решить задачу в F# стиле?

Roman
19.05.2017
14:33:27

Akhmed
19.05.2017
14:33:33
// Необходимо из последовательности значений температуры выбрать наиболее близкое к нулю температуру.
// При одинаковом значении отрицательной и положительной температуры (-2 и 2) надо выбирать положительную.(2)
// При отсутствии значений необходимо возвращать нулевое значение
проспойлерить решение сразу? Или сначала хотите сами попробовать решить?

Roman
19.05.2017
14:34:13
А
а данные на вход в каком виде?

Akhmed
19.05.2017
14:34:27
let temperatures="5 -3 -6 7 -1 8 9"
обычная строка

Roman
19.05.2017
14:34:50
строка, разделители пробелы, всегда

Akhmed
19.05.2017
14:34:55
да
ну и все целочисленное

Vasily
19.05.2017
14:37:03
```s.Split(' ')|>Seq.map (fun x-?int.Parse(x),Math.Abs(x))|>Seq.minBy snd|>Seq.map first
Тьфу
ghbvthyj nfr
примерно так

Akhmed
19.05.2017
14:37:32
не прокатит - ответ будет 1
хотя должно быть "-1"

Vasily
19.05.2017
14:38:02
А, наиболее близкую из положительных

Google

Akhmed
19.05.2017
14:38:02
ааа

Vasily
19.05.2017
14:38:22
Тогда надо чуть переписать
`"5 -3 -6 7 -1 1 8 9".Split(' ')|>Seq.map int|>Seq.map(fun x-?x,Math.Abs(x)))|>Seq.sortByDescending fst|>Seq.minBy snd |> fst
Пилять
Как тут код писать?

Dmitry
19.05.2017
14:47:16
а так
работает
или нет
` x3

k0balt
19.05.2017
14:47:27

Dmitry
19.05.2017
14:47:59
тут код в много строк
короч по три ` в начале и конце

Akhmed
19.05.2017
14:48:28
сорт в принципе не нужен - а так работает

k0balt
19.05.2017
14:48:29
много строк если, то три `

k0balt
19.05.2017
14:48:52
если 1 строка, то одна `

Akhmed
19.05.2017
14:50:01
ща
подправил, вот:
open System
let temperatures="5 -3 -6 7 -1 8 9"
//let temperatures=""
let closedToZero temperatures=
if String.IsNullOrEmpty(temperatures) then 0
else temperatures.Split([|' '|]) |> Seq.map(fun x->int(x), Math.Abs(int(x))) |> Seq.minBy snd |> fst
но вот что лично мне не нравится в этом решении это то что если список большой то мы все равно будем итерировать до конца хотя понятно что если есть хотя бы один ноль то на этом можно было бы остановиться
а ну да - еще в этом решении не соблюдается условие что если есть -1 и 1 то надо всегда выбирать 1

Roman
19.05.2017
15:08:40

Google

Roman
19.05.2017
15:09:03
не продумано

Pavel
19.05.2017
15:19:09
Хоть что-то про F#

Akhmed
19.05.2017
15:23:04
а dotnet разве сегодня?

k0balt
19.05.2017
15:23:27

Roman
19.05.2017
15:23:36

Vasily
19.05.2017
15:25:56
Я поэтому сорт и сделал
Чтобы первый min вернул

Igor
19.05.2017
15:26:12
Опять что-то про ботов, azure, и data sience?

Admin
ERROR: S client not available

Roman
19.05.2017
15:26:13

Akhmed
19.05.2017
15:26:14
Сорт убивает смысл проверки на ноль
мы делаем прохождение

Vasily
19.05.2017
15:26:46
Тогда условие с положительной температурой не будет соблюдаться

Akhmed
19.05.2017
15:27:01
почему же - вот решение Романа соблюдает

Roman
19.05.2017
15:27:17
там теперь takeWhile добавился, который все ломает

Akhmed
19.05.2017
15:27:32
я сделал такое же решение как у Романа - но не так кратко и элегантно - разложил все по отдельности )

Vasily
19.05.2017
15:27:36
А где решение Романа?

Roman
19.05.2017
15:28:02

Akhmed
19.05.2017
15:28:49
open System
let temperatures="5 -3 -6 7 -1 8 9"
// let temperatures=""
let tempArray=if String.IsNullOrEmpty(temperatures) then
Seq.empty
else
temperatures.Split([|' '|]) |> Seq.map int
let closedToZeroByAbs x y = if abs x < abs y then x else y
let closedToZero x y = if abs x = abs y then max x y else closedToZeroByAbs x y
let closedToZeroFromSequence tempArr=if Seq.isEmpty tempArr then 0 else Seq.reduce closedToZero tempArray
closedToZeroFromSequence tempArray |> printfn "%i"
- решение хоть и аналогичное но синтаксически хуже чем у Романа.

Google

Vasily
19.05.2017
15:42:22
let res="5 -3 -6 7 -1 1 8 9".Split(' ')|>Seq.map int|>Seq.map(fun x->(x,Math.Abs(x)))|>Seq.fold (fun acc (x,y)->match acc with
|0,0->x,y
|n,a when y<a->x,y
|n,a when y=a->if(x>n) then (x,y) else acc
|_->acc
) (0,0) |>fst
Во, получилось
Без сорта
В целом можно и без первого мапа обойтись

Akhmed
19.05.2017
15:44:18
тут собственно он кортеж создает и по прежнему полное прохождение ведь делает даже если 0 встретит
ну т.е. если у тебя гигабайт данных и первое значение 0 то проходить весь гигабайт нет смысла

Vasily
19.05.2017
15:45:10
На нолике мы должны уйти из цикла?

Akhmed
19.05.2017
15:45:18
крайне желательно

Vasily
19.05.2017
15:45:21
Тогда рекурсия

Akhmed
19.05.2017
15:45:27
просто на C# это ничего не стоит сделать
в императивном стиле

Vasily
19.05.2017
15:58:56
let res="5 -3 -6 7 -1 1 8 9".Split(' ') |> Seq.map int|>List.ofSeq
let rec parse arr acc =
match arr with
|[]->acc
|hd::tl->if(hd=0) then 0 else match hd,acc with
|x,0->parse tl x
|x,y when Math.Abs(x)=Math.Abs(y)->if(x>y) then x else y
|x,y->parse tl (Math.Min(Math.Abs(acc),Math.Abs(x)))
let r=parse res 0

Akhmed
19.05.2017
15:59:35
я тоже такое же решение получил
но все упирается в этот гадский List.ofSeq

Vasily
19.05.2017
15:59:42
И даже упростить слегка можно, по идее
Можно без него

Akhmed
19.05.2017
16:00:00
он ведь по сути еще хуже - создает в памяти список
для Seq match |[] не получается сделать (
ну т.е. вместо него можно Seq.isEmpty
но вот |hd::tl ->

Vasily
19.05.2017
16:01:12
Of
Ща