Anonymous
Может он индексы строит, потому и не работает. А потом построил и начал работать.
Anonymous
Не пользовался vs в принципе
Евгений
А чо кто neovim-haskell ставил?
blkmrkt
говорят с емаксом лучший иде хаскеля, но я с ним не справился. Точнее все настроил, но слишком сложный интерфейс
Ale
Anton
blkmrkt
Anton
Спасибо, приглянулся мне)
dron
крайне приятный и кастомизируемый шрифтец. сам на нем сижу давно
Boris
Хаха
Boris
blkmrkt
Alexander
Привет, подсажите как прочитать три числа из входного потока ?
То есть входные даныые 6 6 4. Нужно прочитать числа. Какие функции использовать ?
Max
Dmitry
fmap read . words <$> getContents
Dmitry
fmap read . take 3 . words <$> getContents
blkmrkt
Alexander
или getLine если принципиально что они в одной строке и дальше вычитывать не надо
Alexander
В одной строке должны нахдиться это условие задачи.
Dmitry
λ> n <- fmap read . take 3 . words <$> getLine :: IO [Int]
12 3 4
λ> n
[12,3,4]
λ>
Alexander
спасибо
Oleg
Oleg
import qualified Data.ByteString.Char8 as BS
-- getInts::IO [Int]
-- getInts = fmap (unfoldr readOne) BS.getLine where
-- readOne s = do
-- (x , s') <- BS.readInt s
-- return (x, BS.drop 1 s')
getInts::IO [Int]
getInts = go <$> BS.getLine where
go s = case BS.readInt s of
Nothing -> []
Just (x, s') -> x : go (BS.drop 1 s')
getInt::IO Int
getInt = do
line <- BS.getLine
let Just (x, _ ) = BS.readInt line
return x
getInt2::IO (Int,Int)
getInt2 = do
line <- BS.getLine
let Just (x, l') = BS.readInt line
Just (y, _) = BS.readInt $ BS.drop 1 l'
return (x,y)
getInt3::IO (Int,Int, Int)
getInt3 = do
line <- BS.getLine
let Just (x, l') = BS.readInt line
Just (y, l'') = BS.readInt $ BS.drop 1 l'
Just (z, _) = BS.readInt $ BS.drop 1 l''
return (x,y,z)
Alexander
http://codeforces.com/problemset
Oleg
Oleg
На хакерранке ещё вытянул бы, а на кодфорсес - используй что угодно, кроме read
Oleg
везде, где input начинается от 10^5
Anonymous
read супермедленный
у меня лишь только в одной спортивной задачке медленный cin из C++ был ботлнеком. далеко не во всех задачах подразумевается гигантский инпут
Oleg
Anonymous
зачем вообще эти задачи на хаскеле решать? одно мучение
Oleg
отнюдь
Oleg
dp на хаскеллевских array вообще офигенно выглядит
Anonymous
на списках тоже можно вроде))
Oleg
Anonymous
Oleg
Oleg
import qualified Data.ByteString.Char8 as BS
-- getInts::IO [Int]
-- getInts = fmap (unfoldr readOne) BS.getLine where
-- readOne s = do
-- (x , s') <- BS.readInt s
-- return (x, BS.drop 1 s')
getInts::IO [Int]
getInts = go <$> BS.getLine where
go s = case BS.readInt s of
Nothing -> []
Just (x, s') -> x : go (BS.drop 1 s')
getInt::IO Int
getInt = do
line <- BS.getLine
let Just (x, _ ) = BS.readInt line
return x
getInt2::IO (Int,Int)
getInt2 = do
line <- BS.getLine
let Just (x, l') = BS.readInt line
Just (y, _) = BS.readInt $ BS.drop 1 l'
return (x,y)
getInt3::IO (Int,Int, Int)
getInt3 = do
line <- BS.getLine
let Just (x, l') = BS.readInt line
Just (y, l'') = BS.readInt $ BS.drop 1 l'
Just (z, _) = BS.readInt $ BS.drop 1 l''
return (x,y,z)
Dmitrii
На Haskell может хотеться решать задачи ради челленджа, чтобы узнать получше язык и, возможно, доказать (себе или всем остальным), что на нём можно писать олимипадные задачи. Например, техника ленивого динамического программирования очень изящная и простая:
http://jelv.is/blog/Lazy-Dynamic-Programming/
Другое дело, что на codeforces используется следующая команда для компиляции решений на Haskell (не говоря уже о том, что компилятор вообще 7.8.3):
ghc --make -O %s
А это значит, что никакого эффективного представления текста, никаких структур данных типа Map или HashMap, даже монады State нет и прочего. Поэтому про серьёзное олимпиадное программирование задач на производительность с большими ограничениями можно забыть. Все эти вещи (ну, кроме монады State) в остальных привычных для олимпиадного программирования языках просто уже находятся в стандартной библиотеке. То есть данная система тупо не учитывает особенности экосистемы языка. К сожалению, я не видел хорошей в этом плане платформы для решения олимпиадных задач на Haskell :(
Dmitrii
Так как все эти вещи не в base, а в различных библиотека
Artyom
containers вроде точно где-то давали использовать
то ли на spoj, то ли на CF
Oleg
На Haskell может хотеться решать задачи ради челленджа, чтобы узнать получше язык и, возможно, доказать (себе или всем остальным), что на нём можно писать олимипадные задачи. Например, техника ленивого динамического программирования очень изящная и простая:
http://jelv.is/blog/Lazy-Dynamic-Programming/
Другое дело, что на codeforces используется следующая команда для компиляции решений на Haskell (не говоря уже о том, что компилятор вообще 7.8.3):
ghc --make -O %s
А это значит, что никакого эффективного представления текста, никаких структур данных типа Map или HashMap, даже монады State нет и прочего. Поэтому про серьёзное олимпиадное программирование задач на производительность с большими ограничениями можно забыть. Все эти вещи (ну, кроме монады State) в остальных привычных для олимпиадного программирования языках просто уже находятся в стандартной библиотеке. То есть данная система тупо не учитывает особенности экосистемы языка. К сожалению, я не видел хорошей в этом плане платформы для решения олимпиадных задач на Haskell :(
есть там containers, нормально часто Map и IntMap Заходит, да и State
Oleg
Alexander
и vectors
Alexander
а то иначе приходится использовать array для которого ни одного разумного довода в 2017 нет
Нурлан
Dmitry
а какой смысл решать спортивные задачи на языке, которого не знаешь?
Alexander
не использовать как data structure, как control норм
Dmitry
ну просто вряд ли достишнешь высоких резутьтатов на языке, которым не владеешь. если же это просто для практики, то это ок, конечно.
Dmitry
но тогда зачем вместо идеоматичного решения, которое якобы медленное, писать неидеоматичное на явной рекурсии, если про производительность ничего не говорится в условии, да и высказывание довольно-то таки голословное.
Dmitry
хоть бенчмарк запилите, насколько read уступает вот этому вот, что тут написали
Dmitry
в любом случае, то, что вы хотите выглядит скорее так:
L.take 3 $ L.unfoldr (readInt . C8.dropWhile isSpace) "10 20 30 40"
чем та портянка с явной рекурсией
Alexander
кстати на хаккерранке не раз натыкался на проблему с инлайнером
Alexander
всегда забываю пример, но если правильно помню то с fmap read. words можно наткнуться что его заинлайнит и каждый раз будут заново парсить цифры
Alexander
в итоге решение тупит и тормозит где не должно
Alexander
а если фмапом это не поднимать сразу то все ок
Dmitry
в общем, еще есть какие-то искусственные ограничения, которые вынуждают писать какой-то изврат вместо нормального кода
Dmitry
сразу этого не видно
Alexander
причем там разница fmap foo bar vs bar >>= return . foo
Alexander
fmap вообще подлый
Alexander
хорошо щас <$!> есть
Alexander
у Кирилла подобная штука в реальном коде была, там в thunk уходил deepseq и в итоге вычислялось все не в том треде
Alexander
пока курс на степике ещё не забыли, а какой там принцип попадения решений в Solutions, которые открываются по сдаче задачи?
Anton
Alexander
да, нашел уже
Anonymous
у кого какие в итоге результаты по курсу?
Anonymous
среди тех, кто проходил его
Anonymous
Ребят! Чем fmap отличается от map?
Алдар
для списка это одно и тоже
Anonymous
Т.е. map сейчас бесполезен?
Alexander
ну он фиксирует тип
Alexander
например:
map (+1) $ fromList [1..10] -- скомпилируется
fmap (+1) $ fromList [1..10] -- нет
Alexander
Prelude GHC.Exts> map (+1) $ fromList [1..10]
[2,3,4,5,6,7,8,9,10,11]
Prelude GHC.Exts> fmap (+1) $ fromList [1..10]
<interactive>:3:1: error:
• Non type-variable argument in the constraint: Num (Item (f b))
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall (f :: * -> *) b.
(Num (Item (f b)), Num b, Functor f, Enum (Item (f b)),
IsList (f b)) =>
f b
Alexander
новые бананы!
Anatolii
я всю неделю думал, когда уже бананы будут новые
Anatolii
спасибо:)