
Abbath
26.10.2018
14:06:16
В нем функция
В нее нужно из JSON передатт параметры
И сравнить с результатом который тоже в JSON
Функция всегда разная

Google

Abbath
26.10.2018
14:07:24
JSON ей соответсвует

Alexander
26.10.2018
14:07:55
какие параметры передать?

Abbath
26.10.2018
14:08:03
Приходит Value, я тяну по ключам arguments и expected

Alexander
26.10.2018
14:08:07
как ты это узнаешь?

Abbath
26.10.2018
14:08:31
Вот и я не знаю

Alexander
26.10.2018
14:08:48
ты хочешь что-то странное

Abbath
26.10.2018
14:08:51
Пока что у меня питоновский код генерит сигнатуры для хаскеля

Alexander
26.10.2018
14:08:54
ты получаешь Object

Artyom
26.10.2018
14:08:56
У меня есть подозрение, что ты можешь туда хотеть передать record с тайп-левел ключами
Нет?

Alexander
26.10.2018
14:09:00
это чушь какая-то
зачем?

Abbath
26.10.2018
14:09:19
Ты это мне?

Alexander
26.10.2018
14:09:46
пришёл модуль у него параметры {keys: [Text], solve: :: Object -> Value}

Google

Alexander
26.10.2018
14:09:59
зачем лишние извращения?

Abbath
26.10.2018
14:10:17
Ммм, откуда параметры?

Artyom
26.10.2018
14:10:25
Ладно, что-то сложное и непонятное
отваливается

Alexander
26.10.2018
14:10:28
откуда они у тебя физически?

Abbath
26.10.2018
14:10:36
Кто?
параметры?

Alexander
26.10.2018
14:10:49
информация о том, какие параметры доставать
оттуда и бери

Abbath
26.10.2018
14:11:00
{"arguments":[1.0, {"1":2},["wobl","rhtowg","euassbnct","existence","stymes","eskmo"]],"expected":[["existence","existence"]]}
Вот например такой JSON
Вот в arguments Double -> Map Int Text -> [Text] например
В рантайме я соснул конечно

Alexander
26.10.2018
14:12:05
это значит что у тебя
data Task = Task
{ taskArgumetns: [Value]
, taskExpected: [Value]
}
отдаешь их проверяющему сравниваешь

Abbath
26.10.2018
14:12:39
Но функция имеет тип Double -> Map Int Text -> [Text] -> [Text]

Alexander
26.10.2018
14:13:25
так, давай дальше, модуль который тебе присылают, на каком языке?
он грузится динамически или статически?

Abbath
26.10.2018
14:14:11
Хаскельный
module Solution where
import Data.Map
solution :: Double -> Map String Int -> [String] -> [[String]]
solution n m xs = [xs]

Google

Abbath
26.10.2018
14:14:39
Например

Alexander
26.10.2018
14:17:26
понял
в общем ты можешь сделать класс типов, который будет для функции парсить аргументы как надо

Abbath
26.10.2018
14:17:53
Хмм
Как это говно будет работать?
За мат извени
Может гайд какой есть, пример

Alexander
26.10.2018
14:19:02
можешь поискать генерогенный foldr у олега или fold arguments или как PrintF сделан
в printf в другую стороную, но идея та же

Abbath
26.10.2018
14:19:50
Функция останется простой, магия будет только в моем коде?

Alexander
26.10.2018
14:20:06
максимум нужно будет терминатор сделать
типа solution :: Double -> Map String Int -> [String] -> Result [[String]]

Abbath
26.10.2018
14:21:46
Result это что?

Alexander
26.10.2018
14:22:05
newtype Result a = Result a

Abbath
26.10.2018
14:22:25
Ясно понятнр

Alexander
26.10.2018
14:35:58
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
class Foo a where
run :: [String] -> a -> String
instance {-# OVERLAPPABLE #-} Show a => Foo a where
run [] a = show a
run _ _ = error "!"
instance {-# OVERLAPPING #-} (Read a, Foo b) => Foo (a -> b) where
run (s:ss) f = show $ run ss (f (read s))
run _ _ = error "!!"
test1, test2 :: String
test1 = run ["1","2.3"] $ \(i::Int) (j::Double) -> fromIntegral i + j
test2 = run ["[1,2]","2"] $ \(i::[Int]) (j::Int) -> take j i
в json сам переделаешь?
@a66ath ^

Abbath
26.10.2018
14:37:09
А сейчас оно на стрингах?

Alexander
26.10.2018
14:37:19
ты же видишь?

Google

Abbath
26.10.2018
14:37:22
Переделаю
Ну вижу

Alexander
26.10.2018
14:37:28
да, и Read/Show вместо ToJSON и FromJSON
скорее всего только это поменять надо будет и [Value] вместо [String] передавать
итого, у тебя а.: тип структуры сообщения у которого всегда есть parameters и expect или answer что там
делаешь тип:
data Task = Task
{ taskParameters :: [Value]
, taskExpected :: Value
} deriving Generic
deriveAeson параметрыКоторыеОткусываютТаск ''Task
точнее углубляться не надо
по типам функции тестирования генерируется парсер

Alexander
26.10.2018
17:04:15
foldr (\a b -> min <$> a <*> b <|> a <|> b) Nothing — как получше можно такую функцию переписать?

Oleg
26.10.2018
17:05:33
Алмаз дал работы на два чата
Сейчас по всем языкам клич пойдёт

Alexander
26.10.2018
17:06:02
м?

kana
26.10.2018
17:22:34
если бы было бы max, то можно было бы просто foldr max Nothing, а с min не катит, потому что Nothing меньше всего

Alexander
26.10.2018
17:24:48

A64m
26.10.2018
17:25:16

kana
26.10.2018
17:25:40
да

A64m
26.10.2018
17:25:59
где safeMinimum это минимум, который на пустом списке работает

Alexander
26.10.2018
17:29:28

kana
26.10.2018
17:29:57
safeMinimum [] = Nothing
safeMinimum xs = Just (minimum xs)

Google

A64m
26.10.2018
17:30:07
в задаче ограничение на base?

Alexander
26.10.2018
17:31:11
Да вообще задачи как таковой нет, но я думал, мало ли, появятся тут мастера бесточечного стиля и покажут класс.

Alexander
26.10.2018
17:32:52
fmap fst . uncons . sort . catMaybes
покатит?
сложность O(n) все в порядке

Alexander
26.10.2018
17:34:38

Alexander
26.10.2018
17:35:12
хотя на самом деле надо fold @@ Minumum

kana
26.10.2018
17:35:44
че за Minumum, нет такого
я помню, что раньше был
newtype Min a = Min (Maybe a)
instance Ord a => Monoid (Min a)
но сейчас ничего такого в base нет, только для полугруппы

Alexander
26.10.2018
17:36:34
где
newtype Minumum a = Minumum (Just a)
instance Monoid Minimum where
mempty = Nothing
Nothing <> x = x
y <> Nothing = y
(Just x) <> (Just y) = Just $ x <> y
а @@ фича которой нету
угу
@@ тоже нету
учитывая текущий base это наверное должно быть fold @@ (Maybe Min)

A64m
26.10.2018
17:37:44
нонэмпти зато есть

Denis
26.10.2018
17:38:31
это также походу может быть какой-то findLastMin

Alexander
26.10.2018
17:38:57
о!

Denis
26.10.2018
17:40:19
например по аналогии можно написать как find
findLast :: Foldable t => (a -> Bool) -> t a -> Maybe a
findLast p = getLast . foldMap(Last . flip (liftA2 if' p Just) Nothing)
простите за pointfree

A64m
26.10.2018
17:44:26
но нормальный человек просто линзами пользуется и все

Alexander
26.10.2018
17:46:29
> (coerce (fold :: [Data.Monoid.Last (Min Integer)] -> Data.Monoid.Last (Min Integer))) [Just 1, Just 2] :: Maybe Integer
Just 2

Denis
26.10.2018
17:46:33