chatgpt-复杂的编码挑战:6 kyu
#javascript #c #haskell #chatgpt

您好,欢迎回到这个系列,我们将Chatgpt通过其节奏!

这次我们的方向有略有变化,因为我们已经用Haskell换了SQL。

所以在我们开始之前,这是挑战Array.diff

指令和描述如下:

Your goal in this kata is to implement a difference function, which subtracts one list from another and returns the result.

It should remove all values from list a, which are present in list b keeping their order.

arrayDiff([1,2],[1]) == [2]

If a value is present in b, all of its occurrences must be removed from the other:

arrayDiff([1,2,2,2,3],[2]) == [1,3]

让我们开始。

在JavaScript中解决它

function arrayDiff(a, b) {
  return a.filter((value) => !b.includes(value));
}

一个非常简洁明了的解决方案,可以通过所有测试。

在C
中解决它

#include <stdlib.h>

int* array_diff(const int* arr1, size_t n1, const int* arr2, size_t n2, size_t* z) {
    int* result = malloc(n1 * sizeof(int));
    size_t count = 0;
    for (size_t i = 0; i < n1; i++) {
        int found = 0;
        for (size_t j = 0; j < n2; j++) {
            if (arr1[i] == arr2[j]) {
                found = 1;
                break;
            }
        }
        if (!found) {
            result[count++] = arr1[i];
        }
    }
    *z = count;
    return realloc(result, count * sizeof(int));
}

相比,C的解决方案非常详细,但是它也通过了所有测试。

在Haskell中解决它

module Difference where

difference :: Eq a => [a] -> [a] -> [a]
difference a b = filter (`notElem` b) a

另一个更简洁的解决方案和更多通过的测试!

即使难度有所提高,这次感觉就像这次更容易。

我想知道这是否是由于我的质疑变得更好,更精致,还是在这里发挥作用。