pengantar
Situs ini dengan cepat membangun kumpulan besar potongan kode, jadi mari kita lakukan sesuatu dengannya!
Ini file data . Ini berisi 9.066 pasangan + potongan bahasa unik untuk 113 bahasa, semua diambil dari situs ini. Formatnya dipisahkan tab (bahasa-TAB-snippet), dengan semua baris baru di snippet diganti <LF>
, dan semua tab diganti dengan 4 spasi. Setidaknya ada 5 cuplikan untuk setiap bahasa.
[pembaruan: Saya telah membuat sedikit perubahan pada file data untuk menggabungkan beberapa versi Python & RegExp yang saya lewatkan sebelumnya - tautan di atas telah diperbarui]
Tantangan
Tulis sebuah program atau fungsi yang mengambil potongan kode dan mengeluarkan bahasa yang ditulisnya (lihat di bawah untuk perincian). Ukuran total sumber Anda + data apa pun yang Anda perlukan harus 300 byte atau kurang, dan program Anda harus menampilkan bahasa yang benar ketika diberi kode sumbernya sendiri. Akurasi tertinggi (jawaban paling benar pada dataset di atas) menang.
Aturan
- Ukuran total kode sumber, sumber daya, dan flag kompilasi / runtime yang diperlukan tidak boleh melebihi 300 byte.
- Jawaban Anda akan diuji terhadap dataset di atas; itu akan diberikan salah satu dari nilai "Snippet" sebagai input dan outputnya akan dibandingkan dengan output "benar" sesuai dengan dataset. Ini akan diulang untuk semua entri dalam dataset dan jumlah akhir dari jawaban yang benar adalah skor Anda.
- Anda dapat memilih pengkodean input - Saya akan menganggap UTF-8, jadi jika Anda memerlukan pengkodean lain tentukan dalam jawaban Anda.
- Anda tidak perlu menggunakan
<LF>
pengganti untuk baris baru; jika entri Anda mengharapkan untuk menerima baris baru sebagai baris baru literal (char 10), tentukan dalam jawaban Anda. - Entri Anda harus menampilkan bahasa yang menurutnya input snipet ditulis. Untuk menghindari perlunya mengompresi banyak string bahasa, saya akan mengizinkan pemetaan (Jika Anda ingin menampilkan 3 untuk "Java", itu bagus); catat saja pemetaan dalam jawaban Anda.
- Anda hanya dapat memiliki 1 pemetaan output untuk setiap bahasa (yaitu jika 3 berarti "Java", Anda juga tidak dapat memiliki 4 arti "Java").
- Ketika diberi kode sumbernya sendiri, program Anda harus menghasilkan jawaban yang benar (harus mengeluarkan bahasa yang tertulis di dalamnya).
- Anda tidak perlu mendukung semua bahasa dalam dataset, dan Anda dapat mendukung bahasa tambahan jika Anda mau (mis. Jika entri Anda tidak dalam salah satu bahasa dalam dataset).
- Program Anda harus deterministik (memberikan input yang sama dua kali harus menghasilkan output yang sama).
Tie-Breaking
- Ikatan akan diputuskan dengan mengurangi dataset hingga satu entri menang. Dataset akan dikurangi dengan menghapus semua cuplikan untuk bahasa yang paling populer (mis. Ikatan terputus karena keakuratan pada bahasa yang lebih jarang). Misalnya, jika A dan B mencetak 70% pada dataset lengkap, semua snippet Python akan dihapus. Jika A dan B sekarang sama-sama skor 60%, CJam akan dihapus. Jika A sekarang skor 50% tetapi B skor 55%, B adalah pemenangnya.
- Jika akurasi 100% tercapai, ikatan akan diputuskan menggunakan dataset kedua (buta) yang berisi lebih banyak sampel untuk bahasa yang sama.
Contoh 1
Skrip Python:
print("python")
Script ini berhasil menghasilkan "python" ketika diberi kode sumbernya sendiri, sehingga valid. Pada dataset, skornya 1008/9066 = 11,1%
Contoh 2
Fungsi JavaScript:
function f(s){return /function/.test(s)?1:2}
Dengan pemetaan 1 → javascript, 2 → python. Sekali lagi itu berhasil menghasilkan 1 ("javascript") untuk sumbernya sendiri, dan pada dataset skornya 1092/9066 = 12,0%
Dari mana data itu berasal?
Saya membuat kueri SEDE untuk menarik sampel dari tantangan [kode-golf] di situs ini. Dari 10.000 jawaban yang dihasilkan, saya menggunakan skrip python yang diretas bersama untuk menemukan kode & nama bahasa untuk masing-masing, kemudian menyaring semua bahasa dengan kurang dari 5 contoh. Data tidak 100% bersih (saya tahu ada beberapa cuplikan non-kode yang ditarik), tetapi harus cukup baik.
Terinspirasi oleh tantangan ini dari awal tahun: Siapa yang mengatakan itu? Pemilihan Presiden 2016
Juga sebagian yang terkait dengan What's the Language?
Jawaban:
C, 297 byte, 43.194351% cocok (v2)
Ini adalah tantangan non-golf pertama yang saya ikuti. Secara mengejutkan, bahasa golf sebenarnya agak mudah dipisahkan, dengan akurasi pencocokan sekitar 60% per bahasa.
Kode membutuhkan input sebagai string UTF-8, hasil berdasarkan versi 2 dari dataset yang disediakan. Kode ini tidak perlu
<LF>
diganti dengan baris baru yang sebenarnya.Tabel pemetaan:
Persentase ini didasarkan pada perhitungan hit / total saya: total 3916 hit / 9066.
sumber
define S(x)
dan 1 di mana pun Anda miliki?1
.?1
triknya, dan lupa tentang yang lain. ;-)Python 3,
271278 byte, 25.049636% cocok (v2, tidak diverifikasi)peta:
golf jauh lebih baik (mungkin masih tidak bagus), akhirnya menembus penghalang 25%! Input telah
<LF>
diganti dengan baris baru (\n
)sumber
exec
usahanya. Ngomong-ngomong, Anda diizinkan untuk meminta input yang sudah<LF>
diganti sebelumnya\n
, sehingga Anda dapat menyimpan beberapa byte di sana untuk berpotensi menambahkan beberapa penyesuaian lebih lanjut.decode('utf-8')
untuk mengkonversi array byte input mentah ke asli Python 3 unicode (utf-16?) String sebelum memberikannya ke fungsi saya.