Mon collègue, Jimmy est un peu nouveau pour C / C ++. Il est également un peu lent à apprendre. Maintenant, pour être juste, son code compile toujours, mais il a des habitudes très bâclées. Par exemple, tout le monde sait que vous pouvez définir un tableau comme celui-ci:
int spam[] = {4, 8, 15, 16, 23, 42};
Tout le monde, sauf Jimmy. Il est convaincu que la seule façon de créer un tableau est la suivante:
int spam[6];
spam[0] = 4;
spam[1] = 8;
spam[2] = 15;
spam[3] = 16;
spam[4] = 23;
spam[5] = 42;
Je continue de résoudre ce problème pour lui dans la révision de code, mais il n'apprendra pas. J'ai donc besoin que vous écriviez un outil qui le fasse automatiquement pour lui lorsqu'il s'engage¹.
Le défi
Je veux que vous écriviez un programme complet ou une fonction qui accepte une chaîne multiligne en entrée et génère la version plus compacte du tableau C. L'entrée suivra toujours ce format, espaces inclus:
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;
En bref, l'entrée sera toujours valide et bien définie C. Plus en détail:
Tous les identifiants seront constitués uniquement de lettres et de traits de soulignement. La longueur sera toujours d'au moins un, et il n'y aura jamais d'index manquant ou hors limites. Vous pouvez également supposer que les index sont en ordre. Par exemple:
foo bar[3];
bar[0] = 1
bar[2] = 9;
foo bar[1];
bar[0] = 1;
bar[1] = 3;
et
foo bar[3];
bar[2] = 9;
bar[0] = 1
bar[1] = 3
sont toutes des entrées non valides et peuvent provoquer un comportement indéfini dans votre soumission. Vous pouvez également supposer que tous les nombres seront des nombres décimaux valides, négatifs ou positifs. L'entrée n'aura pas d'espaces superflus. La sortie doit toujours suivre ce format, les espaces inclus:
identifier_one identifier_two[] = {n1, n2, n3, ...};
Voici quelques exemples de données:
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};
Vous pouvez prendre vos entrées et sorties dans n'importe quel format raisonnable, tel que STDIN / STDOUT, les arguments de fonction et la valeur de retour, la lecture et l'écriture de fichiers, etc. Des échappatoires standard s'appliquent. La réponse la plus courte en octets gagne!
¹Ceci est passif-agressif et une idée terrible. Vous ne m'avez pas donné cette idée.