1. Python / Говнокод #9636

    −103

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    def sun(i):
        s = str(i)
        c = 0
        for j in range(0,3):
            if s[j] == '0': return False
            c += int(s[j])
        if c == 10: return True
        return False
    
    
    i = 1
    count = 0
    for i in range(118,812):
        if sun(i):
            print i
            count += 1
    print 'Total: ' + str(count)

    Программа выводит трёхзначные числа, не содержащие нуля и сумма которых равна десяти. А также их количество.

    Запостил: Govnocoder#0xFF, 10 Марта 2012

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

    • Не, ну конечно можно было написать так:

      def cond(x):
          s = str(x)
          return '0' not in s and sum(int(d) for d in s) != 10;
      
      l = [x for x in range(100, 1000) if cond(x)]
      
      print '\n'.join(str(x) for x in l)
      print 'SUM: ', sum(l)


      Но что вы хотите от людей с Паскалем головного брейна?
      Ответить
      • У меня уже ПАСКАЛЬ от этого.
        Ответить
      • > print 'SUM: ', sum(l)
        print 'Total: ', len(l)

        Функциональненько.
        nums = [100 * x + 10 * y + z | x <- [1..9], y <- [1..9],
                                       z <- [1..9], sum [x, y, z] /= 10]
        main = do
                 print nums
                 putStrLn ("Total: " ++ (show $ length nums))
        Ответить
        • На 2 попугая функциональнее!!1 // нужен Control.Monad

          main = putStrLn $ unlines nums ++ "Total: " ++ show (length nums)
              where nums = map (show =<<) $ filter ((==10) . sum) $ replicateM 3 [1..9]
          Ответить
          • ps. map ... filter - не айс, [ .. | .. ] как у roman-kashitsyn будет получше.
            Ответить
            • почему мап и фильтр не айс?
              Ответить
              • Потому что их в данном случае можно заменить на list comprehension, который и filter и map и на дуде игрец.
                Ответить
      • Лучше так:
        digits = range(1, 10)
        L = [str(i) + str(j) + str(k) for i in digits for j in digits for k in digits if i + j + k == 10]
        print L, len(L)
        Ответить
    • опять лаба, опять...
      Ответить
    • >range(118,812)
      Оптимизация, однако!
      Ответить
    • Моё

      >>> def cond(x):
      ...     l = map(int, str(x))
      ...     if 0 in l: return False
      ...     return sum(l) == 10
      ...
      >>> filter(cond, range(1000))
      [19, 28, 37, 46, 55, 64, 73, 82, 91, 118, 127, 136, 145, 154, 163, 172, 181, 217
      , 226, 235, 244, 253, 262, 271, 316, 325, 334, 343, 352, 361, 415, 424, 433, 442
      , 451, 514, 523, 532, 541, 613, 622, 631, 712, 721, 811]
      Ответить

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