# C, 84 bytes ```c c[' '],r,*p,*s,*e;f(){for(p=s;p<e;)c[*p++]++;while(s<e)if(c[*s++]-2)r=1;return r;} ``` [Try it online!](https://tio.run/##XVDRSsQwEHxOv2IoyKVNjmuvcKi54h/44JvUIkfYasBrS1IRLf32uvVUjoMks5nZ7M7Grl@snWdbrQCsau112us06JRMI5Ox6bzsy2D6PZnEVmmvVK2U@Xh1byTDnhLXSKYD0@tt4svceBrefQtvptm1A44H18oEYySW20BheLaHQKEq6mpXR0KUGMc809jyXrD4jYts0iyzqzFn5Xz9C4XGtcbN37mdJnPq4xjZOqRDiczAYY@CQakfKyIwfebF1Rp0SakdFxG953qNjK/CUxtr8J/gDvF9F@MW8SOFOFmyNikeKBCPS8fOfyLdMOlPvTlilkVpNXiw4L6oa2CXh1M0iUjM3w "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 75 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; }