同僚のジミーは、C / C ++の初心者です。彼は一種の遅い学習者でもあります。公平を期すために、彼のコードは常にコンパイルされますが、彼は本当にずさんな習慣を持っています。たとえば、次のように配列を定義できることは誰もが知っています。
int spam[] = {4, 8, 15, 16, 23, 42};
それは、ジミーを除く全員です。彼は、配列を作成する唯一の方法は次のようであると確信しています。
int spam[6];
spam[0] = 4;
spam[1] = 8;
spam[2] = 15;
spam[3] = 16;
spam[4] = 23;
spam[5] = 42;
私はコードレビューで彼のためにこれを修正し続けていますが、彼は学びません。そのため、彼がコミットしたときに自動的にこれを行うツールを作成する必要があります¹。
チャレンジ
完全なプログラムか、入力として複数行の文字列を取り込んで、よりコンパクトなバージョンのC配列を出力する関数のいずれかを作成してほしい。入力は常に空白を含むこの形式に従います。
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;
要するに、入力は常に有効で、明確に定義されたCです。詳細は次のとおりです。
すべての識別子は、文字とアンダースコアのみで構成されます。長さは常に少なくとも1つであり、欠落または境界外のインデックスはありません。また、インデックスが正しいと仮定することもできます。例えば:
foo bar[3];
bar[0] = 1
bar[2] = 9;
foo bar[1];
bar[0] = 1;
bar[1] = 3;
そして
foo bar[3];
bar[2] = 9;
bar[0] = 1
bar[1] = 3
入力はすべて無効であり、送信時に未定義の動作を引き起こす可能性があります。また、すべての数値が有効な10進数、負または正であると想定することもできます。入力に余分なスペースはありません。出力は常に空白を含むこの形式に従う必要があります。
identifier_one identifier_two[] = {n1, n2, n3, ...};
サンプルデータを次に示します。
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};
STDIN / STDOUT、関数の引数と戻り値、ファイルの読み取りと書き込みなど、合理的な形式で入出力を行うことができます。標準の抜け穴が適用されます。バイト単位の最短回答が勝ちです!
¹これは受動的で攻撃的で恐ろしいアイデアです。あなたはなかったではない私からこのアイデアを得ます。