Giriş
Bu site hızla büyük bir kod parçacıkları veri seti oluşturuyor, bu yüzden onunla bir şeyler yapalım!
İşte bir veri dosyası . Hepsi bu siteden alınan 113 dil için 9,066 benzersiz dil + snippet çifti içerir. Biçim sekmeyle ayrılmış (dil-TAB pasajı), pasajlardaki tüm yeni satırlar <LF>
ve tüm sekmeler 4 boşlukla değiştirilmiş. Her dil için en az 5 snippet var.
[güncelleme: Daha önce kaçırdığım bazı Python ve RegExp sürümlerini birleştirmek için veri dosyasında küçük bir değişiklik yaptım - yukarıdaki bağlantı güncellendi]
Meydan okuma
Kod pasajını alan ve yazıldığı dili çıkaran bir program veya işlev yazın (ayrıntılar için aşağıya bakın). Kaynağınızın toplam boyutu + istediğiniz veri miktarı 300 bayt veya daha az olmalı ve programınız kendi kaynak kodu verildiğinde doğru dili vermelidir . En yüksek doğruluk (yukarıdaki veri setindeki en doğru cevaplar) kazanır.
kurallar
- Kaynak kodunuzun, kaynaklarınızın ve gerekli derleme / çalışma zamanı bayraklarınızın toplam boyutu 300 baytı geçmemelidir.
- Cevabınız yukarıdaki veri setine karşı test edilecektir; giriş olarak "Snippet" değerlerinden birine verilecek ve çıktıları veri setine göre "doğru" çıktıyla karşılaştırılacak. Bu, veri setindeki tüm girişler için tekrarlanacak ve doğru cevapların son sayısı sizin puanınız olacaktır.
- Giriş kodlamasını seçebilirsiniz - UTF-8'i kabul edeceğim, başka bir kodlamaya ihtiyacınız olursa cevabınızı belirtin.
- Yeni
<LF>
hatlar için değiştirmeyi kullanmanıza gerek yoktur ; eğer girişiniz yeni satırları değişmez satırlar olarak almak istiyorsa (char 10), cevabınızı belirtiniz. - Girişiniz, giriş snippet'inin yazıldığını düşündüğü dili çıkarmalıdır. Çok sayıda dil dizesini sıkıştırmaktan kaçınmak için eşleştirmelere izin vereceğim ("Java" için 3 çıktısı istiyorsanız, sorun değil); Cevabınızdaki eşlemeleri not edin.
- Her dil için yalnızca 1 çıkış eşlemeniz olabilir (ör. 3 "Java" anlamına gelirse, 4 "Java" anlamına da gelemezsiniz).
- Kendi kaynak kodunu verdiği zaman, programı gerekir doğru cevabı (zorunluluk çıkışı olarak yazıldığı dili) üretirler.
- Veri kümesindeki tüm dilleri desteklemeniz gerekmez ve eğer isterseniz ek dilleri destekleyebilirsiniz (örneğin, girişiniz veri kümesindeki dillerden birinde değilse).
- Programınız deterministik olmalı (aynı girişi iki kez sağlayarak aynı çıktıyı vermelisiniz).
Tie-Breaking
- Bir giriş kazanana kadar veri setini düşürerek bağlara karar verilecek. En popüler dil için tüm snippet'leri kaldırarak veri kümesi azaltılacaktır (örn. Bağlar daha nadir olan dillerde doğrulukla kesilir). Örneğin, A ve B tam veri kümesinde% 70 puan alırsa, tüm Python snippet'leri kaldırılır. Eğer A ve B şimdi ikisi de% 60 puan alırsa, CJam kaldırılacaktır. Eğer A şimdi% 50, B ise% 55 puan alırsa, B kazanır.
- % 100 doğruluk elde edilirse, aynı diller için daha fazla örnek içeren ikinci (kör) bir veri kümesi kullanılarak bağlara karar verilecektir.
örnek 1
Python betiği:
print("python")
Bu komut dosyası, kendi kaynak kodu verildiğinde başarıyla "python" üretir, bu nedenle geçerlidir. Veri setinde 1008/9066 = 11.1 puan aldı
Örnek 2
JavaScript işlevi:
function f(s){return /function/.test(s)?1:2}
Eşlemelerle 1 → javascript, 2 → piton. Yine kendi kaynağı için başarılı bir şekilde 1 ("javascript") üretir ve veri setinde 1092/9066 = 12.0% puan aldı
Veriler nereden geldi?
Bu sitede [code-golf] zorluklarından örnekler almak için bir SEDE sorgusu oluşturdum . Elde edilen 10.000 yanıttan, her birinin kod ve dil adını bulmak için bir bilgisayar korsanından oluşan bir python betiği kullandım, daha sonra 5 örnekten daha az olan herhangi bir dili filtreledim. Veriler% 100 temiz değil (çektiği bazı kod dışı snippet'lerin olduğunu biliyorum), ancak yeterince iyi olması gerekir.
Yılın başındaki bu meydan okumadan ilham alan: Bunu kim söyledi? 2016 Cumhurbaşkanlığı seçimi
Ayrıca kısmen Dil Nedir?