Anonymous
Может он индексы строит, потому и не работает. А потом построил и начал работать.
Anonymous
Не пользовался vs в принципе
Евгений
А чо кто neovim-haskell ставил?
blkmrkt
говорят с емаксом лучший иде хаскеля, но я с ним не справился. Точнее все настроил, но слишком сложный интерфейс
Anton
nea
О, что за шрифт?
Anton
Спасибо, приглянулся мне)
dron
крайне приятный и кастомизируемый шрифтец. сам на нем сижу давно
Boris
Хаха
Boris
blkmrkt
Alexander
Привет, подсажите как прочитать три числа из входного потока ? То есть входные даныые 6 6 4. Нужно прочитать числа. Какие функции использовать ?
Dmitry
fmap read . words <$> getContents
Dmitry
fmap read . take 3 . words <$> getContents
blkmrkt
Alexander
или getLine если принципиально что они в одной строке и дальше вычитывать не надо
Alexander
В одной строке должны нахдиться это условие задачи.
Alexander
fmap read . take 3 . words <$> getContents
n <- fmap read . take 3 . words <$> getContents так записать нельзя. как правильно ?
Dmitry
λ> n <- fmap read . take 3 . words <$> getLine :: IO [Int] 12 3 4 λ> n [12,3,4] λ>
Alexander
спасибо
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
надеюсь, не спортивное программирование?
онo самое. Задачи, которые решаются элементарно на с++ пока очень сложно решаются на haskell.
Alexander
http://codeforces.com/problemset
Oleg
На хакерранке ещё вытянул бы, а на кодфорсес - используй что угодно, кроме read
Oleg
везде, где input начинается от 10^5
Anonymous
read супермедленный
у меня лишь только в одной спортивной задачке медленный cin из C++ был ботлнеком. далеко не во всех задачах подразумевается гигантский инпут
Oleg
у меня лишь только в одной спортивной задачке медленный cin из C++ был ботлнеком. далеко не во всех задачах подразумевается гигантский инпут
я говорю конкретно о haskell конкретно о codeforces, конкретно об input начиная с 10^5, на опыте полученном болью
Anonymous
зачем вообще эти задачи на хаскеле решать? одно мучение
Oleg
отнюдь
Oleg
dp на хаскеллевских array вообще офигенно выглядит
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
Alexander
и vectors
Alexander
а то иначе приходится использовать array для которого ни одного разумного довода в 2017 нет
Dmitry
а какой смысл решать спортивные задачи на языке, которого не знаешь?
Alexander
не использовать как data structure, как control норм
Alexander
а какой смысл решать спортивные задачи на языке, которого не знаешь?
я не знаю способа изучить язык, не использовав его, а решение задач хоть какая то тренировка
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
пока курс на степике ещё не забыли, а какой там принцип попадения решений в Solutions, которые открываются по сдаче задачи?
Каждый студент может опубликовать любое своё решение после того как решит задачу.
Alexander
да, нашел уже
Anonymous
у кого какие в итоге результаты по курсу?
Anonymous
среди тех, кто проходил его
Anonymous
Ребят! Чем fmap отличается от map?
Алдар
Ребят! Чем fmap отличается от map?
map для списка, fmap для функтора
Алдар
для списка это одно и тоже
Алдар
у кого какие в итоге результаты по курсу?
времени не было, ниасилил , позже пройду
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
спасибо:)