भाषा का अनुमान लगाओ


23

परिचय

यह साइट तेजी से कोड स्निपेट्स के विशाल डेटासेट का निर्माण कर रही है, तो चलो इसके साथ कुछ करते हैं!

यहाँ एक डेटा फ़ाइल है । इसमें 113 भाषाओं के लिए 9,066 अद्वितीय भाषा + स्निपेट जोड़े शामिल हैं, सभी इस साइट से लिए गए हैं। प्रारूप टैब-अलग-अलग है (भाषा-TAB- स्निपेट), स्निपेट में सभी नए समाचारों के साथ प्रतिस्थापित किया गया <LF>, और सभी टैब 4 स्थानों के साथ बदल दिए गए। प्रत्येक भाषा के लिए कम से कम 5 स्निपेट हैं।

[अद्यतन: मैंने कुछ पायथन और RegExp संस्करणों को मर्ज करने के लिए डेटा फ़ाइल में एक मामूली बदलाव किया है, जो मैंने पहले याद किया था - ऊपर लिंक अपडेट किया गया है]

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो एक कोड स्निपेट लेता है और उस भाषा को आउटपुट करता है जो इसमें लिखा गया है (विवरण के लिए नीचे देखें)। आपके स्रोत का कुल आकार + आपके लिए आवश्यक कोई भी डेटा 300 बाइट्स या उससे कम होना चाहिए , और आपका प्रोग्राम होना चाहिए सही स्रोत कोड दिए जाने पर सही भाषा आउटपुट । उच्चतम सटीकता (उपरोक्त डेटासेट पर सबसे सही उत्तर) जीतता है।

नियम

  • आपके स्रोत कोड, संसाधनों और किसी भी आवश्यक संकलन / रनटाइम फ़्लैग का कुल आकार 300 बाइट से अधिक नहीं होना चाहिए।
  • आपका जवाब ऊपर के डाटासेट के खिलाफ परीक्षण किया जाएगा; इसे इनपुट के रूप में "स्निपेट" मानों में से एक दिया जाएगा और इसके आउटपुट की तुलना डेटासेट के अनुसार "सही" आउटपुट से की जाएगी। यह डेटासेट में सभी प्रविष्टियों के लिए दोहराया जाएगा और सही उत्तरों की अंतिम संख्या आपका स्कोर है।
  • आप इनपुट एन्कोडिंग का चयन कर सकते हैं - मैं UTF-8 मान लूंगा, इसलिए यदि आपको किसी अन्य एन्कोडिंग की आवश्यकता है तो इसे अपने उत्तर में निर्दिष्ट करें।
  • आपको <LF>नई लाइनों के प्रतिस्थापन का उपयोग करने की आवश्यकता नहीं है; यदि आपकी प्रविष्टि को शाब्दिक newlines (char 10) के रूप में newlines प्राप्त करने की उम्मीद है, तो इसे अपने उत्तर में निर्दिष्ट करें।
  • आपकी प्रविष्टि को उस भाषा को आउटपुट करना होगा जो यह सोचती है कि इनपुट स्निपेट में लिखा गया है। भाषा के बहुत सारे तार को संपीड़ित करने की आवश्यकता से बचने के लिए, मैं मैपिंग की अनुमति दूंगा (यदि आप "जावा" के लिए 3 आउटपुट करना चाहते हैं, तो यह ठीक है); बस अपने उत्तर में मैपिंग पर ध्यान दें।
  • आप प्रत्येक भाषा के लिए केवल 1 आउटपुट मैपिंग कर सकते हैं (अर्थात यदि 3 का अर्थ "जावा" है, तो आपके पास 4 अर्थ "जावा" भी नहीं हो सकते)।
  • जब अपना स्वयं का सोर्स कोड दिया जाता है, तो आपके प्रोग्राम को सही उत्तर देना चाहिए (जिस भाषा में यह लिखा गया है उसे आउटपुट करना चाहिए)।
  • आपको डेटासेट में सभी भाषाओं का समर्थन करने की आवश्यकता नहीं है, और यदि आप चाहते हैं तो आप अतिरिक्त भाषाओं का समर्थन कर सकते हैं (जैसे कि यदि आपकी प्रविष्टि डेटासेट में किसी भाषा में नहीं है)।
  • आपका कार्यक्रम नियतात्मक होना चाहिए (एक ही इनपुट प्रदान करना दो बार एक ही आउटपुट का उत्पादन करना चाहिए)।

टाई को तोड़ने

  • एक प्रविष्टि जीतने तक डेटासेट को कम करके टाई का निर्णय लिया जाएगा। सबसे लोकप्रिय भाषा के लिए सभी स्निपेट को हटाकर डेटासेट को कम कर दिया जाएगा (यानी दुर्लभ भाषाओं पर सटीकता से संबंध टूट जाता है)। उदाहरण के लिए, यदि पूर्ण डेटासेट पर ए और बी स्कोर 70% है, तो सभी पायथन स्निपेट हटा दिए जाएंगे। यदि A और B दोनों अब 60% स्कोर करते हैं, तो CJam को हटा दिया जाएगा। यदि A अब 50% स्कोर करता है, लेकिन B स्कोर 55% है, तो B विजेता है।
  • यदि 100% सटीकता हासिल की जाती है, तो एक ही भाषा के लिए अधिक नमूनों वाले एक दूसरे (अंधे) डेटासेट का उपयोग करके संबंधों का निर्णय लिया जाएगा।

उदाहरण 1

पायथन लिपि:

print("python")

यह स्क्रिप्ट सफलतापूर्वक अपने स्रोत कोड दिए जाने पर "अजगर" का उत्पादन करती है, इसलिए यह मान्य है। डेटासेट पर, यह 1008/9066 = 11.1% स्कोर करता है

उदाहरण 2

जावास्क्रिप्ट समारोह:

function f(s){return /function/.test(s)?1:2}

मैपिंग के साथ 1 → जावास्क्रिप्ट, 2 → पायथन। फिर से यह अपने स्वयं के स्रोत के लिए 1 ("जावास्क्रिप्ट") का सफलतापूर्वक उत्पादन करता है, और डेटासेट पर इसका स्कोर 1092/9066 - 12%% होता है


डेटा कहां से आया?

मैंने इस साइट पर [कोड-गोल्फ] चुनौतियों से नमूने खींचने के लिए एक SEDE क्वेरी बनाई । परिणामी 10,000 उत्तरों से, मैंने प्रत्येक के लिए कोड और भाषा के नाम को खोजने के लिए एक हैक-किए गए अजगर स्क्रिप्ट का उपयोग किया, फिर किसी भी भाषा को 5 से कम उदाहरणों के साथ फ़िल्टर किया। डेटा 100% साफ नहीं है (मुझे पता है कि कुछ गैर-कोड स्निपेट हैं जो इसे खींचे गए हैं), लेकिन पर्याप्त अच्छा होना चाहिए।


वर्ष में पहले से इस चुनौती से प्रेरित: किसने कहा? 2016 का राष्ट्रपति चुनाव

इसके अलावा आंशिक रूप से व्हाट्स लैंग्वेज से संबंधित है ?


3
300 बाइट्स में करने के लिए अविश्वसनीय रूप से चुनौतीपूर्ण लगता है। शायद अधिक बाइट आवंटित करें?
रोहन झुनझुनवाला

1
@ रोहन झुनझुनवाला ने कहा, मुझे लगता है कि यह एक चुनौती होगी! मैं हालांकि किसी को भी 100% सटीकता प्राप्त करने की उम्मीद नहीं कर रहा हूं; चुनौती जितना संभव हो सके उतनी अधिक प्राप्त करना है। "किसने कहा?" चुनौती से जुड़ा हुआ है, हम सभी ~ 30% सटीकता पर पहुंचे। मैंने बाइट की सीमा निर्धारित करने की कोशिश की है ताकि 50-70% यहां संभव हो सके। उम्मीद है कि मुझे संतुलन सही मिला। बेशक यदि आप एक महान समाधान पाते हैं जो अधिक बाइट्स का उपयोग करता है, तो इसे पोस्ट करें! यह सिर्फ प्रतिस्पर्धा नहीं होगी (आप इसे प्रतिस्पर्धा संस्करण के लिए काट सकते हैं)।
डेव

क्या आपने डाटासेट से पॉलीग्लॉट्स हटा दिए हैं, या क्या वे सिर्फ "गोचैस" होंगे?
जॉयबिट्स

9
गोल्फलैंग्स में अंतर करना कितना मुश्किल है ...
बुचुकुआन

2
दिलचस्प तथ्य: 20 सबसे अधिक इस्तेमाल की जाने वाली (आपके डेटासेट में कम से कम) भाषाएं आपके डेटासेट का 81% हिस्सा बनाती हैं, और 10 सबसे अधिक इस्तेमाल किए जाने वाले लोग 61% बनाते हैं। यहां तक ​​कि सिर्फ जावास्क्रिप्ट, पायथ, सीजम और पायथन के बीच अंतर का पता लगाने के लिए लगभग 35% प्राप्त करने के लिए पर्याप्त है।
helloworld922

जवाबों:


17

सी, 297 बाइट्स, 43.194351% मिलान (v2)

यह पहली गैर-गोल्फ चुनौती है, जिसमें मैंने प्रतिस्पर्धा की है। आश्चर्यजनक रूप से, गोल्फिंग भाषा वास्तव में अलग होना आसान है, प्रति भाषा लगभग 60% मिलान सटीकता के साथ।

कोड को UTF-8 स्ट्रिंग के रूप में इनपुट की आवश्यकता है, जो कि आपूर्ति किए गए डेटासेट के संस्करण 2 के आधार पर परिणाम है। इस कोड <LF>को वास्तविक newlines के साथ प्रतिस्थापित करने की आवश्यकता नहीं है।

#define S(x)!!strstr(p,#x)
f(char*p){return S(#d)?:S(voi)?0:S(mai)|S(utc)?:S(mbd)|S(impor)|S(input)|S(def)|S(rang)?2:S(log)|S(fun)|S(=>)|S(lert)?3:S(<?)?4:S(echo)|S(sed)?5:S(+++)?6:S(<-)?7:S($_)|S(say)?8:S(\342)|S(\303)?9:S(->)|S(map)?10:S(@#)|S(]])|S([#)?11:S(V)|S(Q)?12:S(Z)|S(Y)?13:S(.)?14:15;}

मानचित्रण तालिका:

 0. java
 1. c
 2. python
 3. javascript
 4. php
 5. bash
 6. brainf*
 7. haskell
 8. perl
 9. apl
10. ruby
11. wolfram
12. pyth
13. matl
14. golfscript
15. cjam

प्रतिशत मेरी हिट / कुल गणना पर आधारित है: 3916 हिट / 9066 कुल।


एक शानदार शुरुआत केलिए तैयार; यह जल्दी था! जैसा कि "मेरे परीक्षण कोड और पाठ संपादक किसी कारण से 9065 के बजाय 9068 प्रविष्टियाँ देखते हैं" - क्या आपने हेडर और रिक्त पंक्ति को अंत में छोड़ दिया था? यह 2 अतिरिक्त लाइनों के लिए जिम्मेदार होगा।
डेव

माफ़ कीजिये; यह नियम # 7 पास नहीं कर रहा है (अपने स्रोत कोड के लिए सही उत्तर का उत्पादन करना चाहिए): अभी यह 0 कहता है जो कि पायथन है (मुझे लगता है कि इसे ठीक करने के लिए चेक को फिर से ऑर्डर करने के लिए बहुत ज्यादा काम नहीं होगा)
डेव

आप के बाद define S(x)और जहाँ भी आपके पास जगह खो सकती है ?1
feersum

धन्यवाद! मैं ?1चाल के बारे में नहीं जानता था , और दूसरे के बारे में भूल गया था। ;-)
उल्लू

वाह यह चुपचाप सुधार हुआ है! नवीनतम 43.19% सत्यापित:
डेव

2

पायथन 3, 271 278 बाइट्स, 25.049636% मिलान (v2, असत्यापित)

def f(c):
 try:compile(c,'','exec');return 5
 except:
  for j in range(9):
   if any(l in c for l in [['echo'],['require'],['Main','string'],['document','alert','var ','function'],['String'],['def ','lambda','print '],['main','int','char'],['+++','<<<'],[]][j]):break
 return j

नक्शा:

0 = bash
1 = ruby
2 = c#
3 = javascript
4 = java
5 = python
6 = c
7 = brainf*
8 = cjam

बहुत बेहतर गोल्फ (शायद अभी भी महान नहीं), आखिरकार 25% बाधा को तोड़ दिया! इनपुट्स को <LF>नई पंक्ति के साथ बदल दिया गया है ( \n)


मुझे execकोशिश पसंद है । वैसे, आपको इनपुट को <LF>पूर्व-प्रतिस्थापित करने के लिए कहने की अनुमति है \n, इसलिए आप संभावित रूप से कुछ और बढ़िया ट्यूनिंग जोड़ने के लिए वहां कुछ बाइट्स बचा सकते हैं।
डेव

अंत में यह सत्यापित करने के लिए चारों ओर हो गया। मैं केवल 2103 (23.19%) किसी कारण से देखता हूं - किसी भी विचार में अंतर क्यों है?
डेव

हममम ... मुझे यकीन नहीं है। शायद यह आप कैसे इनपुट दे रहे हैं के साथ क्या करना है? मैं decode('utf-8')कच्चे इनपुट बाइट सरणी को एक देशी पायथन 3 यूनिकोड (utf-16?) स्ट्रिंग में बदलने से पहले अपने फंक्शन में देने के लिए उपयोग करता हूं।
Helloworld922

आह अच्छा। एक एन्कोडिंग मुद्दा हो सकता है; मैं बस जो कुछ भी fileinput.input () के तहत हुड पर निर्भर करता हूँ। मैं जांच करूंगा।
डेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.