1. Куча / Говнокод #12096

    +125

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    happy_numbers = [ tos (a,b,c,d,e,f a b c d e) | a <- [0..9], b <- [0..9], c <- [0..9], d <- [0..9], e <- [0..9], f a b c d e <= 9, f a b c d e >= 0 ]
    	where 
    		tos (a,b,c,d,e,f) = show a ++ show b ++ show c ++ show d ++ show e ++ show f
    		f a b c d e = a + b + c - d - e
    
    main = mapM print $ happy_numbers

    Запостил: Fai, 11 Ноября 2012

    Комментарии (52) RSS

    • К слову, я охреневаю над хаскелем. Даже говнокод на нём компактный и нормально читается.
      Ответить
      • Можно еще вот так поговнокодить:
        import Control.Monad
        
        happy_numbers = do
            a <- [0..9]
            b <- [0..9]
            c <- [0..9]
            d <- [0..9]
            e <- [0..9]
            let f = a + b + c - d - e
            guard (f >= 0 && f <= 9)
            return $ concatMap show [a, b, c, d, e, f]
        
        main = mapM print $ happy_numbers
        Ответить
        • >let f = a + b + c - d - e
          А как это работает над списками? Аппликативые функторы в монадах?
          Ответить
          • Нет, в этой строчке тупо складывают и вычитают самые обычные числа ;)
            Раскури устройство списковой монады, если интересно узнать как это работает.
            Ответить
            • Как поправить?
              http://ideone.com/QTh4a0
              Ответить
              • Это только с монадой контроля работает, а ты пытаешься монаду IO заставить так работать.
                Ответить
                • > монадой контроля
                  Надмозг детектед.
                  Ответить
                  • Контрол монадой? Ни разу не сталкивался с ней просто, перевёл как понял.
                    Ответить
                    • Просто пакет Control, посвященный разным управляющим структурам. А в нем пакет Monad с типичными монадами.

                      P.S. А ну да, там еще функторы в этом пакете.

                      http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Monad.html
                      Ответить
              • http://ideone.com/akl7Uj
                Ты смешал две монады и ожидаешь, что это будет работать.
                Ответить
                • > Ты смешал две монады...
                  ...а взболтать забыл.
                  Ответить
                  • То есть я вернул из майна IO [IO()], а надо было IO()?
                    Ответить
                    • Нет, ты внутри монады списка попытался работать с монадой IO напрямую. Если бы ты в последней строчке написал не print (a,b), а return $ print (a,b), тогда бы ты получил [IO()] (который легко можно превратить в IO ()). А так твоя конструкция do не скомпилится вне зависимости от того, будет она в main или нет.
                      Ответить
        • А как сможешь переписать универсальную версию для номеров с длиной 2N
          import Data.Char
          
          expand (x:[]) = x
          expand (x:xs) = x ++ (expand xs)
          
          getns 1 = [0..9]
          getns n = expand [(map (\n -> n*10 + a) $ getns (n-1)) | a <- [0..9]]
          
          happy_numbers2 n = [ l*(10^n) + r | l <- getns n, r <- getns n, check l r ]
          	where 
          		check l r = sumof l == sumof r
          		sumof n = sum $ getDigits n
          		getDigits n = map (\c -> (digitToInt c)) (show n)
          
          main = mapM print $ happy_numbers2 4
          Ответить
          • Так сойдет? http://ideone.com/JSOVjn
            Ответить
            • Борманд - хаскеля-бог (притом при жизни) конечно, но грязный монадический код надо минимизировать.
              Ответить
              • Хм, грязный код тут только в 18й строке. Все остальное чистое как слеза младенца.
                Ответить
              • > грязный монадический код

                Монады - это модель грязного мира на чистом языке.

                Это как пластиковая какашка. Она только выглядит как побочный эффект.
                Ответить
            • Не вижу принципиальных улучшений, за исключением, конечно sumDigits. Кажется, что можно ещё лучше.
              Ответить
    • Поддельные счастливые числа: выглядят так же, как счастливые, но радости от них никакой
      Ответить
      • Это всё из-за кавычек на выводе.
        Ответить
    • Обратитесь вы уже к администрации сайта, пусть сделают категорию «Хаскель».
      Ответить
      • И там будет три с половиной говнокода, которые плюсуют по двум причинам:
        1. Ух ты! Хоть что то хаскелевое на говнокоде.
        2. Это же хаскель... Ничего не понимаю, значит говно - плюсану.
        Ответить
        • 1. Почему бы нет?
          2. Отличный повод расширить кругозор
          Ответить
          • Ладно, пойду напишу.

            http://govnokod.reformal.ru/proj/?ia=376309
            Ответить
            • Плюсанул. Жаль нет промышленых говнокодов, кроме тех что в стандартной библиотеке. Этак будут приходить статистикадрочеры и смотреть: на Хаскеле почти нет говнокодов, а знатчит на нем говнокодить тяжело, а значит язык хороший. Но плюс в том, что мы освободим раздел кучи от Хаскель-говна.
              Ответить
              • Хаскель-говно не достойно даже кучи?
                Ответить
              • Посмотри 3д шутер на хаскеле, к сожалению я забыл ее название...

                UPD: Frag, http://www.youtube.com/watch?v=0jYdu2u8gAU
                Ответить
                • Слайдшоу какое-то.
                  Ответить
                  • Они портировалипереписали квейк на Хаскель?
                    Ответить
                  • Это видеозахват лагает. Посмотри на счетчик фпс в углу. Сам автор об этом написал в комменте к видео.
                    Ответить
                    • А что-то типа vim есть на хаскеле?
                      Ответить
                      • http://leksah.org/
                        Ответить
                        • Именно vim нужен. С текстовым интерфейсом. Можно без свистелок и перделок.
                          Ответить
                        • Кстати мне эта иде больше всех понравилась под хаскель, а кто что посоветует из того что пользовались?
                          Ответить
                          • > а кто что посоветует из того что пользовались?

                            Для всех языков использую Sublime Text 2. Рекомендую попробовать.
                            Ответить
                            • Для Хаскеля подсветка синтаксиса, автодополнение кода, снипеты, показывает типы выражений при подводе мышью?
                              Ответить
                              • Подсветка, "тупое" автодополнение, снипеты (легко делать новые), типы может показывать с плагином.

                                Рекомендую уже всё-таки попробовать.
                                Ответить
                        • Не соответствует по пункту "типа vim". Где вставка из буфера обмена через
                          "+gP
                          ? Откуда столько меню и кнопок?
                          Ответить
                          • Да да да. Интерфейс перегружен.
                            Ответить
                      • Есть http://www.haskell.org/haskellwiki/Yi
                        Ответить
                        • Ты так говоришь, как будто хоть раз его запускал :)
                          Ответить
                          • Но ведь он правда есть!
                            Ответить
                            • Его практически нет для пользователей Windows и с плясками с бубном для пользователей Linux, чей дистрибутив унаследован от Debian (на Федоре так и не собрался у меня).

                              А так редактор неплохой, довольно шустрый, правда, мутные глюки портят всё впечатление. Ну и мне почему-то кажется, что динамические языки лучше подходят в качестве языка расширения для интерактивных программ вроде текстового редактора.
                              Ответить
                              • Динамическая надстройка выглядит как более расово-верный подход (тот же yi зависит от hint): то есть рантайм таскается выборочно. Другое дело, что сложность этого подхода намного выше (и существующая надстройка не идеал), и до elisp пока как до китая в плане удобства.
                                Ответить
                    • Да, не обратил внимание.
                      Ответить
      • если честно, говны порядком подзаебали хаскелем и прочей функциональщиной
        Ответить
        • Верный признак того, что этих ненормальных самое время отселить в отдельную функциональную песочницу.
          Ответить
        • Дискриминация по парадигмальному признаку!
          Ответить

    Добавить комментарий