#include #include #include #include #define LOOP_COUNT 1000000 #define EXPECTED_CHECKSUM 15000001 static int32_t configured_loop_count(void) { int32_t value = LOOP_COUNT; if (scanf("%d", &value) != 1 || value <= 0) { return LOOP_COUNT; } return value; } static const char *configured_target(int argc, char **argv) { return argc > 1 ? argv[1] : "slo\"vo\\path"; } static char json_hex_digit(unsigned char value) { return value < 10 ? (char)('0' + value) : (char)('A' + (value - 10)); } static char *quote_json_string(const char *text) { size_t len = 2; for (const unsigned char *cursor = (const unsigned char *)text; *cursor != '\0'; cursor++) { switch (*cursor) { case '"': case '\\': case '\n': case '\t': case '\r': case '\b': case '\f': len += 2; break; default: len += *cursor < 0x20 ? 6 : 1; break; } } char *out = malloc(len + 1); if (out == NULL) { exit(2); } char *write = out; *write++ = '"'; for (const unsigned char *cursor = (const unsigned char *)text; *cursor != '\0'; cursor++) { switch (*cursor) { case '"': *write++ = '\\'; *write++ = '"'; break; case '\\': *write++ = '\\'; *write++ = '\\'; break; case '\n': *write++ = '\\'; *write++ = 'n'; break; case '\t': *write++ = '\\'; *write++ = 't'; break; case '\r': *write++ = '\\'; *write++ = 'r'; break; case '\b': *write++ = '\\'; *write++ = 'b'; break; case '\f': *write++ = '\\'; *write++ = 'f'; break; default: if (*cursor < 0x20) { *write++ = '\\'; *write++ = 'u'; *write++ = '0'; *write++ = '0'; *write++ = json_hex_digit((unsigned char)(*cursor >> 4)); *write++ = json_hex_digit((unsigned char)(*cursor & 0x0F)); } else { *write++ = (char)*cursor; } break; } } *write++ = '"'; *write = '\0'; return out; } static int32_t json_quote_loop(int32_t limit, const char *target) { int32_t i = 0; int32_t acc = 1; while (i < limit) { char *quoted = quote_json_string(target); acc += (int32_t)strlen(quoted); free(quoted); i += 1; } return acc; } int main(int argc, char **argv) { int32_t result = json_quote_loop(configured_loop_count(), configured_target(argc, argv)); printf("%d\n", result); return result == EXPECTED_CHECKSUM ? 0 : 1; }