ระบุคอมไพเลอร์


11

ความท้าทาย
คุณจะได้รับฟังก์ชั่นcompile(s: String): Integerที่ส่งคืน0หากsสามารถรวบรวมและสิ่งอื่นที่ไม่ใช่0ถ้ามันล้มเหลว (รหัสผลลัพธ์ไม่สำคัญ)

สิ่งนี้คือคุณไม่รู้ภาษาที่ฟังก์ชันสร้างขึ้นดังนั้นจึงขึ้นอยู่กับคุณที่จะคิดออกโดยการให้ตัวอย่างโค้ดของฟังก์ชันเล็ก ๆ และสังเกตสิ่งที่มันส่งคืน ส่วนที่ดีคือทีมนักวิทยาศาสตร์เคยลองมาก่อนและได้ จำกัด รายชื่อไว้ที่C, C ++, C #, Java และ JavaScript (ภาษาเหล่านี้เป็นภาษาเดียวที่แพร่หลายซึ่งมีไวยากรณ์คล้ายกันที่ฉันคิด)

กฎระเบียบ

  • บังคับใช้กฎเกณฑ์ทั่วไปเกี่ยวกับกอล์ฟ
  • ไม่มีรูปแบบเอาต์พุตที่เข้มงวด ตราบใดที่มันสามารถอ่านและเข้าใจได้มันก็โอเค
  • หาก 5 ภาษาเหล่านี้ไม่เพียงพอสำหรับคุณคุณสามารถเพิ่มรายการโปรดของคุณเองและคุณจะได้รับรางวัลดาวพิเศษ (★) (ไม่ทำอะไรเลย)

หมายเหตุ1 : คอมไพเลอร์เป็นรุ่นล่าสุดด้วยมาตรฐานล่าสุดของภาษาใดก็ตามที่ออกแบบมา
หมายเหตุ2 : ฉันรู้ว่า JavaScript ไม่ได้รวบรวมแต่มันจะผ่านกระบวนการแยกวิเคราะห์ ถ้ามันเป็นรหัส JavaScript ที่ถูกต้องก็จะผ่าน


2
เราจะให้อะไร ชุดของสตริงที่สามารถใช้บอกคอมไพเลอร์แยกกันทำให้ความยาวทั้งหมดของสตริงลดลงหรือไม่
Geoff Reedy

@GeoffReedy ฉันถูกมองเป็นเพียงสำหรับรหัสเพื่อตรวจสอบภาษา แต่คำอธิบายที่คุณให้เป็นมากกว่าการต้อนรับ
adrianton3

คำตอบ:


7

ความยาวรวมทั้งหมด 8; โปรแกรมทดสอบ 83 (C)

แยกความแตกต่างของ JavaScript และ C จาก C ++, Java และ C #

a;

แยกความแตกต่าง JavaScript จาก C

0

แยกความแตกต่าง C ++ จาก C # และ Java

#

แยกแยะ C # และ Java

[:a]

รหัส C เพื่อกำหนดภาษา

#define C(x)compile(#x)?
main(){puts(C(a;)C(#)C([:a])"J":"C#":"C+":C(0)"C":"JS");}

ตัวอย่างทดสอบด้วย

C: gcc 4.7.2 พร้อม -std = c99
C ++: g ++ 4.7.2 พร้อม -std = c ++ 11
Java: javac 1.7.0_09
JavaScript: JavaScript-C 1.8.5
C #: โมโน C # คอมไพเลอร์เวอร์ชั่น 2.10.8.0


#define C(x)compile(#x)?ช่วยประหยัดพื้นที่และคำพูดมากมาย
ugoren

@ugoren ขอบคุณฉันคิดว่าจริง ๆ แล้วฉันลองสิ่งที่ทำให้เป็นก้อน แต่มันใช้งานไม่ได้ด้วยเหตุผลบางอย่าง; ฉันต้องมีปัญหาอื่นอีกด้วยทำให้ตอนนี้ใช้ได้ดี
เจฟฟ์

แต่คุณจะทำให้มันสับสน - C(#x)ไม่ทำงาน
ugoren
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.