บทนำ
ไซต์นี้กำลังสร้างชุดข้อมูลโค้ดขนาดใหญ่อย่างรวดเร็วดังนั้นลองทำอะไรกับมันสิ!
นี่เป็นแฟ้มข้อมูล มันประกอบไปด้วยภาษาที่ไม่ซ้ำกัน 9,066 คู่ + ตัวอย่างสำหรับ 113 ภาษาทั้งหมดนำมาจากเว็บไซต์นี้ รูปแบบถูกคั่นด้วยแท็บ (language-TAB-snippet) พร้อมบรรทัดใหม่ทั้งหมดในตัวอย่างที่แทนที่ด้วย<LF>
และแท็บทั้งหมดถูกแทนที่ด้วยช่องว่าง 4 ช่อง แต่ละตัวอย่างมีอย่างน้อย 5 ตัวอย่าง
[อัปเดต: ฉันได้ทำการเปลี่ยนแปลงเล็กน้อยกับไฟล์ข้อมูลเพื่อรวม Python & RegExp เวอร์ชันที่ฉันพลาดไปก่อนหน้านี้ - ลิงก์ด้านบนได้รับการปรับปรุงแล้ว]
ท้าทาย
เขียนโปรแกรมหรือฟังก์ชั่นที่รับโค้ดขนาดเล็กและส่งออกภาษาที่ใช้เขียน (ดูรายละเอียดด้านล่าง) ขนาดรวมของแหล่งข้อมูลของคุณ + ข้อมูลใด ๆ ที่คุณต้องการจะต้องมีขนาด 300 ไบต์หรือน้อยกว่าและโปรแกรมของคุณจะต้องแสดงผลภาษาที่ถูกต้องเมื่อได้รับรหัสต้นฉบับของตัวเอง ความแม่นยำสูงสุด (คำตอบที่ถูกต้องที่สุดในชุดข้อมูลด้านบน) ชนะ
กฎระเบียบ
- ขนาดทั้งหมดของซอร์สโค้ดทรัพยากรและแฟล็กการรวบรวม / รันไทม์ที่จำเป็นใด ๆ ของคุณต้องไม่เกิน 300 ไบต์
- คำตอบของคุณจะถูกทดสอบกับชุดข้อมูลด้านบน มันจะได้รับหนึ่งในค่า "ตัวอย่าง" เป็นอินพุทและเอาท์พุทของมันจะถูกเปรียบเทียบกับเอาท์พุท "ถูกต้อง" ตามชุดข้อมูล นี้จะถูกทำซ้ำสำหรับรายการทั้งหมดในชุดข้อมูลและจำนวนสุดท้ายของคำตอบที่ถูกต้องคือคะแนนของคุณ
- คุณสามารถเลือกการเข้ารหัสอินพุต - ฉันจะสมมติว่า UTF-8 ดังนั้นหากคุณต้องการการเข้ารหัสอื่นให้ระบุไว้ในคำตอบของคุณ
- คุณไม่จำเป็นต้องใช้การ
<LF>
แทนที่สำหรับการขึ้นบรรทัดใหม่ หากรายการของคุณคาดว่าจะได้รับการขึ้นบรรทัดใหม่เป็นตัวอักษรขึ้นบรรทัดใหม่ (อักขระ 10 ตัว) ให้ระบุไว้ในคำตอบของคุณ - รายการของคุณจะต้องแสดงผลภาษาที่คิดว่ามีการเขียนตัวอย่างข้อมูลเข้าเพื่อหลีกเลี่ยงความจำเป็นในการบีบอัดสตริงภาษาจำนวนมากฉันจะอนุญาตการแมป (ถ้าคุณต้องการส่งออก 3 สำหรับ "Java" ก็ใช้ได้) เพียงบันทึกการแมปในคำตอบของคุณ
- คุณสามารถมีการแมปผลลัพธ์ 1 รายการสำหรับแต่ละภาษาเท่านั้น (เช่นถ้า 3 หมายถึง "Java" คุณไม่สามารถมี 4 ความหมาย "Java")
- เมื่อได้รับซอร์สโค้ดของตัวเองแล้วโปรแกรมของคุณจะต้องสร้างคำตอบที่ถูกต้อง (ต้องส่งออกภาษาที่เขียน)
- คุณไม่จำเป็นต้องสนับสนุนทุกภาษาในชุดข้อมูลและคุณสามารถรองรับภาษาเพิ่มเติมได้หากคุณต้องการ (เช่นถ้ารายการของคุณไม่ได้อยู่ในหนึ่งในภาษาในชุดข้อมูล)
- โปรแกรมของคุณต้องถูกกำหนดไว้ล่วงหน้า (การให้อินพุตเดียวกันสองครั้งจะต้องสร้างเอาต์พุตเดียวกัน)
ผูกทำลาย
- ความสัมพันธ์จะถูกตัดสินโดยการลดชุดข้อมูลจนกว่าจะมีหนึ่งรายการชนะ ชุดข้อมูลจะลดลงโดยการลบตัวอย่างทั้งหมดสำหรับภาษาที่ได้รับความนิยมมากที่สุด (เช่นความสัมพันธ์จะถูกทำลายโดยความถูกต้องในภาษาที่หายาก) ตัวอย่างเช่นถ้า A และ B ให้คะแนน 70% กับชุดข้อมูลแบบเต็มข้อมูลโค้ด Python ทั้งหมดจะถูกลบ หาก A และ B ทั้งคู่ทำคะแนนได้ 60% CJam จะถูกลบออก หาก A ตอนนี้ทำคะแนน 50% แต่ B ทำคะแนน 55% B จะเป็นผู้ชนะ
- หากบรรลุความแม่นยำ 100% ความสัมพันธ์จะถูกตัดสินใจโดยใช้ชุดข้อมูลชุดที่สอง (ตาบอด) ซึ่งมีตัวอย่างเพิ่มเติมสำหรับภาษาเดียวกัน
ตัวอย่างที่ 1
สคริปต์ Python:
print("python")
สคริปต์นี้สร้าง "python" สำเร็จเมื่อได้รับซอร์สโค้ดของตัวเองดังนั้นจึงถูกต้อง บนชุดข้อมูลนั้นให้คะแนน 1008/9066 = 11.1%
ตัวอย่างที่ 2
ฟังก์ชั่น JavaScript:
function f(s){return /function/.test(s)?1:2}
ด้วยการแม็พ 1 → javascript, 2 → python อีกครั้งมันประสบความสำเร็จในการผลิต 1 ("javascript") สำหรับแหล่งที่มาของตัวเองและในชุดข้อมูลนั้นคะแนน 1092/9066 = 12.0%
ข้อมูลมาจากไหน
ฉันสร้างแบบสอบถาม SEDEเพื่อดึงตัวอย่างจากความท้าทาย [code-golf] ในเว็บไซต์นี้ จากผลลัพธ์ 10,000 คำตอบฉันใช้สคริปต์ python แบบแฮ็กเข้าด้วยกันเพื่อค้นหาชื่อรหัสและภาษาสำหรับแต่ละรายการจากนั้นกรองภาษาใด ๆ ที่มีตัวอย่างน้อยกว่า 5 ตัว ข้อมูลไม่สะอาด 100% (ฉันรู้ว่ามีบางตัวอย่างที่ไม่ใช่รหัสที่ดึงมา) แต่ควรดีพอ
แรงบันดาลใจจากความท้าทายนี้เมื่อต้นปี: ใครบอกว่า? 2559 การเลือกตั้งประธานาธิบดี
ส่วนหนึ่งเกี่ยวข้องกับภาษาอะไรบ้าง