ЙажаСценарий / Говнокод #27955 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
namespace Generics {

    function swap<T>(arr: T[], i: number, j: number): void {
        let temp: T = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    function sortHelper<T>(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {
        if (arr.length <= 0 || !callbackfn) {
            return arr;
        }
        let len = arr.length;
        // simple selection sort.
        for (let i = 0; i < len - 1; ++i) {
            for (let j = i + 1; j < len; ++j) {
                if (callbackfn(arr[i], arr[j]) > 0) {
                    swap(arr, i, j);
                }
            }
        }
        return arr;
    }

    export function arraySort<T>(arr: T[], callbackfn?: (value1: T, value2: T) => number): T[] {
        return sortHelper(arr, callbackfn);
    }
}

function main() {
    print("testGenerics")
    let inArray = [4.0, 3.0, 4593.0, 23.0, 43.0, -1.0]
    Generics.arraySort(inArray, (x: number, y: number) => { return x - y })
    let expectedArray = [-1.0, 3.0, 4.0, 23.0, 43.0, 4593.0]
    for (let i = 0; i < expectedArray.length; i++) {
        assert(inArray[i] == expectedArray[i])
    }
}

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

Запостил: ASD_77 ASD_77, (Updated )

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

  • походу закончились говнокоды... "плак плак"... а сколько было фана...
    Ответить
  • ну что вас впечатляют возможности моего компилятора? завидуйте с/c++ и не забудьте правильно [* & std::unique_t std::shared_t] херни понаставить ...
    Ответить
  • > function swap
    Какое-то говно, которое почему-то нужно объявлять вручную

    > function arraySort
    Какое-то говно, которого нет из коробки

    У меня в «С++» столько говна вручную писать не надо:
    #include <cassert>
    #include <algorithm>
    #include <vector>
    
    int main()
    {
        std::vector inArray {4.0, 3.0, 4593.0, 23.0, 43.0, -1.0};
        std::ranges::sort(inArray);
        auto expectedArray = {-1.0, 3.0, 4.0, 23.0, 43.0, 4593.0};
        assert( std::ranges::mismatch(inArray, expectedArray).in1 == inArray.end() );
    }
    Ответить
    • и не забудь xxxx "::" xxxx "::" xxxx "::" xxxx "::" xxxx "::" раставить а то как-то нечитаемо получается
      Ответить
    • в твоем говносорте нельзя указать критерий сортировки
      Ответить
      • схуяли? Also: Расставил:
        #include <cassert>
        #include <algorithm>
        #include <vector>
        
        int main()
        {
            using std::vector;
            using namespace std::ranges;
            vector inArray = {4.0, 3.0, 4593.0, 23.0, 43.0, -1.0};
            sort(inArray, greater{});
            auto expectedArray = {-1.0, 3.0, 4.0, 23.0, 43.0, 4593.0};
            assert( mismatch(inArray, expectedArray).in1 == inArray.end() );
        }
        Ответить
      • А ты в своем тупоскрипте можешь формально доказать, что сортировка действительно сортирует, а не делает какую-то хуйню?

        > Generics.arraySort(inArray, (x: number, y: number) => { return x - y })

        Вот например, что если тут какое-нибудь NaN будет? Или твоя сортировка только на массивах без NaN работает?
        Ответить
        • Чтоб сортировка через сравнения нормально работала, надо чтоб это сравнение отвечало определенным критериям, скажем вот есть у тебя функция
          bool cmp(double a, double b)
          {
            return a < b;
          }


          и надо чтоб было верно, что если есть три каких-то значения, "a, b, c" и при этом "cmp(a,b) == false" и "cmp(b, c) == false" то тогда верно и "cmp(a, c) == false" должно быть. А теперь представим себе, что a = 1.0, b = NaN, c = 2.0
          Что получится? (1.0 < NaN) это false, (NaN < 2.0) это false, но при этом (1.0 < 2.0) это true, в общем полная хуйня может при такой "сортировке" произойти
          Ответить
        • > Вот например, что если тут какое-нибудь NaN будет?
          Справедливости ради, сортировка по возрастанию последовательности с NaNами ма-те-ма-ти-чес-ки не определена.
          Для этого нужно определять, какое поведение нужно (куда пихать эти наны) и делать соответствующий компаратор.
          Вот то, что ±0 нормально не отсортирует, это минус.

          > Или твоя сортировка только на массивах без NaN работает?
          Большинство алгоритмов, работающих с дробными числами не ожидают NaN, INF, -0, и прочей плавучей хуйни, потому что в большинстве случаев подобная питушня — признак бага и ничего полезного с ней не сделать. В гцц даже -ffast-math сделали для тех кому похуй на питуха и его особенности.
          Ответить
          • парни вы не забыли что я пишу компилятор а не библиотечку для сортировки, а?
            Ответить
            • А через твой компилятор можно формально доказывать корректность сортировки?
              Ответить
                • А это уже твои проблемы. Вот в Agda можно доказать через систему типов. https://www.twanvl.nl/blog/agda/sorting

                  Т.е. для доказательства сортировки надо доказать во-первых, что forall i, j in range 0 .. arrlen(a): if (i < j) then a[i] < a[j] и во-вторых что "output is a permutation of the input"
                  Ответить
                  • это далеко за пределами моего понимания и желания проимплементировать
                    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8