#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <errno.h>
void printLinePair(const char *line)
{
size_t size = 0;
while (line[size] != ' ' && line[size] != '\0') {
size++;
}
if (size > 0) {
fwrite(line
, sizeof(char), size
, stdout
); }
line += size;
size = 0;
while (*line == ' ' && *line != '\0') {
line++;
}
while (line[size] != ' ' && line[size] != '\0') {
size++;
}
if (size > 0) {
fwrite(line
, sizeof(char), size
, stdout
); }
}
#define BUFFER_SIZE 6
int main()
{
static char buffer[BUFFER_SIZE] = { 0 };
static size_t bufIdx = 0;
static size_t readBytes = 0;
int ret = EXIT_SUCCESS;
char *lineBuffer = NULL;
char *lineBufPtr = lineBuffer;
size_t lineBufferSize = 0;
size_t lineBufferCapacity = BUFFER_SIZE + 1;
size_t newLineBufferCapacity = 0;
FILE *file = stdin; // fopen("1.txt", "r"); // <========= FILE HERE
if (!file) {
printf("Couldn't open file: %d\n", errno
); ret = EXIT_FAILURE;
goto fail_open_file;
}
lineBuffer
= malloc(lineBufferCapacity
); if (!lineBuffer) {
printf("Couldn't allocate the line buffer."); ret = EXIT_FAILURE;
goto fail_allocate_line_buffer;
}
while ((readBytes
= fread(buffer
, sizeof(char), BUFFER_SIZE
, file
))) { if (lineBufferCapacity - lineBufferSize < readBytes + 1) {
newLineBufferCapacity = lineBufferCapacity * 2;
lineBufPtr
= realloc(lineBuffer
, newLineBufferCapacity
); if (!lineBufPtr) {
printf("Couldn't realloc the line buffer (%zu to %zu bytes).\n", lineBufferCapacity, newLineBufferCapacity);
ret = EXIT_FAILURE;
goto fail_realloc_line_buf;
} else {
lineBuffer = lineBufPtr;
lineBufferCapacity = newLineBufferCapacity;
}
}
while (bufIdx < readBytes && buffer[bufIdx] != '\0') {
while (bufIdx < readBytes && buffer[bufIdx] != '\n' && buffer[bufIdx] != '\0') {
lineBuffer[lineBufferSize++] = buffer[bufIdx++];
}
if (bufIdx < readBytes && buffer[bufIdx] != '\0') {
lineBuffer[lineBufferSize++] = '\0';
printLinePair(lineBuffer);
lineBufferSize = 0;
lineBuffer[0] = '\0';
bufIdx++;
}
}
bufIdx = 0;
}
if (lineBufferSize > 0) {
lineBuffer[lineBufferSize++] = '\0';
printLinePair(lineBuffer);
}
fail_realloc_line_buf:
fail_allocate_line_buffer:
fail_open_file:
return ret;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8aW50dHlwZXMuaD4KI2luY2x1ZGUgPGVycm5vLmg+Cgp2b2lkIHByaW50TGluZVBhaXIoY29uc3QgY2hhciAqbGluZSkKewogICAgc2l6ZV90IHNpemUgPSAwOwogICAgd2hpbGUgKGxpbmVbc2l6ZV0gIT0gJyAnICYmIGxpbmVbc2l6ZV0gIT0gJ1wwJykgewogICAgICAgIHNpemUrKzsKICAgIH0KCiAgICBpZiAoc2l6ZSA+IDApIHsKICAgICAgICBmd3JpdGUobGluZSwgc2l6ZW9mKGNoYXIpLCBzaXplLCBzdGRvdXQpOwogICAgfQoKICAgIHByaW50ZigiIDogIik7CgogICAgbGluZSArPSBzaXplOwogICAgc2l6ZSA9IDA7CgogICAgd2hpbGUgKCpsaW5lID09ICcgJyAmJiAqbGluZSAhPSAnXDAnKSB7CiAgICAgICAgbGluZSsrOwogICAgfQoKICAgIHdoaWxlIChsaW5lW3NpemVdICE9ICcgJyAmJiBsaW5lW3NpemVdICE9ICdcMCcpIHsKICAgICAgICBzaXplKys7CiAgICB9CgogICAgaWYgKHNpemUgPiAwKSB7CiAgICAgICAgZndyaXRlKGxpbmUsIHNpemVvZihjaGFyKSwgc2l6ZSwgc3Rkb3V0KTsKICAgIH0KCiAgICBwcmludGYoIlxuIik7Cn0KCiNkZWZpbmUgQlVGRkVSX1NJWkUgNgppbnQgbWFpbigpCnsKICAgIHN0YXRpYyBjaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV0gPSB7IDAgfTsKICAgIHN0YXRpYyBzaXplX3QgYnVmSWR4ID0gMDsKICAgIHN0YXRpYyBzaXplX3QgcmVhZEJ5dGVzID0gMDsKICAgIGludCByZXQgPSBFWElUX1NVQ0NFU1M7CiAgICBjaGFyICpsaW5lQnVmZmVyID0gTlVMTDsKICAgIGNoYXIgKmxpbmVCdWZQdHIgPSBsaW5lQnVmZmVyOwogICAgc2l6ZV90IGxpbmVCdWZmZXJTaXplID0gMDsKICAgIHNpemVfdCBsaW5lQnVmZmVyQ2FwYWNpdHkgPSBCVUZGRVJfU0laRSArIDE7CiAgICBzaXplX3QgbmV3TGluZUJ1ZmZlckNhcGFjaXR5ID0gMDsKICAgIEZJTEUgKmZpbGUgPSBzdGRpbjsgLy8gZm9wZW4oIjEudHh0IiwgInIiKTsgIC8vIDw9PT09PT09PT0gRklMRSBIRVJFCgogICAgaWYgKCFmaWxlKSB7CiAgICAgICAgcHJpbnRmKCJDb3VsZG4ndCBvcGVuIGZpbGU6ICVkXG4iLCBlcnJubyk7CiAgICAgICAgcmV0ID0gRVhJVF9GQUlMVVJFOwogICAgICAgIGdvdG8gZmFpbF9vcGVuX2ZpbGU7CiAgICB9CgogICAgbGluZUJ1ZmZlciA9IG1hbGxvYyhsaW5lQnVmZmVyQ2FwYWNpdHkpOwogICAgaWYgKCFsaW5lQnVmZmVyKSB7CiAgICAgICAgcHJpbnRmKCJDb3VsZG4ndCBhbGxvY2F0ZSB0aGUgbGluZSBidWZmZXIuIik7CiAgICAgICAgcmV0ID0gRVhJVF9GQUlMVVJFOwogICAgICAgIGdvdG8gZmFpbF9hbGxvY2F0ZV9saW5lX2J1ZmZlcjsKICAgIH0KCiAgICB3aGlsZSAoKHJlYWRCeXRlcyA9IGZyZWFkKGJ1ZmZlciwgc2l6ZW9mKGNoYXIpLCBCVUZGRVJfU0laRSwgZmlsZSkpKSB7CiAgICAgICAgaWYgKGxpbmVCdWZmZXJDYXBhY2l0eSAtIGxpbmVCdWZmZXJTaXplIDwgcmVhZEJ5dGVzICsgMSkgewogICAgICAgICAgICBuZXdMaW5lQnVmZmVyQ2FwYWNpdHkgPSBsaW5lQnVmZmVyQ2FwYWNpdHkgKiAyOwogICAgICAgICAgICBsaW5lQnVmUHRyID0gcmVhbGxvYyhsaW5lQnVmZmVyLCBuZXdMaW5lQnVmZmVyQ2FwYWNpdHkpOwogICAgICAgICAgICBpZiAoIWxpbmVCdWZQdHIpIHsKICAgICAgICAgICAgICAgIHByaW50ZigiQ291bGRuJ3QgcmVhbGxvYyB0aGUgbGluZSBidWZmZXIgKCV6dSB0byAlenUgYnl0ZXMpLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICBsaW5lQnVmZmVyQ2FwYWNpdHksIG5ld0xpbmVCdWZmZXJDYXBhY2l0eSk7CiAgICAgICAgICAgICAgICByZXQgPSBFWElUX0ZBSUxVUkU7CiAgICAgICAgICAgICAgICBnb3RvIGZhaWxfcmVhbGxvY19saW5lX2J1ZjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxpbmVCdWZmZXIgPSBsaW5lQnVmUHRyOwogICAgICAgICAgICAgICAgbGluZUJ1ZmZlckNhcGFjaXR5ID0gbmV3TGluZUJ1ZmZlckNhcGFjaXR5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoYnVmSWR4IDwgcmVhZEJ5dGVzICYmIGJ1ZmZlcltidWZJZHhdICE9ICdcMCcpIHsKICAgICAgICAgICAgd2hpbGUgKGJ1ZklkeCA8IHJlYWRCeXRlcyAmJiBidWZmZXJbYnVmSWR4XSAhPSAnXG4nICYmIGJ1ZmZlcltidWZJZHhdICE9ICdcMCcpIHsKICAgICAgICAgICAgICAgIGxpbmVCdWZmZXJbbGluZUJ1ZmZlclNpemUrK10gPSBidWZmZXJbYnVmSWR4KytdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYnVmSWR4IDwgcmVhZEJ5dGVzICYmIGJ1ZmZlcltidWZJZHhdICE9ICdcMCcpIHsKICAgICAgICAgICAgICAgIGxpbmVCdWZmZXJbbGluZUJ1ZmZlclNpemUrK10gPSAnXDAnOwogICAgICAgICAgICAgICAgcHJpbnRMaW5lUGFpcihsaW5lQnVmZmVyKTsKICAgICAgICAgICAgICAgIGxpbmVCdWZmZXJTaXplID0gMDsKICAgICAgICAgICAgICAgIGxpbmVCdWZmZXJbMF0gPSAnXDAnOwogICAgICAgICAgICAgICAgYnVmSWR4Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGJ1ZklkeCA9IDA7CiAgICB9CgogICAgaWYgKGxpbmVCdWZmZXJTaXplID4gMCkgewogICAgICAgIGxpbmVCdWZmZXJbbGluZUJ1ZmZlclNpemUrK10gPSAnXDAnOwogICAgICAgIHByaW50TGluZVBhaXIobGluZUJ1ZmZlcik7CiAgICB9CgpmYWlsX3JlYWxsb2NfbGluZV9idWY6CiAgICBmcmVlKGxpbmVCdWZmZXIpOwpmYWlsX2FsbG9jYXRlX2xpbmVfYnVmZmVyOgogICAgZmNsb3NlKGZpbGUpOwpmYWlsX29wZW5fZmlsZToKICAgIHJldHVybiByZXQ7Cn0K