# C, <s>84</s> 83 bytes
```c
c['   '],r,*p,*s,*e;f(){for(p=s;p<e;)c[*p++]++;while(s<e)r=c[*s++]-2?1:r;return r;}
```
[Try it online!](https://tio.run/##XVBhS8MwEP2c/opHQZY2GdtaGLqs7B/4wW9Si4xw1YBrS1IRLf3t9epUxiDJu7x3uXsXu3yxdppsuQCwqLTXaafToFMytUyGuvWyK4Lp9mQSW6adUpVS5uPVvZEMe0p8wWxgdpkdNjtvPPXvvoE34@SaHqeja2SCIRLzrafQP9tjoFDmVbmtIiEKDMNmrZHxnjH/jfP1qFlmU8OGlcv1L@Qatxp3f2c2jubcxzGyc0iHAmsDhz1yBqV@rIjA9IUXV2nQNaW2XER0nuvVMr4JT02swV@CA@L7NsYO8SOFOJmzVikeKBCPS6fWfyJdMenPvTlilkVpNXiw4L6orWHnh2M0ikhM3w "C (gcc) – Try It Online")


`f()` returns 1 if the list is *not* a list of Noah, and 0 otherwise.

The variable `s` should point to the beginning of the array, and `e` should point to the end. Note that after `f()` is called, `c` must be reset to 0s before it can be called again. Also, this might not work on all computers, because I'm pretty sure multi-byte characters are implementation-defined, and it won't work if `INT_MAX < 100000`.

If I/O is *very* flexible, and outputting to a variable is enough, the `return r;` is unnecessary, and it can be reduced to 74 bytes.

De-golfed:


```c
int counts[100001], return_value;

int f(int *start, int *end) {
        int *ptr;
        for (ptr = start; ptr < end; ptr++)
                counts[*ptr]++;
        for (ptr = start; ptr < end; ptr++) {
                if (counts[*ptr] != 2) {
                        return_value = 1;
                }
        }
        return return_value;
}
```
Thanks to @ceilingcat for -1 byte!