একটি সি অ্যারে প্রসারিত করুন


36

সি প্রোগ্রামিং ভাষায় অ্যারেগুলি এভাবে সংজ্ঞায়িত করা হয়:

int foo[] = {4, 8, 15, 16, 23, 42};      //Foo implicitly has a size of 6

অ্যারের আকারটি প্রাথমিককরণ উপাদানগুলি থেকে অনুমান করা হয়, যা এই ক্ষেত্রে is You আপনি এইভাবে একটি সি অ্যারেও লিখতে পারেন, স্পষ্টভাবে এটি আকার মাপুন এবং প্রতিটি উপাদানকে ক্রম অনুসারে সংজ্ঞায়িত করুন:

int foo[6];        //Give the array an explicit size of 6
foo[0] = 4;
foo[1] = 8;
foo[2] = 15;
foo[3] = 16;
foo[4] = 23;
foo[5] = 42;

চ্যালেঞ্জ

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখবেন যা অ্যারেগুলি প্রথম উপায়ে দ্বিতীয় দিকে প্রসারিত করবে। যেহেতু আপনি কোডটি দীর্ঘতর করার জন্য একটি প্রোগ্রাম লিখছেন এবং আপনি বিড়ম্বনা পছন্দ করেন, আপনার কোডটি যথাসম্ভব সংক্ষিপ্ত করে তুলতে হবে।

ইনপুটটি মূল অ্যারের প্রতিনিধিত্বকারী একটি স্ট্রিং হবে এবং আউটপুটটি প্রসারিত অ্যারে-সংজ্ঞা হবে। আপনি নিরাপদে ধরে নিতে পারেন যে ইনপুটটি সর্বদা এর মতো দেখাবে:

<type> <array_name>[] = {<int>, <int>, <int> ... };

"টাইপ" এবং "অ্যারে_নাম" পুরোপুরি বর্ণমালা অক্ষর এবং আন্ডারস্কোর দিয়ে তৈরি হবে _। তালিকার উপাদানগুলি সর্বদা -2,147,483,648 থেকে 2,147,483,647 এর মধ্যে একটি নম্বর থাকবে। অন্য কোনও ফর্ম্যাটের ইনপুটগুলি হ্যান্ডেল করার দরকার নেই।

আপনার আউটপুটে শ্বেত স্পেসটি অবশ্যই পরীক্ষার আউটপুটে হোয়াইটস্পেসের সাথে অবশ্যই মিলবে, যদিও একটি অনুমানযোগ্য নতুন লাইনের অনুমতি রয়েছে allowed

পরীক্ষার আইও:

#in
short array[] = {4, 3, 2, 1};

#out
short array[4];
array[0] = 4;
array[1] = 3;
array[2] = 2;
array[3] = 1;


#in
spam EGGS[] = {42};

#out
spam EGGS[1];
EGGS[0] = 42;


#in
terrible_long_type_name awful_array_name[] = {7, -8, 1337, 0, 13};

#out
terrible_long_type_name awful_array_name[5];
awful_array_name[0] = 7;
awful_array_name[1] = -8;
awful_array_name[2] = 1337;
awful_array_name[3] = 0;
awful_array_name[4] = 13;

যে কোনও ভাষায় জমা দেওয়ার ক্ষেত্রে উত্সাহ দেওয়া হয়, তবে আপনি যদি এটি করতে পারেন তবে বোনাস পয়েন্ট এর মধ্যে সি

লিডারবোর্ড:

এখানে শীর্ষস্থানীয় উত্তরগুলি দেখানো একটি লিডারবোর্ড রয়েছে:


2
অ্যারে সূচক, সমান চিহ্ন, এবং আউটপুটে প্রয়োজনীয় মানগুলির মধ্যে ফাঁকা স্থান রয়েছে? উদাহরণস্বরূপ, foo[0]=1;গ্রহণযোগ্য হবে?
মেগো

@ মেগো এটি গ্রহণযোগ্য হবে না। সাদা স্থান প্রয়োজন ace আমি এটি সম্পাদনা করব
DJMcMayhem

ট্রেলিং নিউলাইন অনুমোদিত?
লুইস মেন্ডো

ফাংশন অনুমোদিত?
মেগো

আউটপুট মুদ্রণের পরিবর্তে ফিরে আসা কি ঠিক আছে? (ফাংশনগুলির ক্ষেত্রে)
ভোল্টাহ

উত্তর:


12

পাইথ, 44 বাইট

++Khcz\]lJ:z"-?\d+"1"];"VJs[ecKd~hZ"] = "N\;

পরীক্ষা স্যুট

নিয়মিত প্রকাশ এবং স্ট্রিং কাটা ping বিশেষত চালাক নয়।

ব্যাখ্যা:

++Khcz\]lJ:z"-?\d+"1"];"VJs[ecKd~hZ"] = "N\;
                                                Implicit: z = input()
    cz\]                                        Chop z on ']'
   h                                            Take string before the ']'
  K                                             Store it in K
 +                                              Add to that
         :z"-?\d+"1                             Find all numbers in the input
        J                                       Store them in J
       l                                        Take its length.
+                  "];"                         Add on "];" and print.
                       VJ                       For N in J:
                         s[                     Print the following, concatenated:
                            cKd                 Chop K on spaces.
                           e                    Take the last piece (array name)
                               ~hZ              The current interation number
                                  "] = "        That string
                                        N       The number from the input
                                         \;     And the trailing semicolon.

এই উত্তরটি আমার পক্ষে কাঁটা। আমি ভেবেছিলাম আমি এটি ভিমে জিততে সক্ষম হব, তবে আমার জীবনের জন্য, আমি শেষ ২-৩ বাইট ছাড়তে পারি না। = ডি সুন্দর উত্তর!
ডিজেএমসিএমহেম

28

ভিম, 54, 52, 49 47 কীস্ট্রোক


2wa0<esc>qqYp<c-a>6ldf @qq@q$dT]dd:%norm dwf{xwC;<CR>gg"0P

ব্যাখ্যা:

2wa0<esc>                     'Move 2 words forward, and insert a 0.
         qq                   'Start recording in register Q
           Yp                 'Duplicate the line
             <c-a>6l          'Increment the next number then move 6 spaces right
                    df        'Delete until the next space
                       @qq@q  'Recursively call this macro

এখন আমাদের বাফারটি এর মতো দেখাচ্ছে:

int foo[0] = {4, 8, 15, 16, 23, 42};
int foo[1] = {8, 15, 16, 23, 42};
int foo[2] = {15, 16, 23, 42};
int foo[3] = {16, 23, 42};
int foo[4] = {23, 42};
int foo[5] = {42};
int foo[6] = {42};

এবং আমাদের কার্সার শেষ লাইনে আছে।

দ্বিতীয়ার্ধে:

$                           'Move to the end of the line
 dT]                        'Delete back until we hit a ']'
    dd                      'Delete this whole line.
      :%norm         <CR>   'Apply the following keystrokes to every line:
             dw             'Delete a word (in this case "int")
               f{x          '(f)ind the next '{', then delete it.
                  wC;       'Move a word, then (C)hange to the end of this line, 
                            'and enter a ';'

এখন সমস্ত কিছু দুর্দান্ত দেখাচ্ছে, আমাদের কেবলমাত্র মূল অ্যারে-ডিক্লেয়ারেশন যুক্ত করা দরকার। সুতরাং আমরা কি:

gg        'Move to line one
  "0P     'Print buffer '0' behind us. Buffer '0' always holds the last deleted line,
          'Which in this case is "int foo[6];"

3
আমি যখনই কোনও ভিম-গল্ফ পড়ি তখন আমি বুঝতে পারি যে আমি করি সমস্ত কোডিং (বেশিরভাগ আমার বিবিধ জিইআইআই সম্পাদকদের কীবোর্ড কমান্ডগুলি) দেখতে অনেকটা এইরকম লাগে, এবং আমার মন এক মিনিটের জন্য বাঁকানো থাকে (ভিম কেবল টুরিং সম্পূর্ণ (এবং শীতল)) : পি
বিড়াল

আমি এটি কাজ করতে পারি না - যখন আমি প্রথম "@Q" ("@ কিউকিউ @ কি" এর) টাইপ করি তখন ম্যাক্রো তখন চালিত হয় এবং স্পষ্টতই এটির চেয়ে আরও চালানো হয়, এর মতো জিনিস পেয়ে int foo[6] = {এবং শেষ হয় int foo[12(কার্সার অন "2")
লর্ডআরো

@ লর্ডআরো আমার সম্ভবত এটি উল্লেখ করা উচিত ছিল। এর কারণ এটি ইতিমধ্যে Q- তে একটি ম্যাক্রো রয়েছে এবং এটি রেকর্ডিংয়ের সময় চালিয়ে যায়, গোলমাল করছে। আমি এখানে কীভাবে যাব সে সম্পর্কে আমি ব্যাখ্যা করেছি: কোডগল্ফ.স্ট্যাকেক্সেঞ্জার
674663//

1
@ লর্ড অ্যারো ওহ, আমি জানি যে এর কারণ কী। আমি একটি বাইট সংরক্ষণ df<space>করতে পরিবর্তিত হয়েছিল dW, তবে আমি ভুলে গিয়েছিলাম যে df<space>6 ম লাইনে ম্যাক্রোটি ভেঙে যাবে, তবে dWতা নয়। আমি একটি সংশোধন রোলব্যাক করব। যে ইশারা জন্য ধন্যবাদ!
ডিজেএমসিএমহেম

1
যদিও এটি মোটামুটি সংক্ষিপ্ত উত্তর নয়, এটি এখন পর্যন্ত সবচেয়ে চিত্তাকর্ষক।
isaacg

10

রেটিনা, 108 104 100 69 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

].+{((\S+ ?)+)
$#2];$1
+`((\w+\[).+;(\S+ )*)(-?\d+).+
$1¶$2$#3] = $4;

এটাকে মারুন, পাওয়ারশেল ...

কোড ব্যাখ্যা

প্রথম লাইন: ].+{((\S+ ?)+)

প্রথমত, আমাদের ধরণ, অ্যারের নাম এবং খোলার বন্ধনী রাখা উচিত (এটি একটি বাইট সংরক্ষণ করে), তাই আমরা তাদের সাথে মেলে না। সুতরাং আমরা বন্ধ বন্ধনী, অক্ষরের কোন সংখ্যা, এবং খোলা কোঁকড়া বক্রবন্ধনী মেলে: ].+{। তারপরে আমরা নম্বর তালিকার সাথে মেলে match সংক্ষিপ্ততম আমি এতদূর খুঁজে পেতে সক্ষম চলেছি, তা হল: ((\S+ ?)+)। আমরা একটি স্থান দ্বারা অনুসরণ অ-স্পেস অক্ষরের কোন সংখ্যা (এই সংখ্যা, সম্ভাব্য নেতিবাচক চিহ্ন, এবং সম্ভব কমা অন্তর্ভুক্ত), মেলে, যে বা নাও হতে পারে হতে পারে: \S+ ?। এই গোষ্ঠীটির অক্ষরগুলি তার প্রয়োজন অনুসারে বহুবার পুনরাবৃত্তি (\S+ ?)+করা হয় : এবং বড় ক্যাপচারিং গ্রুপে রাখা হয়। নোট করুন যে আমরা ক্লোজিং কোঁকড়া ধনুর্বন্ধনী বা সেমিকোলনের সাথে মেলে না। তৃতীয় লাইনের ব্যাখ্যা কেন তা জানায়।

দ্বিতীয় লাইন: $#2];$1

যেহেতু আমরা কেবল ইনপুটটির একটি অংশের সাথে মিলেছি, ততদিনে মেলে না এমন অংশগুলি সেখানে থাকবে। সুতরাং আমরা অপ্রতিম খোলার বন্ধনী পরে তালিকার দৈর্ঘ্য করা: $#2। প্রতিস্থাপন পরিমার্জনকারী #আমাদের এটির জন্য সহায়তা করে, কারণ এটি আমাদের একটি বিশেষ ক্যাপচারিং গ্রুপ তৈরির মিলগুলির সংখ্যা দেয়। এই ক্ষেত্রে গ্রুপ ক্যাপচারিং 2। তারপরে আমরা একটি বন্ধনী বন্ধনী এবং অর্ধিকোলন রেখেছি এবং শেষ পর্যন্ত আমাদের সম্পূর্ণ তালিকা।

ইনপুট সহ short array[] = {4, 3, 2, 1};, এই প্রতিস্থাপনের পরে অভ্যন্তরীণ উপস্থাপনাটি হ'ল:

সংক্ষিপ্ত অ্যারে [4]; 4, 3, 2, 1};

(সমাপন কোঁকড়া ধনুর্বন্ধনী এবং সেমিকোলন নোট করুন)

তৃতীয় লাইন: +`((\w+[).+;(\S+ )*)(-?\d+).+

এটি একটি লুপযুক্ত বিভাগ। এর অর্থ এটি লুপের কোনও পর্যায় ইনপুটটিতে পরিবর্তন না হওয়া পর্যন্ত চলবে। আমরা প্রথমে অ্যারের নাম, খোলা বন্ধনী দ্বারা অনুসরণ মেলে: (\w+\[)। তারপর যে কোনো অক্ষরের একটি অবাধ নম্বর এবং একটি সেমিকোলন: .+;। তারপর আমরা তালিকা আবার মেলে, কিন্তু এই সময় শুধুমাত্র সংখ্যা এবং প্রতিটি নম্বরের পরে কমা, যা তাদের নিম্নলিখিত একটি স্থান আছে: (\S+ )*। তারপরে আমরা তালিকার শেষ সংখ্যাটি ক্যাপচার করি: (-?\d+)এবং এর পিছনে থাকা কোনও অক্ষর:.+

চতুর্থ লাইন: $1¶$2$#3] = $4;

আমরা তখন অ্যারের নাম এবং তালিকা একটি newline দ্বারা অনুসরণ সঙ্গে এটি প্রতিস্থাপন: $1¶। এর পরে, আমরা অ্যারে নাম, পূর্বে মিলেছে তালিকার দৈর্ঘ্য দ্বারা অনুসরণ করা শেষ উপাদান (মূলত ছাড়া list.length - 1): $2$#3। স্পেস সহ একটি বন্ধনী বন্ধনী এবং অ্যাসিগমেন্ট অপারেটর দ্বারা অনুসরণ করা হয় এবং এটি আমাদের নম্বর তালিকার শেষ উপাদানটি অনুসরণ করে:] = $4;

প্রথম প্রতিস্থাপনের পরে, অভ্যন্তরীণ উপস্থাপনাটি দেখতে এরকম দেখাচ্ছে:

short array[4];4, 3, 2, 
array[3] = 1;

নোট করুন যে .+তৃতীয় লাইনের শেষে সমাপ্ত কার্ল ব্রেস এবং সেমিকোলন অদৃশ্য হয়ে গেছে । আরও তিনটি পুনঃস্থাপনের পরে, অভ্যন্তরীণ উপস্থাপনাটি এরকম দেখাচ্ছে:

short array[4];
array[0] = 4;
array[1] = 3;
array[2] = 2;
array[3] = 1;

যেহেতু তৃতীয় লাইনের সাথে মিলানোর মতো আর কিছুই নেই, চতুর্থ কোনও কিছুর প্রতিস্থাপন করে না এবং স্ট্রিংটি ফিরে আসে।

টি এল; ডিআর: প্রথমে আমরা ইনট লিস্টের ফর্ম্যাটটি কিছুটা পরিবর্তন করি। তারপরে আমরা তালিকার শেষ উপাদান এবং নামটি নিই এবং অ্যারে প্রারম্ভিককরণের পরে এগুলি রাখি। ইন তালিকাটি খালি না হওয়া পর্যন্ত আমরা এটি করি। তারপরে আমরা পরিবর্তিত কোডটি ফিরিয়ে দেব।

এটি অনলাইন চেষ্টা করুন!


কেউ আমাকে এতে মারধর করেছে .... :(
ক্যালকুলেটরফলাইন

M!`এবং G`একই রকম, তবে একরকম নয়। সাবধান হও.
ক্যালকুলেটরফলাইন 21

তৃতীয় লাইনের ব্যাখ্যা আমাকে বিভ্রান্ত করে। প্রথম আইটেমটি কেবলমাত্র এটির পিছনে স্থান ব্যতীত, শেষ নয়।
ক্যালকুলেটরফলাইন

@ ক্যাটসআরএফ্লুফি আমি এখনই শব্দটিকে কিছুটা পরিবর্তন করার চেষ্টা করেছি। আমি যা বোঝাতে চেয়েছি তা একটি সংখ্যা অনুসরণ করে একটি স্থান ছিল , এর আগে নয়। আমার ধারণা আমি "পিছনে" এর অর্থ পুরোপুরি উপলব্ধি করতে পারি নি। আমার সত্যিকারের সকাল 2 টা বাজে কোডের ব্যাখ্যা লেখা উচিত নয়।
দাভকো

@ দ্যাভকো "পিছনে" এর অর্থ সাধারণত "পরে" অর্থাত্ "অনুসরণ" করা হয়, প্রচ্ছন্ন ইংরেজিতে। আপনি ভাল ছিল।
মনিকার মামলার তহবিল

9

ভি, 37 বাইট

2Eé0òYp6ldf ò$dT]ddÎdwf{xwC;
gg"1P

ভি হ'ল একটি 2 ডি, স্ট্রিং ভিত্তিক গল্ফিং ভাষা যা আমি লিখেছিলাম, ভিএম এর বাইরে ডিজাইন করেছি। এটি 17 কমিট হিসাবে কাজ করে

ব্যাখ্যা:

এটি আমার ভিআইএম উত্তরের প্রত্যক্ষ অনুবাদ , উল্লেখযোগ্যভাবে খাটো হলেও।

2E                               "Move to the end of 2 words forward.
  é0                             "Insert a single '0'
    ò       ò                    "Recursively do:
     Yp6ldf                      "Yank, paste, move 6 right, delete until space.
             $dT]                "Move to the end of line, delete backwards until ']'
                 dd              "Delete this line
                   Î             "Apply the following to every line:
                    dwf{xwC;<\n> "Delete word, move to '{' and delete it, Change to end of line, and enter ';'

তারপরে আমাদের কেবল আছে:

gg"1P     "Move to line 1, and paste buffer '1' behind us.

যেহেতু এই ইউনিকোড পাগলামি প্রবেশ করা কঠিন হতে পারে, আপনি এই বিপরীতমুখী হেক্সডাম্প দিয়ে ফাইলটি তৈরি করতে পারেন:

00000000: 3245 e930 f259 7001 366c 6466 20f2 2464  2E.0.Yp.6ldf .$d
00000010: 545d 6464 ce64 7766 7b78 7743 3b0d 6767  T]dd.dwf{xwC;.gg
00000020: 2231 500a                                "1P.

এটি ভি ইনস্টল করে এবং টাইপ করে চালানো যেতে পারে:

python main.py c_array.v --f=file_with_original_text.txt

1
Designed off of vim.২ টি নোট: ১. বেশিরভাগ লোকেরা বলেন fromনা off of, এবং ২. কেন এটি বিদ্যমান নেই। +1
আর

8

সি, 215 বাইট , 196 বাইট

19 বাইটস সংরক্ষণ করেছেন @ টুকুসিকে ধন্যবাদ!

Golfed:

char i[99],o[999],b[99],z[99];t,x,n,c;main(){gets(i);sscanf(i,"%s %[^[]s",b,z);while(sscanf(i+t,"%*[^0-9]%d%n",&x,&n)==1)sprintf(o,"%s[%d] = %d;\n",z,c++,x),t+=n;printf("%s %s[%d];\n%s",b,z,c,o);}

Ungolfed:

/*
 *  Global strings:
 *   i: input string
 *   o: output string
 *   b: input array type
 *   z: input array name
*/
char i[ 99 ], o[ 999 ], b[ 99 ], z[ 99 ];

/* Global ints initialized to zeros */
t, x, n, c;

main()
{
    /* Grab input string from stdin, store into i */
    gets( i );

    /* Grab the <type> <array_name> and store into b and z */
    sscanf( i, "%s %[^[]s", b, z );

    /* Grab only the int values and concatenate to output string */
    while( sscanf( i + t, "%*[^0-9]%d%n", &x, &n ) == 1 )
    {
        /* Format the string and store into a */
        sprintf( o, "%s[%d] = %d;\n", z, c++, x );

        /* Get the current location of the pointer */
        t += n;
    }

    /* Print the <type> <array_name>[<size>]; and output string */
    printf( "%s %s[%d];\n%s", b, z, c, o );
}

লিঙ্ক:

http://ideone.com/h81XbI

ব্যাখ্যা:

পেতে <type> <array_name>, sscanf()ফর্ম্যাট স্ট্রিংটি হ'ল:

%s          A string delimited by a space
    %[^[]   The character set that contains anything but a `[` symbol
         s  A string of that character set

স্ট্রিং থেকে ইনট মানগুলি বের করতে int foo[] = {4, 8, 15, 16, 23, 42};, আমি মূলত এই ফাংশনটির সাথে স্ট্রিংটি টোকিনাইজ করি:

while( sscanf( i + t, "%*[^0-9]%d%n", &x, &n ) == 1 )

কোথায়:

  • iইনপুট স্ট্রিং (ক char*)
  • t এর পয়েন্টার লোকেশন অফসেট i
  • xintস্ট্রিং থেকে প্রকৃত বিশ্লেষণ
  • n পাওয়া অঙ্ক সহ মোট খাটানো অক্ষর

sscanf()ফরম্যাট স্ট্রিং এই অর্থ:

%*            Ignore the following, which is..
  [^0-9]      ..anything that isn't a digit
        %d    Read and store the digit found
          %n  Store the number of characters consumed

আপনি যদি ইনপুট স্ট্রিংটিকে একটি চর অ্যারে হিসাবে কল্পনা করেন:

int foo[] = {4, 8, 15, 16, 23, 42};
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
00000000001111111111222222222233333
01234567890123456789012345678901234

সঙ্গে int 4সূচক 13 এ অবস্থিত হচ্ছে, 8সূচক 16, এবং তাই, এই মত লুপ সৌন্দর্য প্রতিটি রান ফলাফল:

Run 1)  String: "int foo[] = {4, 8, 15, 16, 23, 42};"
        Starting string pointer: str[ 0 ]
        Num chars consumed until after found digit: 14
        Digit that was found: 4
        Ending string pointer: str[ 14 ]

Run 2)  String: ", 8, 15, 16, 23, 42};"
        Starting string pointer: str[ 14 ]
        Num chars consumed until after found digit: 3
        Digit that was found: 8
        Ending string pointer: str[ 17 ]

Run 3)  String: ", 15, 16, 23, 42};"
        Starting string pointer: str[ 17 ]
        Num chars consumed until after found digit: 4
        Digit that was found: 15
        Ending string pointer: str[ 21 ]

Run 4)  String: ", 16, 23, 42};"
        Starting string pointer: str[ 21 ]
        Num chars consumed until after found digit: 4
        Digit that was found: 16
        Ending string pointer: str[ 25 ]

Run 5)  String: ", 23, 42};"
        Starting string pointer: str[ 25 ]
        Num chars consumed until after found digit: 4
        Digit that was found: 23
        Ending string pointer: str[ 29 ]

Run 6)  String: ", 42};"
        Starting string pointer: str[ 29 ]
        Num chars consumed until after found digit: 4
        Digit that was found: 42
        Ending string pointer: str[ 33 ]

1
আপনি স্প্রিন্টফের oভিতরে দিয়ে কনক্রিটেট করে স্ট্রাইক্যাট ব্যবহার এড়াতে পারবেন %s। এটি প্রায় 7 টি অক্ষরের শেভ করা উচিত।
tucuxi

@ টুকুশি আহ, ভাল ক্যাচ ধন্যবাদ!
হোমারসিম্পসন

7

সি, 195 180 বাইট

195-বাইট আসল:

golfed:

char*a,*b,*c,*d;j;main(i){scanf("%ms %m[^]]%m[^;]",&a,&b,&c);
for(d=c;*d++;i+=*d==44);printf("%s %s%d];\n",a,b,i);
for(d=strtok(c,"] =,{}");j<i;j++,d=strtok(0," ,}"))printf("%s%d] = %s;\n",b,j,d);}

ungolfed:

char*a,*b,*c,*d;
j;
main(i){
    scanf("%ms %m[^]]%m[^;]",&a,&b,&c); // m-modifier does its own mallocs
    for(d=c;*d++;i+=*d==44);            // count commas
    printf("%s %s%d];\n",a,b,i);        // first line
    for(d=strtok(c,"] =,{}");j<i;j++,d=strtok(0," ,}"))
        printf("%s%d] = %s;\n",b,j,d);  // each array value
}

দুটি শর্টকাটগুলি নিজস্ব স্মৃতি বরাদ্দের জন্য mস্ক্যানফের পেতে সংশোধকটি ব্যবহার করছে %s(চর অ্যারে ঘোষণা করে সংরক্ষণ করে) এবং ব্যবহার করছেstrtok করছে এবং নম্বর-পার্সিং অংশটি (যা ডিফল্টরূপে উপলব্ধ ।


180 বাইট আপডেট:

char*a,*b,*c,e[999];i;main(){scanf("%ms %m[^]]%m[^}]",&a,&b,&c);
for(c=strtok(c,"] =,{}");sprintf(e,"%s%s%d] = %s;\n",e,b,i++,c),
c=strtok(0," ,"););printf("%s %s%d];\n%s",a,b,i,e);}

ungolfed:

char*a,*b,*c,e[999];
i;
main(){
    scanf("%ms %m[^]]%m[^}]",&a,&b,&c);
    for(c=strtok(c,"] =,{}");sprintf(e,"%s%s%d] = %s;\n",e,b,i++,c),c=strtok(0," ,"););
    printf("%s %s%d];\n%s",a,b,i,e);
}

কমা গণনা করা এড়াতে bnf679 এর স্ট্রিং এডিংয়ের ধারণা ব্যবহার করে ।


6

পাইথন 3.6 (প্রাক রিলিজ), 133

m,p=str.split,print;y,u=m(input(),'[');t,n=m(y);i=m(u[5:-2],', ')
l=len(i);p(t,n+f'[{l}];')
for x in range(l):p(n+f'[{x}] = {i[x]};')

এফ-স্ট্রিংগুলির ভারী ব্যবহার করে

অবরুদ্ধ সংস্করণ:

y, u = input().split('[')
t, n = y.split()
i = u[5:-2].split(', ')
l = len(i)
print(t, n + f'[{l}];')
for x in range(l):
    print(n + f'[{x}] = {i[x]};')

1
ওহো, আমি এফ-স্ট্রিংগুলি সম্পর্কে ভুলে গেছি। এগুলি গল্ফের জন্য দুর্দান্ত উপকারী হতে চলেছে!
মরগান থ্রাপ

আমি মনে করি আপনি সাধারণ লুপের পরিবর্তে তালিকা বোধগম্যতা ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারবেন
কেউ

@ সোনোনিথপিসি: না, এটি আসলে 1 টি অতিরিক্ত বাইট যুক্ত করবে
ভল্টাহ

5

রুবি, 127 110 108 99 88 বাইট

ইনপুট হিসাবে একক যুক্তির সাথে বেনামে ফাংশন। সম্পূর্ণ প্রোগ্রাম, এসটিডিএন থেকে ইনপুট পড়ে। (আপনি যদি কোনও ফাইল পাইপ করেন তবে ট্রেলিং করা নতুন লাইন optionচ্ছিক)) ফিরে আসে আউটপুট স্ট্রিং মুদ্রণ।

@ টিমিডি তাদের সমাধানটি অন্য সমস্ত নন-এসওলংগুলিকে একটি চ্যালেঞ্জ হিসাবে মারধর করার বিষয়ে দৌড়ঝাঁপ নিয়েছিল এবং অবশেষে তারা পোস্ট করেছিল 114 বাইট পাওয়ারশেল সমাধানটি (লেখার সময়) কাটিয়ে উঠেছে। সংখ্যাগুলি সহায়তা পেতে দ্বিতীয়ার্ধকে বিভক্ত করা ]এবং স্প্লিক করা দিয়ে সি ও'বীর কৌশল ।

আমার আরও স্প্লট অপারেটর ব্যবহার করা দরকার। এটি এত দরকারী!

ব্যবহারের পরিবর্তে শব্দের জন্য স্ক্যান করে আরও বাইট সংরক্ষণ করার জন্য @ নীলের জাভাস্ক্রিপ্ট ইএস 6 উত্তর থেকে একটি কৌশল নেওয়া হয়েছে gsubএবং split..

t,n,*l=gets.scan /-?\w+/;i=-1
puts t+" #{n}[#{l.size}];",l.map{|e|n+"[#{i+=1}] = #{e};"}

AFAICT কাজটি একটি সম্পূর্ণ প্রোগ্রাম লেখার জন্য।
ভোল্টাহ

@vaultah কোড গলফ জন্য ডিফল্ট একটি প্রোগ্রাম বা ফাংশন
ঐ মেগো

@ মেগো: ওপি বলেছে "আপনাকে অবশ্যই একটি প্রোগ্রাম লিখতে হবে"
ভল্টাহ

@ ওলতাহ সাধারণতঃ আমি বলব যে কোড গল্ফ আমাকে একটি ফাংশন ব্যবহার করতে দেয় তবে একটি সম্পূর্ণ প্রোগ্রাম আমাকে 2 বাইট বাঁচায়, তবে কেন নয়?
মূল্য কালি

ওওফ ... আমি মনে করি না পাওয়ারশেল এটিতে নামতে পারে। একটি +1 আছে
অ্যাডমবর্কবার্ক

4

05AB1E , 52 50 47 বাইট

কোড:

… = ¡`¦¨¨ð-',¡©gr¨s«„];«,®v¹ð¡¦¬s\¨N"] = "y';J,

ব্যবহার সিপি-1252 এনকোডিং। এটি অনলাইন চেষ্টা করুন!


1
এটি এমন পর্যায়ে পৌঁছেছে যেখানে আমি কেবল আপনার 05AB1E উত্তরগুলি খুঁজতে অন্য সমস্ত উত্তরগুলি এড়িয়ে চলেছি। ভাষাটি আমাকে একেবারে মুগ্ধ করে।
ওয়ার্সডোনাট

1
@ ওয়ার্সডোনাট ধন্যবাদ! কেউই আমাকে 05AB1E সম্পর্কে কখনও বলেছেন যে এটি সর্বোত্তম জিনিস :)!
আদনান

4

জাভাস্ক্রিপ্ট (ES6), 100 বাইট

(s,[t,n,...m]=s.match(/-?\w+/g))=>t+` ${n}[${m.length}];`+m.map((v,i)=>`
${n}[${i}] = ${v};`).join``

যেহেতু কেবলমাত্র শব্দগুলি গুরুত্বপূর্ণ, এটি মূল স্ট্রিংয়ের সমস্ত শব্দের সাথে যুক্ত নেতৃস্থানীয় বিয়োগ চিহ্নগুলি, তারপরে ফলাফল তৈরি করে কাজ করে। (আমি প্রথমে ভেবেছিলাম আমি ব্যবহার করব)replace তবে এটি একটি লাল রঙের হারিং হিসাবে পরিণত হয়েছে))


[t,n,...m]প্রায় একটি রহস্যময় দর্শন
edc65

4

পাইথ - 53 50 46 45 44 বাইট

2 বাইট সংরক্ষণ করেছেন @ ফ্রাইআমডেজিগম্যানকে ধন্যবাদ।

+Jhcz\[+`]lKcPecz\{d\;j.es[ecJd`]kd\=dPb\;)K

টেস্ট স্যুট


4

পিপ , 48 47 বাইট

qR`(\S+)(. = ).(.+)}`{[b#Yd^k']';.n.b.,#y.c.y]}

স্টিডিন এবং প্রিন্ট থেকে স্টডআউটে ইনপুট নেয়।

ব্যাখ্যা

TL; ড: ফলাফল তৈরির জন্য ক্যাপচার গ্রুপগুলি এবং একটি কলব্যাক ফাংশন ব্যবহার করে একটি রেজেক্স প্রতিস্থাপন করে।

qবিশেষ পরিবর্তনশীল ইনপুট একটি লাইন পড়ে। রেজেক্স হ'ল (\S+)(. = ).(.+)}, যা টাইপ (পেছনের স্থান সহ) এবং চূড়ান্ত সেমিকোলন ব্যতীত সমস্ত কিছুর সাথে মেলে। প্রশ্ন থেকে প্রথম উদাহরণ ব্যবহার করে, ক্যাপচার গ্রুপ পেতে foo[, ] = এবং4, 8, 15, 16, 23, 42

প্রতিস্থাপনটি নামবিহীন ফাংশনটির রিটার্ন মান {[b#Yd^k']';.n.b.,#y.c.y]}, যা পুরো ম্যাচটি প্লাস যুক্তি হিসাবে ক্যাপচারিং গ্রুপগুলির সাথে ডাকা হয়। সুতরাং, ফাংশনটির মধ্যে b, ক্যাপচার গ্রুপ 1 cপায়, গ্রুপ 2 dপেয়েছে এবং গ্রুপ 3 পেয়েছে।

আমরা একটি তালিকা গঠন করা, যার মধ্যে প্রথম তিনটি আইটেম হতে হবে "foo[", 6এবং "]"। পেতে 6, আমরা বিভক্ত dবিল্ট-ইন পরিবর্তনশীল উপর k= ", ", Yমধ্যে পূর্ণসংখ্যার ফলে তালিকা ANK yভবিষ্যতে ব্যবহারের জন্য পরিবর্তনশীল, এবং দৈর্ঘ্য নিতে ( #)।']একটি চরিত্র আক্ষরিক।

যা অবশিষ্ট আছে তা হ'ল ফর্মটির একটি ধারাবাহিক স্ট্রিং তৈরি করা ";\nfoo[i] = x"। এটা করার জন্য, আমরা নিম্নলিখিত কনক্যাটেনেট: ';, n(ক বিল্ট-ইন সম্পর্কে newline জন্য) b(1 ম ক্যাপচার গ্রুপ), ,#y(পাইথন সমতূল্য range(len(y))), c(2nd ক্যাপচার গ্রুপ), এবং y। কনটেনটেশন তালিকাগুলি এবং ব্যাপ্তিগুলিতে আইটেমের কাজ করে, সুতরাং ফলাফলটি স্ট্রিংগুলির একটি তালিকা। এগুলি একসাথে রাখলে, ফাংশনটির রিটার্ন মানটি এমন একটি তালিকা হবে:

["foo[" 6 "]"
 [";" n "foo[" 0 "] = " 4]
 [";" n "foo[" 1 "] = " 8]
 [";" n "foo[" 2 "] = " 15]
 [";" n "foo[" 3 "] = " 16]
 [";" n "foo[" 4 "] = " 23]
 [";" n "foo[" 5 "] = " 42]
]

যেহেতু এই তালিকাটি স্ট্রিং Rএপসিলমেন্টে ব্যবহৃত হচ্ছে , তাই এটি স্পষ্টভাবে একটি স্ট্রিংয়ে কাস্ট করা হয়। পিপেতে ডিফল্ট তালিকার থেকে স্ট্রিং রূপান্তরটি সমস্ত উপাদানকে একত্রে তুলে ধরেছে:

"foo[6];
foo[0] = 4;
foo[1] = 5;
foo[2] = 15;
foo[3] = 16;
foo[4] = 23;
foo[5] = 42"

অবশেষে, ফলাফলটি (টাইপ এবং চূড়ান্ত সেমিকোলন সহ, যা রেজেক্সের সাথে মিলে না এবং এভাবে অপরিবর্তিত থাকে) স্বয়ংক্রিয়ভাবে মুদ্রিত হয়।


4

পার্ল 5.10, 73 72 68 66 + 1 (-এন স্যুইচ) = 67 বাইট

perl -nE '($t,$n,@a)=/[-[\w]+/g;say"$t $n".@a."];";say$n,$i++,"] = $_;"for@a'

পার্লের জন্য এটি একটি দুর্দান্ত চ্যালেঞ্জ এবং এখন পর্যন্ত সাধারণ-উদ্দেশ্যমূলক ভাষার মধ্যে সংক্ষিপ্ততম। সমতুল্য

($t, $n, @a) = /[-[\w]+/g;
say "$t $n" . @a . "];";
say $n, $i++, "] = $_;" for @a;

4

পাওয়ারশেল ভি 2 +, 114 105 বাইট

$a,$b,$c,$d=-split$args-replace'\[]';"$a $b[$(($d=-join$d|iex|iex).length)];";$d|%{"$b[$(($i++))] = $_;"}

ইনপুট স্ট্রিং নেয় $argsএবং -replaceকিছুই না দিয়ে স্কোয়ার ব্র্যাকেটটি নিয়ে যায়, তারপরে -splitহোয়াইটস্পেসে একটি সম্পাদন করে। আমরা প্রথম বিট সংরক্ষণ $a, মধ্যে দ্বিতীয় বিট $b, =মধ্যে $c, এবং মধ্যে অ্যারে উপাদানের $d। নীচের উদাহরণস্বরূপ, fooএইগুলিতে $aএবং barভিতরে প্রবেশ করে এবং $bঅ্যারের মধ্যে সমস্ত $d

আমরা দিয়ে তারপর আউটপুট আমাদের প্রথম লাইন "$a ..."এবং মাঝখানে রুপান্তর $dফর্মের স্ট্রিং একটি একটি অ্যারে থেকে {1,, 2,...100}; একটি নিয়মিত int- এ অ্যারে থেকে -joinএটি একসঙ্গে ing এক স্ট্রিং মধ্যে, তারপর মাধ্যমে এটি চলমান iexদুইবার (অনুরূপ eval)। আউটপুট লাইনের মধ্যে যথাযথ সংখ্যাটি পপুলেশন করার পদ্ধতিটি $dকল করার আগে আমরা সেই ফলস্বর অ্যারেটিকে আবার জমা করি ।.length[]

তারপরে আমরা $dএকটি লুপ দিয়ে প্রেরণ করি |%{...}। প্রতিটি পুনরাবৃত্তি আমরা বন্ধনী এবং বর্তমান মান মধ্যে "$b..."একটি পাল্টা ভেরিয়েবল $iencapsulated সঙ্গে আউটপুট $_। দ্য$iপরিবর্তনশীল uninitialized শুরু (সমতূল্য $null) কিন্তু ++একটি এটি নিক্ষেপ করা হবে intআউটপুট সামনে, তাই এটি আউটপুট শুরু হবে 0, সব বৃদ্ধিশীল সামনে $iপরবর্তী লুপ পুনরাবৃত্তির জন্য।

সমস্ত আউটপুট লাইন পাইপলাইনে রেখে গেছে, এবং টার্মিনালে আউটপুট প্রোগ্রাম সমাপ্তির সাথে অন্তর্ভুক্ত।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\expand-a-c-array.ps1 "foo bar[] = {1, 2, 3, -99, 100};"
foo bar[5];
bar[0] = 1;
bar[1] = 2;
bar[2] = 3;
bar[3] = -99;
bar[4] = 100;

রক্ষে! অন্যান্য নন-এসওলংগুলিকে একটি চ্যালেঞ্জ হিসাবে মারধর করার বিষয়ে আপনার মন্তব্য নিয়ে আমি আমার রুবির উত্তরটি অতীত হয়ে গেলাম! ভাল কাজ, যদিও, +1।
মূল্য কালি

ধন্যবাদ কেভিনলৌ ধন্যবাদ! এখন 105 এ আপনার সাথে ফিরে আসুন। ;-)
অ্যাডমবর্কবার্ক

আমি আপনার 105 কে ফোন করব এবং আপনাকে 99 বাছাই করব! : ডি
মান কালি

রেটিনাকে মারতে আর বন্ধ হচ্ছে না closing
ক্যালকুলেটরফলাইন

3

সি, 278 280 বাইট

golfed:

x,e,l,d;char *m,*r,*a;char i[999];c(x){return isdigit(x)||x==45;}main(){gets(i);m=r=&i;while(*r++!=32);a=r;while(*++r!=93);l=r-a;d=r-m;for(;*r++;*r==44?e++:1);printf("%.*s%d];\n",d,m,e+1);r=&i;while(*r++){if(c(*r)){m=r;while(c(*++r));printf("%.*s%d] = %.*s;\n",l,a,x++,r-m,m);}}}

ungolfed:

/* global ints
 * x = generic counter
 * e = number of elements
 * l = length of the array type
 * d = array defination upto the first '['
 */
x,e,l,d;
/* global pointers
 * m = memory pointer
 * r = memory reference / index
 * a = pointer to the start of the array type string
 */
char *m,*r,*a;
/* data storage for stdin */
char i[999];
c(x){return isdigit(x)||x=='-';}
main(){
    gets(i);
    m=r=&i;
    while(*r++!=32);                // skip first space
    a=r;
    while(*++r!=93);                // skip to ']'
    l=r-a;
    d=r-m;
    for(;*r++;*r==44?e++:1);        // count elements
    printf("%.*s%d];\n",d,m,e+1);   // print array define
    r=&i;
    while(*r++) {                   // print elements
        if(c(*r)) {                 // is char a - or a digit?
            m=r;
            while(c(*++r));         // count -/digit chars
            printf("%.*s%d] = %.*s;\n",l,a,x++,r-m,m);
        }
    }
}

কারও কারও সাথে কাজ করার সময় ডেটা পয়েন্টার ব্যবহারের পরিবর্তে পার্সিংয়ের জন্য sscanf ব্যবহার করে একটি সংক্ষিপ্ত সংস্করণ পোস্ট করা হয়েছে ... দুর্দান্ত একটি!

আপডেট: উপাদান মুদ্রণের সমান চারপাশের স্পটযুক্ত নিখোঁজ স্থানগুলি, আইডিই অনলাইন লিঙ্ক: http://ideone.com/KrgRt0 । নোট করুন যে এই বাস্তবায়নটি নেতিবাচক সংখ্যাগুলিকে সমর্থন করে ...


2

ওও, 101 বাইট

{FS="[^[:alnum:]_-]+";printf"%s %s[%d];\n",$1,$2,NF-3;for(i=3;i<NF;i++)printf$2"[%d] = %d;\n",i-3,$i}

আরও পঠনযোগ্য:

{
FS="[^[:alnum:]_-]+"
printf "%s %s[%d];\n", $1, $2, NF - 3
for (i=3; i < NF; i++)
    printf $2"[%d] = %d;\n", i-3, $i
}
  • আমি বর্ণমালা, অঙ্কগুলি, আন্ডারস্কোর এবং বাদে সবকিছুতে ক্ষেত্র বিভাজককে সেট করেছি -। সুতরাং ক্ষেত্রগুলি টাইপের নাম, ভেরিয়েবলের নাম এবং সংখ্যাগুলি হবে।
  • ক্ষেত্রের সংখ্যা হবে 1 (প্রকারের জন্য) + 1 (নামের জন্য) + এন (সংখ্যা) + 1 (পিছনের পরে একটি খালি ক্ষেত্র };)। সুতরাং, অ্যারের আকার হয়NF - 3
  • তারপরে এটি ঘোষণার জন্য কেবল একটি বিশেষ লাইন মুদ্রণ করছে এবং সংখ্যার উপরে লুপিং করছে।
  • আমি উচিত ধার্য FSপারেন যখন awk (ব্যবহার invoking -F) অথবা একটি BEGINব্লক। বংশবৃদ্ধির স্বার্থে,…।

1
আসলে, FSঅবশ্যই নিযুক্ত করা উচিত BEGINবা ব্যবহার করা উচিত -Fঅন্যথায় এটি প্রথম লাইনটি বিভক্ত করতে ব্যবহৃত হবে না এবং যেহেতু কেবলমাত্র 1 লাইন ইনপুট রয়েছে ...
রবার্ট বেনসন

@ রবার্টবেসন আপনি ঠিকই বলেছেন, সুতরাং কমান্ডটি হবে awk '-F[^[:alnum:]_-]+' '{printf"%s %s[%d];\n",$1,$2,NF-3;for(i=3;i<NF;i++)printf$2"[%d] = %d;\n",i-3,$i}', যা 102 বাইট awkনিজেই গণনা করছে না । হুম। আমি কি উদ্ধৃতিগুলি বাদ দিতে পারি?
মুড়ু

হ্যাঁ, আপনি উদ্ধৃতিগুলি বাদ দিতে পারেন। আপনি কখনও কখনও যেমন তালিকাবদ্ধ C+O bytesযেখানে Cএবং Oকোড এবং অপশন থেকে বাইট যথাক্রমে প্রতিনিধিত্ব করে। অবশ্যই আমি সাধারণত একটি BEGINব্লক ব্যবহার করি, সুতরাং এটি সম্পর্কে আমাকে ভাবতে হবে না। : পি
রবার্ট বেনসন

2

জাভাস্ক্রিপ্ট ES6, 134 132 130 129 বাইট

নীলকে ধন্যবাদ 1 বাইট সংরক্ষণ করা হয়েছে।

x=>(m=x.match(/(\w+) (\w+).+{(.+)}/),m[1]+` `+(q=m[2])+`[${q.length-1}];
`+m[3].split`, `.map((t,i)=>q+`[${i}] = ${t};`).join`
`)

না করা উচিত `[${i}] = `+t+";"হবে `[${i}] = ${t};`?
নীল

@ নীল ধন্যবাদ, একটি বাইট সংরক্ষিত!
কনর ও'ব্রায়ান

2

বাশ, 133 129 বাইট

read -a l
d="${l[@]:0:2}"
e=("${l[@]:3}")
echo "${d%?}${#e[@]}];"
for i in "${!e[@]}"
{
echo "${l[0]}[$i] = ${e[$i]//[!0-9]/};"
}

প্রথম প্রচেষ্টা, এটি আরও খাটো করার পক্ষে এটি নিশ্চিত।


2

ডি, 197 , 188 বাইট

import std.array,std.stdio;void main(){string t,n,e;readf("%s %s] = {%s}",&t,&n,&e);auto v=e.replace(",","").split;writeln(t,' ',n,v.length,"];");foreach(i,c;v)writeln(n,i,"] = ",c,";");}

বা অবরুদ্ধ:

import std.array, std.stdio;

void main() {
    string type, nameAndBracket, elems;
    readf("%s %s] = {%s}", &type, &nameAndBracket, &elems);

    // remove all commas before splitting the string into substrings
    auto vector = elems.replace(",","").split();

    // writeln is shorter than fln by 1 char when filled in
    writeln(type, ' ', nameAndBracket, vector.length, "];");

    // print each element being assigned
    foreach(index, content; vector)
        writeln(nameAndBraket, index, "] = ", content, ";");
}

আমি ডি জানি না, তবে আপনি কি নামের অংশ হিসাবে খোলার স্কোয়ার ব্র্যাকেটটি পড়তে পারেন? এটি আপনাকে পরে আলাদাভাবে একটি বর্গাকার বন্ধনী লিখতে বাঁচাতে পারে।
ডিএলসাস

2

জুলিয়া, 154 134 101 বাইট

f(s,c=matchall(r"-?\w+",s),n=endof(c)-2)=c[]" "c[2]"[$n];
"join([c[2]"[$i] = "c[i+3]";
"for i=0:n-1])

এটি এমন একটি ফাংশন যা কোনও স্ট্রিং গ্রহণ করে এবং একক পেছনের নতুন লাইনের সাথে একটি স্ট্রিং প্রদান করে।

Ungolfed:

function f(s, c = matchall(r"-?\w+", s), n = endof(c) - 2)
    c[] " " c[2] "[$n];\n" join([c[2] "[$i] = " x[i+3] ";\n" for i = 0:n-1])
end

আমরা cনিয়মিত অভিব্যক্তিতে ইনপুটটির ম্যাচের একটি অ্যারে হতে সংজ্ঞায়িত করি -?\w+। এটি টাইপ, অ্যারের নাম এবং তারপরে প্রতিটি মানকে বিশিষ্ট করে। আমরা nদৈর্ঘ্য হিসাবে সঞ্চয়c 2 - যা মানগুলির সংখ্যা। আউটপুটটি টাইপ, নাম এবং দৈর্ঘ্যের স্ট্রিং ইন্টারপোল্ট হিসাবে নির্মিত হয়, প্রতিটি সংজ্ঞা রেখার সাথে মিলিয়ে নিউলাইনগুলি দ্বারা পৃথক করা হয়। যে কারণেই হোক না কেন, c[]একই রকম c[1]

ডেনিসের সাহায্যে 32 বাইট সংরক্ষণ করেছেন!



1

পাইথন 3, 116 বাইট

t,v,_,*l=input().split();v=v[:-1]+'%s]'
print(t,v%len(l)+';');i=0
for x in l:print(v%i,'= %s;'%x.strip('{,};'));i+=1

প্রকার, নাম এবং সংখ্যার তালিকায় ইনপুট বিভক্ত করে। অ্যারে ডিক্লেয়ারিং প্রিন্ট করার পরে, সংখ্যার মাধ্যমে ম্যানুয়ালি অঙ্ক করে উপাদানগুলি প্রথম এবং শেষের সাথে সংযুক্ত অতিরিক্ত বিরামচিহ্নগুলি মুছে ফেলে মুদ্রণ করে।

পাইথন 2 এ একটি পৃথক পদ্ধতি 122 বাইটে প্রকাশিত হয়েছিল:

a,b=input()[:-2].split('] = {')
l=eval(b+',')
print a+`len(l)`+"];"
for y in enumerate(l):print a.split()[1]+'%s] = %s;'%y

evalএকটি টিপল হিসাবে সংখ্যার তালিকার অন্তর্ভুক্ত কমা সহ ধারণাটি যাতে একক সংখ্যা একটি প্রকার হিসাবে স্বীকৃত হয় The সংখ্যার তালিকাভুক্ত তালিকা স্ট্রিং-ফর্ম্যাটটিতে টিপল সরবরাহ করে।


1

পিএইচপি, 143 বাইট

Golfed

<?$t=count($n=explode(' ',preg_replace('/[^\s\w]/','',$argv[1])))-3;echo"$n[0] {$n[1]}[$t];";for($i=2;$t>$j=++$i-3;)echo$n[1]."[$j] = $n[$i];";

Ungolfed

<?  
$t = count(                                  // Get the number of elements for our array...
    $n = explode(' ',                            // After split the input on whitespace...
    preg_replace('/[^\s\w]/','',$argv[1])))-3;  // After removing all special characters.
echo "$n[0] {$n[1]}[$t];";                     // First line is type, name, and count.
for($i=2;                                        // Loop through array elements
    $t > $j = ++$i-3;)                         // Assign j to be the actual index for our new array
    echo $n[1]."[$j] = $n[$i];";                // Print each line

কমান্ড লাইন আর্গুমেন্টের মাধ্যমে ইনপুট নেওয়া হয়। নমুনা:

C:\(filepath)>php Expand.php "int foo[] = {4,8,15,16,23,42};"

আউটপুট:

int foo[6];foo[0] = 4;foo[1] = 8;foo[2] = 15;foo[3] = 16;foo[4] = 23;foo[5] = 42;

0

এমএটিএল , 68 64 58 বাইট

'\w+'XX2:H#)XKxXIZc'['KnV'];'v!K"I2X)'['X@qV'] = '@g';'6$h

এটি সি নয়, তবে এটি সি-জাতীয় sprintfফাংশনটি নাহ ব্যবহার করে যা 4 বাইট নষ্ট করে।

এটি অনলাইন চেষ্টা করুন!

          % Take input implicitly
'\w+'XX   % Find substrings that match regex '\w+'. Gives a cell array
2:H#)     % Split into a subarray with the first two substrings (type and name), and 
          % another with the rest (numbers that form the array)
XKx       % Copy the latter (numbers) into clipboard K. Delete it
XI        % Copy the former (type and name) into clipboard I
Zc        % Join the first two substrings with a space
'['       % Push this string
K         % Paste array of numbers
nV        % Get its length. Convert to string
'];'      % Push this string
v!        % Concatenate all strings up to now. Gives first line of the output
K"        % For each number in the array
  I2X)    %   Get name of array as a string
  '['     %   Push this string
  X@qV    %   Current iteration index, starting at 0, as a string
  '] = '  %   Push this string
  @g      %   Current number of the array, as a string
  ';'     %   Push this string
  5$h     %   Concatenate top 6 strings. This is a line of the output
          % Implicity end for each
          % Implicitly display

0

Clojure, 115 বাইট

#(let[[t n & v](re-seq #"-?\w+"%)](apply str t" "n\[(count v)"];\n"(map(fn[i v](str n"["i"] = "v";\n"))(range)v))))

আমি সুন্দরভাবে মার্জ করতে awful_array_name[5];এবং awful_array_name[0] = 7;অংশগুলি যাতে সক্ষম করেছিলাম যাতে তারা কোডটি পুনরায় ব্যবহার করতে পারে:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.