#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
void report(char* eaf, char* initials, char* foo)
{
printf("eaf = %p, initials = %p, foo = %p\n", eaf
, initials
, foo
);; printf("*eaf = %d, *initials = %d, *foo = %d\n", eaf
[0], initials
[0], foo
[0]); }
void load(const char* label, const char* into, size_t intoSize)
{
assert(intoSize
> 1); // can't store a string in 1 character.
char input[1024] = "";
fgets(input
, sizeof(input
), stdin
);
// strip trailing \n off.
if (len > 0 && input[len - 1] == '\n') {
input[--len] = 0;
}
// abort on empty input
if (len <= 0) {
fprintf(stderr
, "Invalid input - terminated.\n"); }
if (len >= intoSize) {
fprintf(stderr
, "Invalid input - length was %u, limit is %u\n", len
, intoSize
- 1); }
}
int main(int argc, const char* argv[])
{
char eaf[10], initials[1], foo[10];
report(eaf, initials, foo);
load("Insert states of the optimized AFD", eaf, sizeof(eaf));
report(eaf, initials, foo);
load("Insert initial AFD state", initials, sizeof(initials));
report(eaf, initials, foo);
printf("eaf = %s\ninitials = %s\n", eaf
, initials
);
return 0;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPGFzc2VydC5oPgogICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgogICAgIAogICAgdm9pZCByZXBvcnQoY2hhciogZWFmLCBjaGFyKiBpbml0aWFscywgY2hhciogZm9vKQogICAgewogICAgICAgIHByaW50ZigiZWFmID0gJXAsIGluaXRpYWxzID0gJXAsIGZvbyA9ICVwXG4iLCBlYWYsIGluaXRpYWxzLCBmb28pOzsKICAgICAgICBwcmludGYoIiplYWYgPSAlZCwgKmluaXRpYWxzID0gJWQsICpmb28gPSAlZFxuIiwgZWFmWzBdLCBpbml0aWFsc1swXSwgZm9vWzBdKTsKICAgIH0KICAgICAKICAgIHZvaWQgbG9hZChjb25zdCBjaGFyKiBsYWJlbCwgY29uc3QgY2hhciogaW50bywgc2l6ZV90IGludG9TaXplKQogICAgewogICAgICAgIGFzc2VydChpbnRvU2l6ZSA+IDEpOyAvLyBjYW4ndCBzdG9yZSBhIHN0cmluZyBpbiAxIGNoYXJhY3Rlci4KICAgICAgICBwcmludGYoIiVzXG4iLCBsYWJlbCk7CgogICAgICAgIGNoYXIgaW5wdXRbMTAyNF0gPSAiIjsKICAgICAgICBmZ2V0cyhpbnB1dCwgc2l6ZW9mKGlucHV0KSwgc3RkaW4pOwoKICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKGlucHV0KTsKICAgICAgICAvLyBzdHJpcCB0cmFpbGluZyBcbiBvZmYuCiAgICAgICAgaWYgKGxlbiA+IDAgJiYgaW5wdXRbbGVuIC0gMV0gPT0gJ1xuJykgewogICAgICAgICAgICBpbnB1dFstLWxlbl0gPSAwOwogICAgICAgIH0KCiAgICAgICAgLy8gYWJvcnQgb24gZW1wdHkgaW5wdXQKICAgICAgICBpZiAobGVuIDw9IDApIHsKICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGlucHV0IC0gdGVybWluYXRlZC5cbiIpOwogICAgICAgICAgICBleGl0KDEpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAobGVuID49IGludG9TaXplKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBpbnB1dCAtIGxlbmd0aCB3YXMgJXUsIGxpbWl0IGlzICV1XG4iLCBsZW4sIGludG9TaXplIC0gMSk7CiAgICAgICAgICAgIGV4aXQoMik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0cm5jcHkoaW50bywgaW5wdXQsIGludG9TaXplKTsKICAgIH0KICAgICAKICAgIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICB7CiAgICAgICAgY2hhciBlYWZbMTBdLCBpbml0aWFsc1sxXSwgZm9vWzEwXTsKICAgICAgICByZXBvcnQoZWFmLCBpbml0aWFscywgZm9vKTsKCiAgICAgICAgbG9hZCgiSW5zZXJ0IHN0YXRlcyBvZiB0aGUgb3B0aW1pemVkIEFGRCIsIGVhZiwgc2l6ZW9mKGVhZikpOwogICAgICAgIHJlcG9ydChlYWYsIGluaXRpYWxzLCBmb28pOwogICAgIAogICAgICAgIGxvYWQoIkluc2VydCBpbml0aWFsIEFGRCBzdGF0ZSIsIGluaXRpYWxzLCBzaXplb2YoaW5pdGlhbHMpKTsKICAgICAgICByZXBvcnQoZWFmLCBpbml0aWFscywgZm9vKTsKCiAgICAgICAgcHJpbnRmKCJlYWYgPSAlc1xuaW5pdGlhbHMgPSAlc1xuIiwgZWFmLCBpbml0aWFscyk7CiAgICAKICAgICAgICByZXR1cm4gMDsKICAgIH0=