Tujuan
Ganti semua komentar dalam C, C ++, atau Java Code dengan komentar // Do the needful
.
Spesifik
Tantangan pengkodean ini sederhana. Ambil sebagai masukan nama file. File input harus berisi C, C ++, atau kode Java. Kode harus memuat satu atau lebih komentar. Komentar dapat berupa satu baris /* */
atau //
dibatasi, serta beberapa baris /* */
dibatasi. Output dari program harus identik dengan input kecuali semua komentar harus dikonversi // Do the needful
.
Misalnya jika file inputnya adalah:
#include <iostream.h>
int result; // the result of the calculations
char oper_char; // the user-specified operator
int value; // value specified after the operator
/* standard main function */
int main()
{
result = 0; // initialize the result
// Loop forever (or till we hit the break statement)
while (1) {
cout << "Result: " << result << '\n';
/* This code outputs display and requests
input from the user */
cout << "Enter operator and number: ";
cin >> oper_char;
cin >> value;
if (oper_char = '+') {
result += value;
} else {
cout << "Unknown operator " << oper_char << '\n';
}
}
return (0);
}
Output dari program harus dibaca
#include <iostream.h>
int result; // Do the needful
char oper_char; // Do the needful
int value; // Do the needful
// Do the needful
int main()
{
result = 0; // Do the needful
// Do the needful
while (1) {
cout << "Result: " << result << '\n';
// Do the needful
cout << "Enter operator and number: ";
cin >> oper_char;
cin >> value;
if (oper_char = '+') {
result += value;
} else {
cout << "Unknown operator " << oper_char << '\n';
}
}
return (0);
}
Mencetak gol
Ini adalah kontes popularitas. Anda mendapatkan dua orang ekstra ditambahkan ke skor Anda jika tidak ada kata-kata berikut muncul dalam program Anda dalam variasi kasus: {"do", "the", "needful"}
. Skor adalah jumlah suara ditambah bonus jika berlaku.
Tunjangan
Jika komentar muncul dalam string literal, Anda dapat mengubahnya // Do the needful
juga. Lagi pula ... Anda tidak akan pernah memiliki cukup kebutuhan.
sumber
"d" + "o"
,"t" + "he"
dan"need" + "ful"
? Juga, apakah pengajuan harus dapat menangani setiap C valid, C ++ atau kode Java? Itu cukup keras dan sama dengan menulis lexer untuk ketiga bahasa (saya sedang memikirkan literal komentar dalam string dan sebaliknya.) Jika demikian, bagaimana dengan perpustakaan lexer pihak ketiga?/* ... */
mendahului non-komentar pada suatu baris?char str[]="/**///";
atau urutan komentar mulai/*
muncul dalam/*
komentar, atau garis miring terbalik muncul dalam//
komentar, atau//
komentar dalam/**/
komentar?Jawaban:
CoffeeScript (66 byte)
Kode ini akan menguraikan string, tetapi ada alasan bagus. Anda lihat, ada kemungkinan bahwa ada komentar di templat yang menghasilkan
/**/
komentar C.Ini mendapat bonus, karena menghindari kasus yang sebenarnya pertandingan sensitif untuk
Do
,the
, danneedful
. Ini juga menggunakan ES5 candle ([^]
) operator untuk melakukan hal-hal. Saya akan memberikan komentarDo the needful
dalam program ini, tetapi itu akan menghapus bonus.sumber
Perl, 68 karakter
Ini memerlukan beberapa kebebasan dengan spesifikasi, dan mempertahankan gaya komentar asli. Ini menghindari masalah dengan
/* ... */
komentar yang muncul sebelum akhir baris.Tidak ada upaya yang dilakukan untuk menghindari komentar dalam string literal, dan tidak ada klaim yang dibuat untuk poin bonus.
sumber
/* ... */
komentar mendahului kode aktual (Anda tidak dapat secara naif mengubahnya menjadi//
komentar).Perl
Anarki dunia pertama! :)
"Kamu tidak akan pernah merasa cukup membutuhkan"
sumber
Python 3.x, regex
Karena ini bukan kode golf, saya tidak meributkan panjang kode. Tidak ada yang mengesankan, tapi saya senang mengingat / mempelajari kembali dasar-dasar regex.
sumber
sed, 90 karakter
Dapat ditingkatkan. Saya belajar banyak tentang sed saat membuat ini.
Membaca dari input standar, output ke output standar. Mengasumsikan input yang valid - jika Anda memiliki komentar yang tidak ditentukan, itu tidak akan memperlakukannya sebagai komentar.
Diuji pada GNU sed v4.2.2.
Dan hadiah untuk dibaca adalah ....?
Versi satu-baris:
Penjelasan
Aliran kontrol melompati banyak, melalui pernyataan GOTO (ya, begitu juga mereka!). sed tidak memiliki loop atau pernyataan kondisional AFAIK yang mudah.
sumber
BrainFuck
Ya, BrainFuck adalah bahasa lengkap Turing.
Semoga berhasil memahami kode ini.
Pada dasarnya, pseudo-code adalah:
Beberapa penerjemah online rusak.
Coba di sini dengan contoh yang diberikan oleh OP (diakhiri dengan null-char untuk memutus loop dengan benar):
sumber
Rebol
Ini bukan kode golf, jadi saya akan bertele-tele.
(Catatan: Untuk alasan politis, saya mendorong GABUNGAN di sini, tetapi belum standar . Jadi jika Anda benar-benar ingin menjalankan ini, gunakan REJOIN. Tapi saya benci REJOIN. Kutil pada bahasa yang indah! Ceritakan lingkungan Anda yang ramah Red dev mengarah untuk mendengarkan saya. Terima kasih.)
PARSE adalah dialek, atau bahasa-dalam-bahasa, di Rebol dan Merah. Itu memutar hal-hal, jadi misalnya jenis simbol yang digunakan untuk penugasan (
terminator:
dalamterminator: newline
) mengambil makna baru ketika digunakan dalam paradigma kode-sebagai-data ... itu menyimpan posisi parse saat ini menjadi variabel dengan nama itu . Anda dapat membaca lebih lanjut tentang mengapa ini keren di sini .UPDATE: Oh baiklah, saya akan golf juga. Di Rebmu , 72 karakter ... menggunakan rebmu / args yang menyuntikkan A sebagai argumen:
pa DtsRDa[anTO["/*"(T"*/")|"//"(Tlf)]SthT F(chpS"// Do the needful^/"f)]d
Program yang sama persis.
sumber