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

    −96

    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
    18. 18
    19. 19
    20. 20
    x = str(x)                                            # x == '987.654'
    dot = x.find('.')                                  # dot == 3
    whole = x[:dot]                                 # whole == '987'
    nums = '0123456789'                     # 
    tenths = x[(dot + 1):(dot + 2)]         # tenths == '6'
    max_digits = 6                                  # Directions say x is not > 100,000
    filler = max_digits - dot                   # filler == 3 (dot is equal to the number of digits in whole)
    big_num = ('0' * filler) + whole       # big_num == '000987'
    
    e5 = (nums.find(big_num[0:1])) * 100000   # e5 == 0
    e4 = (nums.find(big_num[1:2])) * 10000     # e4 == 0
    e3 = (nums.find(big_num[2:3])) * 1000       # e3 == 0
    e2 = (nums.find(big_num[3:4])) * 100         # e2 == 900
    e1 = (nums.find(big_num[4:5])) * 10           # e1 == 80
    e0 = (nums.find(big_num[5:6]))                   # e0 == 7
    
    the_decider = '9'.find(tenths) + '8'.find(tenths) + '7'.find(tenths) + '6'.find(tenths) + '5'.find(tenths) + 5
    
    rounded = (e5 + e4 + e3 + e2 + e1 + e0) + the_decider
    print rounded

    Эта, кхм, программа предназначается для округления положительных натуральных чисел величиной до 100000.

    Запостил: aibo, 13 Марта 2012

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

    • воистину говно.
      http://docs.python.org/library/functions.html#round
      Ответить
    • По заданию функцией round нельзя было пользоваться.
      Ответить
      • А даже если нельзя...

        r = math.fmod(x, 1) #операция деления с остатком определена для дробных чисел. Можно и обычное % использовать.
        res = x - r + (0 if r<0.5 else 1)

        Ну или если охота поизвращаться со строками,
        i, sep, r = str(x).partition('.') #зависимость от разделителя, ага.
        if sep is None:
        r = '0'
        res = int(i) + (1 if r[0] in '56789' else 0)
        Ответить
        • Ну, писал не я :)
          Для округления достаточно добавить к любому числу 0.5 и от результата отбросить дробную часть.
          Ответить
          • Черт, вечно забываю про этот трюк.
            Ответить
            • > вечно забываю про этот трюк.
              видимо сказывается очень далеко отброшенная дробная часть
              Ответить
      • Значит лаба.
        Ответить
      • Нахер такие задания, где нельзя пользоваться встроенными средствами языка. И задающих такие задания - в биореактор.
        Ответить
    • Это зародыш не обычного индуса, а как минимум факира.
      Ответить

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