您好,欢迎回到这个系列,我们将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
另一个更简洁的解决方案和更多通过的测试!
即使难度有所提高,这次感觉就像这次更容易。
我想知道这是否是由于我的质疑变得更好,更精致,还是在这里发挥作用。