THUDM / CodeGeeX2

CodeGeeX2: A More Powerful Multilingual Code Generation Model
https://codegeex.cn
Apache License 2.0
7.55k stars 532 forks source link

用Ask问问题生成其他语言代码不太对 #215

Closed Chanyon closed 3 months ago

Chanyon commented 3 months ago

例如:用ziglang写一个快速排序函数。

const std = @import("std");

quick_sort: fn [T, T]([T]*) -> [T]* {
    if (n == 0) return []const T{};
    const pivot = a[n / 2];
    var left: [T]* = undefined;
    var middle: [T]* = undefined;
    var right: [T]* = undefined;
    var i = 0;

    while (i < n) {
        if (a[i] < pivot) {
            if (left == undefined) {
                left = &a[i];
            } else {
                std.mem.move(left + i - prev, &a[i], sizeof(T));
            }
        } else if (a[i] == pivot) {
            if (middle == undefined) {
                middle = &a[i];
            } else {
                std.mem.move(middle + i - prev, &a[i], sizeof(T));
            }
        } else {
            if (right == undefined) {
                right = &a[i];
            } else {
                std.mem.move(right + i - prev, &a[i], sizeof(T));
            }
        }
        i += 1;
    }

    return quick_sort(left, prev) + middle + quick_sort(right, prev);
}

pub fn main() void {
    const a: [T]* = &[1, 2, 3, 4, 5, 6, 7, 8, 9][];
    const n = std.meta.sizeof(T);
    const sorted_a = quick_sort(a, n);
    std.debug.print("{}\n", .{sorted_a});
}
Chanyon commented 3 months ago

其他AI:

const std = @import("std");

fn quickSort(arr: []*i32, low: usize, high: usize) !void {
    if (low < high) {
        var pivot: usize = partition(arr, low, high);

        quickSort(arr, low, pivot - 1);
        quickSort(arr, pivot + 1, high);
    }
}

fn partition(arr: []*i32, low: usize, high: usize) usize {
    var pivot: i32 = *arr[high];
    var i: usize = low;

    for (j := low; j < high; : (j += 1)) {
        if (*arr[j] <= pivot) {
            arr[i] = arr[j];
            arr[j] = arr[i + 1];
            i += 1;
        }
    }

    arr[i] = arr[high];
    arr[high] = arr[i + 1];

    return i;
}

pub fn main() !void {
    var arr: []*i32 = try std.heap.GeneralPurposeAllocator.alloc(int, 10);
    try arr[0] = 10;
    try arr[1] = 7;
    try arr[2] = 8;
    try arr[3] = 9;
    try arr[4] = 1;
    try arr[5] = 5;
    try arr[6] = 2;
    try arr[7] = 3;
    try arr[8] = 4;
    try arr[9] = 6;

    quickSort(arr, 0, 9);

    for (i := 0; i < 10; : (i += 1)) {
        std.io.getStdOut().writer().print("{} ", *arr[i]);
    }
}

修改:在线运行

const std = @import("std");

fn quickSort(arr: []i32, low: usize, high: usize) void {
    if (low >= high) {
        return;
    }
    const pivot: usize = partition(arr, low, high);
       std.debug.print("{any}\n",.{pivot});
        quickSort(arr, low, pivot);
        quickSort(arr, pivot + 1, high);
}

fn partition(arr: []i32, low: usize, high: usize) usize {
    var i: usize = low;
    var j:usize = high;
    while (i < j) {
     while (i < j and arr[j] >= arr[low]) {
        j -= 1;
     }

     while (i < j and arr[i] <= arr[low]) {
        i += 1;
     }
       const temp = arr[i];
       arr[i] = arr[j];
       arr[j] = temp;
    }

    const temp1 = arr[i];
    arr[i] = arr[low];
    arr[low] = temp1;

    return i;
}

pub fn main() !void {
    var arr: []i32 = try std.heap.page_allocator.alloc(i32, 10);
     arr[0] = 10;
     arr[1] = 7;
     arr[2] = 8;
     arr[3] = 9;
     arr[4] = 1;
     arr[5] = 5;
     arr[6] = 2;
     arr[7] = 3;
     arr[8] = 4;
     arr[9] = 6;

    quickSort(arr, 0, 9);

    for (0..10) |i| {
        std.debug.print("{any} ", .{arr[i]});
    }
}