- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 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 15.01.2022 16:44 # +2
bootcamp_dropout 15.01.2022 16:46 # +1
а типы на строковых литералах?
ASD_77 15.01.2022 16:48 # +2
bootcamp_dropout 23.01.2022 01:43 # 0
type World = "world";
type Greeting = `hello ${World}`;
bormand 23.01.2022 07:10 # +2
Вот, теперь у нас есть конпелятор, документация к которому собрана в виде тредов на ГК...
HoBorogHuu_nemyx 23.01.2022 08:41 # 0
ASD_77 15.01.2022 16:49 # +2
https://govnokod.xyz/_27913/
ASD_77 15.01.2022 16:47 # +1
guest6 15.01.2022 17:15 # +1
ASD_77 15.01.2022 17:29 # +1
Soul_re@ver 15.01.2022 17:35 # +1
Какое-то говно, которое почему-то нужно объявлять вручную
> function arraySort
Какое-то говно, которого нет из коробки
У меня в «С++» столько говна вручную писать не надо:
ASD_77 15.01.2022 17:51 # +2
Soul_re@ver 15.01.2022 17:54 # +1
ASD_77 15.01.2022 17:52 # +1
Soul_re@ver 15.01.2022 17:56 # +1
Steve_Brown 16.01.2022 14:03 # 0
Soul_re@ver 16.01.2022 14:11 # 0
j123123 15.01.2022 17:57 # +1
> Generics.arraySort(inArray, (x: number, y: number) => { return x - y })
Вот например, что если тут какое-нибудь NaN будет? Или твоя сортировка только на массивах без NaN работает?
j123123 15.01.2022 18:11 # +1
и надо чтоб было верно, что если есть три каких-то значения, "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, в общем полная хуйня может при такой "сортировке" произойти
Soul_re@ver 15.01.2022 18:14 # +2
Справедливости ради, сортировка по возрастанию последовательности с NaNами ма-те-ма-ти-чес-ки не определена.
Для этого нужно определять, какое поведение нужно (куда пихать эти наны) и делать соответствующий компаратор.
Вот то, что ±0 нормально не отсортирует, это минус.
> Или твоя сортировка только на массивах без NaN работает?
Большинство алгоритмов, работающих с дробными числами не ожидают NaN, INF, -0, и прочей плавучей хуйни, потому что в большинстве случаев подобная питушня — признак бага и ничего полезного с ней не сделать. В гцц даже -ffast-math сделали для тех кому похуй на питуха и его особенности.
ASD_77 15.01.2022 18:29 # +2
j123123 15.01.2022 18:31 # +1
ASD_77 15.01.2022 18:49 # +1
j123123 15.01.2022 19:01 # +1
Т.е. для доказательства сортировки надо доказать во-первых, что forall i, j in range 0 .. arrlen(a): if (i < j) then a[i] < a[j] и во-вторых что "output is a permutation of the input"
HoBorogHuu_nemyx 15.01.2022 19:06 # 0
ASD_77 15.01.2022 20:24 # 0
j123123 15.01.2022 20:03 # 0
Soul_re@ver 15.01.2022 20:11 # 0
Можно же было запилить макрос-обёртку с нужным названием над qsort.
j123123 15.01.2022 20:22 # +1