Meu colega de trabalho, Jimmy , é meio novo no C / C ++. Ele também é um tipo de aluno lento. Agora, para ser justo, seu código sempre compila, mas ele tem alguns hábitos realmente desleixados. Por exemplo, todo mundo sabe que você pode definir uma matriz como esta:
int spam[] = {4, 8, 15, 16, 23, 42};
Todo mundo que é, exceto Jimmy. Ele está convencido de que a única maneira de criar uma matriz é assim:
int spam[6];
spam[0] = 4;
spam[1] = 8;
spam[2] = 15;
spam[3] = 16;
spam[4] = 23;
spam[5] = 42;
Eu continuo consertando isso para ele na revisão de código, mas ele não aprende. Então, preciso que você escreva uma ferramenta que faça isso automaticamente por ele quando ele cometer¹.
O desafio
Quero que você escreva um programa completo ou uma função que aceite uma seqüência de linhas múltiplas como entrada e produza a versão mais compacta da matriz C. A entrada sempre seguirá este formato, incluindo o espaço em branco:
identifier_one identifier_two[some_length];
identifier_two[0] = some_number;
identifier_two[1] = some_number;
identifier_two[2] = some_number;
...
identifier_two[some_length - 1] = some_number;
Em suma, a entrada será sempre válida e bem definida C. Mais detalhadamente:
Todos os identificadores serão compostos apenas de letras e sublinhados. O comprimento sempre será pelo menos um e nunca haverá índices ausentes ou fora dos limites. Você também pode assumir que os índices estão em ordem. Por exemplo:
foo bar[3];
bar[0] = 1
bar[2] = 9;
foo bar[1];
bar[0] = 1;
bar[1] = 3;
e
foo bar[3];
bar[2] = 9;
bar[0] = 1
bar[1] = 3
são todas entradas inválidas e podem causar um comportamento indefinido no seu envio. Você também pode assumir que todos os números serão números decimais válidos, negativos ou positivos. A entrada não terá espaços estranhos. A saída deve sempre seguir este formato, incluindo o espaço em branco:
identifier_one identifier_two[] = {n1, n2, n3, ...};
Aqui estão alguns dados de amostra:
Input:
spam eggs[10];
eggs[0] = 0;
eggs[1] = 4;
eggs[2] = 8;
eggs[3] = -3;
eggs[4] = 3;
eggs[5] = 7;
eggs[6] = 888;
eggs[7] = 555;
eggs[8] = 0;
eggs[9] = -2;
Output:
spam eggs[] = {0, 4, 8, -3, 3, 7, 888, 555, 0, -2};
Input:
char ans[2];
ans[0] = 52;
ans[1] = 50;
Output:
char ans[] = {52, 50};
Input:
blah_blah quux[1];
quux[0] = 105;
Output:
blah_blah quux[] = {105};
Você pode levar sua entrada e saída em qualquer formato razoável, como STDIN / STDOUT, argumentos de função e valor de retorno, leitura e gravação de arquivos etc. Lacunas padrão se aplicam. A resposta mais curta em bytes vence!
Isso é agressivo-passivo e uma péssima idéia. Você não recebeu essa ideia de mim.