#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int char_cmp(const void *pa, const void *pb)
{
const char *a = pa;
const char *b = pb;
return *a - *b;
}
bool partial_anagram(const char *aa, const char *bb)
{
char A[64];
char B[64];
const char *a
= strcpy(A
, aa
); const char *b
= strcpy(B
, bb
);
while (*b) {
while (*a && *a < *b) a++;
if (*a != *b) return false;
a++;
b++;
}
return true;
}
static const char *bool_str(bool x)
{
return x ? "true" : "false";
}
int test(const char *a, const char *b, bool expected)
{
bool have = partial_anagram(a, b);
printf("\"%s\" matches \"%s\": %s", a
, b
, bool_str
(have
));
if (have != expected) {
printf(", expected %s", bool_str
(expected
)); }
return (have != expected);
}
int main(void)
{
int misses = test("try", "try", true)
+ test("try", "rty", true)
+ test("try", "tray", false)
+ test("try", "", true)
+ test("try", "y", true)
+ test("try", "t", true)
+ test("try", "z", false)
+ test("try", "rytt", false)
+ test("try", "yt", true)
+ test("try", "yurt", false)
+ test("tree", "eert", true)
+ test("tree", "eeert", false);
printf("\n%d misses.\n", misses
);
return 0;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGJvb2wuaD4KCmludCBjaGFyX2NtcChjb25zdCB2b2lkICpwYSwgY29uc3Qgdm9pZCAqcGIpCnsKICAgIGNvbnN0IGNoYXIgKmEgPSBwYTsKICAgIGNvbnN0IGNoYXIgKmIgPSBwYjsKICAgIAogICAgcmV0dXJuICphIC0gKmI7Cn0KCmJvb2wgcGFydGlhbF9hbmFncmFtKGNvbnN0IGNoYXIgKmFhLCBjb25zdCBjaGFyICpiYikKewogICAgY2hhciBBWzY0XTsKICAgIGNoYXIgQls2NF07CiAgICAKICAgIGNvbnN0IGNoYXIgKmEgPSBzdHJjcHkoQSwgYWEpOwogICAgY29uc3QgY2hhciAqYiA9IHN0cmNweShCLCBiYik7CiAgICAKICAgIHFzb3J0KEEsIHN0cmxlbihBKSwgMSwgY2hhcl9jbXApOwogICAgcXNvcnQoQiwgc3RybGVuKEIpLCAxLCBjaGFyX2NtcCk7CiAgICAKICAgIHdoaWxlICgqYikgewogICAgICAgIHdoaWxlICgqYSAmJiAqYSA8ICpiKSBhKys7CiAgICAgICAgCiAgICAgICAgaWYgKCphICE9ICpiKSByZXR1cm4gZmFsc2U7CiAgICAgICAgYSsrOwogICAgICAgIGIrKzsKICAgIH0KICAgIAogICAgcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyBjb25zdCBjaGFyICpib29sX3N0cihib29sIHgpCnsKICAgIHJldHVybiB4ID8gInRydWUiIDogImZhbHNlIjsKfQoKaW50IHRlc3QoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgYm9vbCBleHBlY3RlZCkKewogICAgYm9vbCBoYXZlID0gcGFydGlhbF9hbmFncmFtKGEsIGIpOwogICAgCiAgICBwcmludGYoIlwiJXNcIiBtYXRjaGVzIFwiJXNcIjogJXMiLCBhLCBiLCBib29sX3N0cihoYXZlKSk7CiAgICAKICAgIGlmIChoYXZlICE9IGV4cGVjdGVkKSB7CiAgICAgICAgcHJpbnRmKCIsIGV4cGVjdGVkICVzIiwgYm9vbF9zdHIoZXhwZWN0ZWQpKTsKICAgIH0KICAgIAogICAgcHV0cygiLiIpOwoKICAgIHJldHVybiAoaGF2ZSAhPSBleHBlY3RlZCk7Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIGludCBtaXNzZXMgPSB0ZXN0KCJ0cnkiLCAidHJ5IiwgdHJ1ZSkKICAgICAgICAgICAgICAgKyB0ZXN0KCJ0cnkiLCAicnR5IiwgdHJ1ZSkKICAgICAgICAgICAgICAgKyB0ZXN0KCJ0cnkiLCAidHJheSIsIGZhbHNlKQogICAgICAgICAgICAgICArIHRlc3QoInRyeSIsICIiLCB0cnVlKQogICAgICAgICAgICAgICArIHRlc3QoInRyeSIsICJ5IiwgdHJ1ZSkKICAgICAgICAgICAgICAgKyB0ZXN0KCJ0cnkiLCAidCIsIHRydWUpCiAgICAgICAgICAgICAgICsgdGVzdCgidHJ5IiwgInoiLCBmYWxzZSkKICAgICAgICAgICAgICAgKyB0ZXN0KCJ0cnkiLCAicnl0dCIsIGZhbHNlKQogICAgICAgICAgICAgICArIHRlc3QoInRyeSIsICJ5dCIsIHRydWUpCiAgICAgICAgICAgICAgICsgdGVzdCgidHJ5IiwgInl1cnQiLCBmYWxzZSkKICAgICAgICAgICAgICAgKyB0ZXN0KCJ0cmVlIiwgImVlcnQiLCB0cnVlKQogICAgICAgICAgICAgICArIHRlc3QoInRyZWUiLCAiZWVlcnQiLCBmYWxzZSk7CiAgICAgICAgICAgICAgIAogICAgcHJpbnRmKCJcbiVkIG1pc3Nlcy5cbiIsIG1pc3Nlcyk7CiAgICAKICAgIHJldHVybiAwOwp9Cg==