#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef double Type;
#define SCAN_FORMAT "%lf"
#define PRINT_FORMAT "%g"
typedef struct jagged_rows {
size_t n; //number of elements
Type *elements;
} JaggedArray_row;
typedef struct jagged_array {
size_t n; //number of rows
JaggedArray_row *rows;
} JaggedArray;
JaggedArray *load(FILE *file){
JaggedArray
*ja
= malloc(sizeof(*ja
)); if(ja == NULL){
}
ja->n = 0;
ja->rows = NULL;
int ch, has_value = 0;
size_t rows = 0, cols = 0;
while((ch
= getc(file
)) != EOF
){ if(ch == '\n' && has_value){
++rows;
has_value = cols = 0;
}
continue;
}
if(has_value){
ja
->rows
[rows
].
elements = realloc(ja
->rows
[rows
].
elements, ++ja
->rows
[rows
].
n * sizeof(Type
));//check omitted fscanf(file
, SCAN_FORMAT
, &ja
->rows
[rows
].
elements[cols
++]);//check omitted } else {
has_value = 1;
ja
->rows
= realloc(ja
->rows
, ++ja
->n
* sizeof(*ja
->rows
));//check omitted ja->rows[rows].n = 0;
ja
->rows
[rows
].
elements = malloc(++ja
->rows
[rows
].
n * sizeof(Type
));//check omitted fscanf(file
, SCAN_FORMAT
, &ja
->rows
[rows
].
elements[cols
++]);//check omitted }
}
return ja;
}
int main(void) {
JaggedArray *ja = load(stdin);
for(int r = 0; r < ja->n; ++r){
for(int c = 0; c < ja->rows[r].n; ++c){
if(c)
printf(PRINT_FORMAT
, ja
->rows
[r
].
elements[c
]); }
free(ja
->rows
[r
].
elements); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGN0eXBlLmg+Cgp0eXBlZGVmIGRvdWJsZSBUeXBlOwojZGVmaW5lIFNDQU5fRk9STUFUICIlbGYiCiNkZWZpbmUgUFJJTlRfRk9STUFUICIlZyIKCnR5cGVkZWYgc3RydWN0IGphZ2dlZF9yb3dzIHsKCXNpemVfdCBuOyAvL251bWJlciBvZiBlbGVtZW50cwoJVHlwZSAqZWxlbWVudHM7Cn0gSmFnZ2VkQXJyYXlfcm93OwoKdHlwZWRlZiBzdHJ1Y3QgamFnZ2VkX2FycmF5IHsKCXNpemVfdCBuOyAvL251bWJlciBvZiByb3dzCglKYWdnZWRBcnJheV9yb3cgKnJvd3M7Cn0gSmFnZ2VkQXJyYXk7CgpKYWdnZWRBcnJheSAqbG9hZChGSUxFICpmaWxlKXsKCUphZ2dlZEFycmF5ICpqYSA9IG1hbGxvYyhzaXplb2YoKmphKSk7CglpZihqYSA9PSBOVUxMKXsKCQlwZXJyb3IoIm1hbGxvYyIpOwoJCWV4aXQoRVhJVF9GQUlMVVJFKTsKCX0KCWphLT5uID0gMDsKCWphLT5yb3dzID0gTlVMTDsKCglpbnQgY2gsIGhhc192YWx1ZSA9IDA7CglzaXplX3Qgcm93cyA9IDAsIGNvbHMgPSAwOwoJd2hpbGUoKGNoID0gZ2V0YyhmaWxlKSkgIT0gRU9GKXsKCQlpZihpc3NwYWNlKGNoKSl7CgkJCWlmKGNoID09ICdcbicgJiYgaGFzX3ZhbHVlKXsKCQkJCSsrcm93czsKCQkJCWhhc192YWx1ZSA9IGNvbHMgPSAwOwoJCQl9CgkJCWNvbnRpbnVlOwoJCX0KCQl1bmdldGMoY2gsIGZpbGUpOwoJCWlmKGhhc192YWx1ZSl7CgkJCWphLT5yb3dzW3Jvd3NdLmVsZW1lbnRzID0gcmVhbGxvYyhqYS0+cm93c1tyb3dzXS5lbGVtZW50cywgKytqYS0+cm93c1tyb3dzXS5uICogc2l6ZW9mKFR5cGUpKTsvL2NoZWNrIG9taXR0ZWQKCQkJZnNjYW5mKGZpbGUsIFNDQU5fRk9STUFULCAmamEtPnJvd3Nbcm93c10uZWxlbWVudHNbY29scysrXSk7Ly9jaGVjayBvbWl0dGVkCgkJfSBlbHNlIHsKCQkJaGFzX3ZhbHVlID0gMTsKCQkJamEtPnJvd3MgPSByZWFsbG9jKGphLT5yb3dzLCArK2phLT5uICogc2l6ZW9mKCpqYS0+cm93cykpOy8vY2hlY2sgb21pdHRlZAoJCQlqYS0+cm93c1tyb3dzXS5uID0gMDsKCQkJamEtPnJvd3Nbcm93c10uZWxlbWVudHMgPSBtYWxsb2MoKytqYS0+cm93c1tyb3dzXS5uICogc2l6ZW9mKFR5cGUpKTsvL2NoZWNrIG9taXR0ZWQKCQkJZnNjYW5mKGZpbGUsIFNDQU5fRk9STUFULCAmamEtPnJvd3Nbcm93c10uZWxlbWVudHNbY29scysrXSk7Ly9jaGVjayBvbWl0dGVkCgkJfQoJfQoJcmV0dXJuIGphOwp9CgppbnQgbWFpbih2b2lkKSB7CglKYWdnZWRBcnJheSAqamEgPSBsb2FkKHN0ZGluKTsKCWZvcihpbnQgciA9IDA7IHIgPCBqYS0+bjsgKytyKXsKCQlmb3IoaW50IGMgPSAwOyBjIDwgamEtPnJvd3Nbcl0ubjsgKytjKXsKCQkJaWYoYykKCQkJCXB1dGNoYXIoJyAnKTsKCQkJcHJpbnRmKFBSSU5UX0ZPUk1BVCwgamEtPnJvd3Nbcl0uZWxlbWVudHNbY10pOwoJCX0KCQlwdXRzKCIiKTsKCQlmcmVlKGphLT5yb3dzW3JdLmVsZW1lbnRzKTsKCX0KCWZyZWUoamEtPnJvd3MpOwoJZnJlZShqYSk7CglyZXR1cm4gMDsKfQ==