Rekan kerja saya, Jimmy agak baru di C / C ++. Dia juga tipe pembelajar yang lambat. Sekarang, agar adil, kodenya selalu dikompilasi, tetapi ia memiliki beberapa kebiasaan yang sangat ceroboh. Misalnya, semua orang tahu bahwa Anda dapat mendefinisikan array seperti ini:
int spam[] = {4, 8, 15, 16, 23, 42};
Semua orang, kecuali Jimmy. Dia yakin bahwa satu - satunya cara untuk membuat array adalah seperti ini:
int spam[6];
spam[0] = 4;
spam[1] = 8;
spam[2] = 15;
spam[3] = 16;
spam[4] = 23;
spam[5] = 42;
Saya terus memperbaiki ini untuknya dalam review kode, tetapi dia tidak akan belajar. Jadi saya ingin Anda menulis alat yang secara otomatis melakukan ini untuknya ketika ia melakukan¹.
Tantangan
Saya ingin Anda menulis program lengkap atau fungsi yang menggunakan string multiline sebagai input, dan menampilkan versi yang lebih ringkas dari array C. Masukan akan selalu mengikuti format ini, termasuk spasi:
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;
Singkatnya, input akan selalu valid dan didefinisikan dengan baik C. Secara lebih rinci:
Semua pengidentifikasi akan terdiri dari hanya huruf dan garis bawah. Panjangnya akan selalu setidaknya satu, dan tidak akan pernah ada indeks yang hilang atau keluar dari batas. Anda juga dapat mengasumsikan bahwa indeks sudah beres. Sebagai contoh:
foo bar[3];
bar[0] = 1
bar[2] = 9;
foo bar[1];
bar[0] = 1;
bar[1] = 3;
dan
foo bar[3];
bar[2] = 9;
bar[0] = 1
bar[1] = 3
semua input tidak valid, dan dapat menyebabkan perilaku yang tidak ditentukan dalam kiriman Anda. Anda juga dapat mengasumsikan bahwa semua angka akan menjadi angka desimal yang valid, negatif atau positif. Input tidak akan memiliki ruang asing. Output harus selalu mengikuti format ini, termasuk spasi:
identifier_one identifier_two[] = {n1, n2, n3, ...};
Berikut ini beberapa contoh data:
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};
Anda dapat mengambil input dan output Anda dalam format apa pun yang masuk akal, seperti STDIN / STDOUT, argumen fungsi dan nilai pengembalian, membaca dan menulis file dll. Lubang standar berlaku. Jawaban terpendek dalam byte menang!
¹Ini pasif-agresif dan ide yang mengerikan. Anda tidak mendapatkan ide ini dari saya.
Jawaban:
Vim,
4336 byteAnda tidak perlu memberi Jimmy skrip, cukup ajari dia untuk menggunakan editor teks yang tepat. (Pengembalian literal untuk kejelasan)
sumber
<C-a>
lebih pendek darit]
, yang merupakan hack kecil yang menyenangkan. Juga, saya pikir Anda secara teknis membutuhkan 2<cr>
karena meminta konfirmasi.norm df=
lebih pendek daris/.*=//g
3wC] = {<esc>
lebih pendek dari<C-a>di]$s = {<esc>
.CJam,
4336 byteContoh Online
Penjelasan:
Terima kasih banyak untuk Martin Ender atas peningkatan jawaban CJam pertama saya.
sumber
JavaScript (ES6),
656463 bytesumber
Retina ,
3028 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Penjelasan
Kami akan menggunakan input berikut sebagai contoh:
Tahap 1
Perhatikan bahwa ada spasi tambahan di baris pertama.
Kami mulai dengan mencocokkan nomor yang diikuti oleh
];
dan linefeed, dan kemudian semuanya hingga ruang terakhir di baris berikutnya. Pertandingan ini hanya dapat ditemukan di akhir baris pertama (karena];
). Semua ini diganti dengan] = {
. Artinya, ia mengubah contoh input kami menjadi:Tahap 2
Sekarang kami mencocokkan semuanya dari
;
atas hingga=
pada baris berikutnya dan ganti dengan a,
. Ini mengubah string menjadi:Tahap 3
Yang tersisa hanyalah memperbaiki bagian akhir dan kami melakukan ini dengan mengganti yang tersisa
;
dengan};
:sumber
Julia,
112108105 BytesPenjelasan
Bytes yang disimpan dengan mengganti collect (Eachmatch ()) dengan [Eachmatch () ...] dan dengan regex yang lebih pendek
sumber
eachmatch
panggilan fungsi untuk output yang kurang cantik dan -1 byte. Saya sendiri tidak pernah memprogram dalam Julia, tetapi Anda mungkin menemukan posting ini menarik untuk dibaca: Tips untuk bermain golf di Julia . Sekali lagi selamat datang, dan nikmati masa tinggal Anda. :)matchall
mungkin akan lebih pendek daripada menampareachmatch
.Lua, 121 Bytes.
Dijelaskan
sumber
Batch, 160 byte
Catatan: Garis
set s=,
berakhir dengan spasi. Mengambil input pada STDIN. Bahwa garis aneh 3 mengambil input (misalnyaint spam[6];
dan perubahan[
dalam[] = {&rem
menghasilkanset s=int spam[] = {&rem 6];
yang kemudian akan ditafsirkan sebagai dua pernyataan,set s=int spam[] = {
danrem 6];
, yang terakhir yang merupakan komentar. Kemudian untuk setiap baris kita menghapus teks hingga ruang pertama (karena Anda bisa dapat digunakan=
dalam suatu pola dan pencocokannya tidak serakah) dan ekstrak nilainya.sumber
C, 121 byte
sumber
Python
112111Sangat mudah bagi saya, tolong sarankan perbaikan apa pun yang terlintas dalam pikiran.
sumber
[:-1] for
.05AB1E ,
313028 bytePenjelasan
Cobalah online!
Menyimpan satu byte, terima kasih kepada Adnan
sumber
žuDÀÀ
bukannya„[]„{}
menyimpan byte :).Java 7,
159158149154 byteBeberapa byte disimpan berkat @cliffroot .
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
String c(String[]a){a[0]=a[0].split("\\d")[0]+"]={ \b";for(String i:a)a[0]+=i.split("=[{]*")[1];return a[0].replace(';',',').replaceFirst(".$","};");}
String
dalam parameter dan mengganti karakter terakhir dengan"};");
bukan"")+"};";
.Perl, 42 + 2 (
-0p
) = 44 byteKebutuhan
-p
dan-0
bendera untuk dijalankan. Contohnya :sumber
Jelly , 27 byte
Cobalah online!
Penjelasan
sumber
sed 51
sumber
Java, 106 byte
Manipulasi string di Jawa adalah neraka, seperti biasa.
Ini adalah jawaban regex murni. Buat satu gabungan
String
, kemudian lakukanreplaceXxx
sampai ok.Pengujian dan ungolfed:
sumber
Jelly , 33 byte
TryItOnline
Bagaimana?
sumber
Ruby, 64 byte
sumber
JavaScript, 125 byte
Saya tahu ini lebih panjang dari yang lain, tetapi saya benar-benar ingin menggunakannya
eval
. Hanya untuk bersenang-senang.Untuk menjalankan, rekatkan yang berikut ke sini :
sumber
Haxe, 234 byte
Nama fungsi panjang membunuh ini: D
Coba testcases di sini !
sumber
V ,
25, 24 byteCobalah online! Ini mengandung
<esc>
karakter yang tidak patut dicetak, jadi ini adalah hexdump:Penjelasan:
sumber