1. bash / Говнокод #12198

    −108

    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
    21. 21
    22. 22
    23. 23
    24. 24
    # For bash and ksh, we can use faster builtin routines to do manipulation,
    # otherwise (ash) fall back to slower method using `expr'.
    # The extra level of indirection using `eval' is necessary a) for ksh, and
    # b) to get past ash.
    
    if [ "$RANDOM" != "$RANDOM" ]
    then
        math () {
            eval echo "\$(($*))"
        }
        index () {  # index string c
            eval "I=\${1%$2*}"
            eval echo "\${#I}"
        }
        ...
    else
        math () {
            expr "[email protected]"
        }
        index () {  # index string c
            expr $1 : ".*$2" - 1
        }
        ...
    fi

    Отличный способ определения шелла из старослакварского /dev/MAKEDEV.

    Запостил: bormand, 26 Ноября 2012

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

    • > if [ "$RANDOM" != "$RANDOM" ]
      Рандом рандому рознь.
      Ответить
      • Подбросим две 32768-гранные кости, и если выпало одинаковое, кхм, число (а на самом деле не выпало ничего, видимо кости просто испарились в воздухе), то наша вселенная работает на старом движке, и нужно быть осторожным, и не пользоваться API появившимся в более свежих вселенных.
        Ответить
    • При виде условия с рандомом придумался корректный метод сортировки массивов, модификация RandomSort (где-то недавно был тред).
      Пусть выбираются два рандомных элемента в массиве, а свап между ними происходит по какому-то условию, например зависит от погоды во Вьетнаме.
      Ответить
      • А чем такой рандомсорт лучше обычного?
        Ответить
        • Еще дольше будет.

          Например выбираем два случайных элемента, и свопим их только в том случае если первый больше второго, и разница их индексов не больше разницы между самими элементами. Правда я не уверен, будут ли сортироваться любые входные массивы.

          i = choose_random_index();
          j = choose_random_index();
          
          if (array[i]>array[j] && (i-j)<=(array[i]-array[j]))
            swap(array, i, j);
          
          ...
          Ответить
          • > и разница их индексов не больше разницы между самими элементами
            > будут ли сортироваться любые входные массивы
            Не будут. Пример: [0.6, 0.5]
            Ответить
    • Тут функция index удаляет с строки все символы совпадающие с 2м параметром функции и далее до конца, потом вычисляет размер оставшейся строки,
      ${1%$2*}, наименьшее совпадение с конца строки в первом аргументе с вторым и удаляет его.
      Ответить
    • Makedev?! Ужк тыщщу лет как едро само девайсы создаеь
      Ответить

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