Seperti yang kita semua tahu, meta yang dipenuhi dengan keluhan tentang mencetak kode-golf antara bahasa (ya, setiap kata adalah link terpisah, dan ini mungkin hanya puncak gunung es).
Dengan kecemburuan yang begitu besar terhadap mereka yang benar-benar peduli untuk melihat dokumentasi Pyth, saya pikir akan menyenangkan untuk memiliki sedikit lebih banyak tantangan yang membangun, sesuai dengan sebuah situs web yang berspesialisasi dalam tantangan kode.
Tantangannya agak langsung. Sebagai input , kami memiliki nama bahasa dan jumlah byte . Anda dapat menjadikannya sebagai input fungsi, stdin
atau metode input default bahasa Anda.
Sebagai output , kami memiliki jumlah byte yang diperbaiki , yaitu skor Anda dengan handicap yang diterapkan. Masing-masing, output harus menjadi output fungsi, stdout
atau metode output default bahasa Anda. Output akan dibulatkan menjadi bilangan bulat, karena kami menyukai tiebreak.
Menggunakan kueri yang paling jelek, diretas bersama ( tautan - jangan ragu untuk membersihkannya), saya telah berhasil membuat dataset (zip dengan .xslx, .ods, dan .csv) yang berisi snapshot dari semua jawaban untuk pertanyaan kode-golf. . Anda dapat menggunakan file ini (dan menganggap itu akan tersedia untuk program anda, misalnya, itu di folder yang sama) atau mengkonversi file ini ke format konvensional lain ( .xls
, .mat
, .sav
dll - tetapi hanya mungkin berisi data asli!). Nama harus tetap QueryResults.ext
dengan ext
ekstensi pilihan.
Sekarang untuk spesifik. Untuk setiap bahasa, ada parameter Boilerplate B
dan Verbosity V
. Bersama-sama, mereka dapat digunakan untuk membuat model linear bahasa. Membiarkan n
menjadi jumlah byte aktual, dan c
menjadi skor yang dikoreksi. Dengan menggunakan model sederhana n=Vc+B
, kami mendapatkan skor terkoreksi:
n-B
c = ---
V
Cukup sederhana, bukan? Sekarang, untuk menentukan V
dan B
. Seperti yang Anda harapkan, kita akan melakukan beberapa regresi linier, atau lebih tepatnya, regresi linear tertimbang kuadrat. Saya tidak akan menjelaskan detailnya - jika Anda tidak yakin bagaimana melakukannya, Wikipedia adalah teman Anda , atau jika Anda beruntung, dokumentasi bahasa Anda.
Data akan sebagai berikut. Setiap titik data akan menjadi jumlah byte n
dan bytecount rata-rata pertanyaan c
. Untuk memperhitungkan suara, poin akan ditimbang, dengan jumlah suara ditambah satu (untuk memperhitungkan 0 suara), sebut saja itu v
. Jawaban dengan suara negatif harus dibuang. Secara sederhana, jawaban dengan 1 suara harus dihitung sama dengan dua jawaban dengan 0 suara.
Data ini kemudian dimasukkan ke dalam model tersebut n=Vc+B
menggunakan regresi linier tertimbang.
Misalnya , diberikan data untuk bahasa yang diberikan
n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5
Sekarang, kami menyusun matriks dan vektor yang relevan A
, y
dan W
, dengan parameter kami di vektor
[1 c1] [n1] [1 0 0] x=[B]
A=[1 c2] y=[n2] W=[0 2 0], [V]
[1 c3] [n3] [0 0 5]
kita memecahkan persamaan matriks (dengan '
menunjukkan transpos)
A'WAx=A'Wy
untuk x
(dan akibatnya, kita mendapatkan parameter B
dan kita V
).
Skor Anda akan menjadi output dari program Anda, ketika diberi nama bahasa Anda sendiri dan bytecount. Jadi ya, saat ini bahkan pengguna Java dan C ++ dapat menang!
PERINGATAN: Permintaan menghasilkan dataset dengan banyak baris tidak valid karena orang-orang menggunakan format header 'keren' dan orang-orang menandai pertanyaan tantangan kode mereka sebagai kode-golf . Unduhan yang saya berikan menghilangkan sebagian besar outlier. JANGAN gunakan CSV yang disediakan dengan kueri.
Selamat coding!
sumber
C++ <s>6 bytes</s>
. Selain itu, saya tidak pernah melakukan T-SQL sebelum hari ini dan saya sudah terkesan dengan diri saya bahwa saya berhasil mengekstrak bytecount.Jawaban:
Mathematica, 244.719 (245 bytes)
Kasus cobaan
Bagaimana dengan bahasa lain?
Model alternatif :
log(c)=log((n-B)/V)
Salah satu fitur penting dari golf kode (dan mungkin masalah pengkodean lainnya) adalah bahwa distribusi panjang program cenderung menjadi distribusi eksponensial (berbeda dengan distribusi seragam). Karenanya model
log(n)=log(Vc+B)
jauh lebih mungkin untuk menyeimbangkan pengaruh antara titik-titik dengan besarc
dan kecilc
.Seperti yang dapat kita lihat dalam grafik di bawah ini, distribusi titik cocok untuk pemasangan dalam skala logaritmik.
Hasil model baru
Kami telah menemukan dua bahasa yang luar biasa - Ruby with
V=0.724
dan Retina withV=1.322
, dan kriteria untuk menjadi bahasa golf yang populer - memiliki pelat ketel negatif yang besar.sumber
csv
.Python3, 765,19 (765) byte
Mungkin ada ruang untuk bermain golf di sini. Membutuhkan numpy untuk hal-hal matriks. Dibaca dari stdin, diformat sebagai berikut: [lang] [bytes / n]. Berhenti ketika Anda mengirim q.
Hasil
Saya mungkin telah melakukan sesuatu yang salah di beberapa titik; Saya mendapatkan hasil yang berbeda dari jawaban Mathematica:
sumber