पता लगाएँ कि प्रोग्रामिंग भाषा क्या एक स्निपेट है


23

आपकी चुनौती इनपुट के रूप में कुछ स्रोत कोड लेने की है, और आउटपुट किस प्रोग्रामिंग भाषा में लिखा गया है।

उदाहरण के लिए, आपके पास इनपुट हो सकता है

class A{public static void main(String[]a){System.out.println("Hello, World!");}}

और आउटपुट

Java

आपके दो मुख्य लक्ष्य विविधता हैं (आप कितनी प्रोग्रामिंग भाषाओं का पता लगा सकते हैं) और सटीकता (इन भाषाओं का पता लगाने में आप कितने अच्छे हैं)।

पॉलीग्लॉट्स (एक से अधिक भाषाओं में मान्य कार्यक्रम) के लिए, आप यह तय कर सकते हैं कि क्या करना है। आप केवल उस भाषा को आउटपुट कर सकते हैं जो आपके प्रोग्राम को लगता है कि अधिक संभावना है, या आप एक त्रुटि का उत्पादन कर सकते हैं, या आप संभावित विकल्पों की एक सरणी का उत्पादन कर सकते हैं (जो शायद सिर्फ एक त्रुटि की तुलना में अधिक उठाव होगा!)।

यह एक , क्योंकि एक अलग उद्देश्य जीतने वाली कसौटी को निर्दिष्ट करना बहुत मुश्किल होगा। मतदाता, कृपया इस बात पर वोट दें कि यह कितनी भाषाओं का पता लगा सकता है और कितना सही है।


यह असंभव है, कारण print("")कई भाषाओं में इस्तेमाल किया जा सकता है।
इस्माइल मिगुएल

1
आपके संपादन के साथ, अब यह अधिक संभव लगता है।
इस्माइल मिगुएल

4
उन भाषाओं के बारे में क्या जो हर किसी के इनपुट के लिए मान्य हैं? व्हॉट्सएप की तरह। यह वाक्य एक वैध व्हाट्सएप प्रोग्राम है। यह पूरा पृष्ठ एक वैध व्हाट्सएप प्रोग्राम है।
इस्माइल मिगुएल

1
क्या इनपुट एक वैध कार्यक्रम होने की गारंटी है? जैसे कुछ इनपुट हो सकता है class A{public static void main(String[]a){System.println.out("Hello, World!");}}जो अमान्य है।
गौरांग टंडन

1
या फिर वैसे ही HTML इनपुट हमेशा शुरू कर देंगे साथ <!DOCTYPE html>द्वारा पीछा किया <html>, <body>और अन्य टैग (जैसे metaउनके सही क्रम में)?
गौरांग टंडन

जवाबों:


18

234 पाठ प्रारूप - यूनिक्स शैल

(उन सभी भाषाओं में नहीं - मुझे उन्हें ध्यान से गिनने की आवश्यकता है)

file $1

मैं इसे कुछ हद तक स्मार्ट-$ $ $ का जवाब देने में संकोच करता हूं, लेकिन मुझे इस पर प्रतिबंध लगाने वाले नियमों में कुछ भी दिखाई नहीं देता है और fileशेल उपयोगिता वास्तव में इसका अच्छा काम करती है। उदाहरण के लिए:

$ file golfscript.rb 
golfscript.rb: Ruby module source, ASCII text
$ file template.c 
template.c: ASCII C program text
$ file adams.sh
adams.sh: Bourne-Again shell script, ASCII text executable
$ 

इसके अलावा आप -kएक बहुवचन का परीक्षण करते समय "चलते रहें" के विकल्प का उपयोग कर सकते हैं :

 -k, --keep-going
         Don't stop at the first match, keep going.  Subsequent matches
         will be have the string ‘\012- ’ prepended.  (If you want a new‐
         line, see the -r option.)

इसके अलावा, -lविकल्प आपको अंदाजा लगाएगा कि अलग-अलग भाषाओं के लिए एल्गोरिदम कितना अच्छा है:

$ फ़ाइल -l | grep खोल
अज्ञात, 0: चेतावनी: नियमित रूप से जादू फ़ाइल का उपयोग करना / आदि / जादू '
शक्ति = 280: शेल आर्काइव टेक्स्ट [एप्लिकेशन / ऑक्टेट-स्ट्रीम]
शक्ति = 250: टेनेक्स सी शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 250: बॉर्न-अगेन शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = २४०: पॉल फालस्टेड की zsh स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = २४०: नील ब्राउन की ऐश स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = २३०: नील ब्राउन की स्क्रिप्ट का निष्पादन योग्य पाठ [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 210: टेनेक्स सी शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 210: बोर्न-अगेन शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 190: टेनेक्स सी शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 190: बॉर्न-अगेन शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = १ Fal०: पॉल फालस्टेड की zsh स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 150: टेनेक्स सी शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 150: बॉर्न-अगेन शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 140: सी शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 140: कर्न शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = १४०: पॉल फालस्टेड की zsh स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 130: POSIX शेल स्क्रिप्ट पाठ निष्पादन योग्य [पाठ / एक्स-शेलस्क्रिप्ट]
शक्ति = 130: योजना 9 आर सी शेल स्क्रिप्ट पाठ निष्पादन योग्य []
$ 

यह file-5.09(उबंटू 12.04 पर) है


यह वास्तव में 16-भाषा के बहुभाषाविद
9

आप मध्यम व्यक्ति को भी काट सकते हैं और पूरी तरह से खोल से बच सकते हैं ln -s /usr/bin/file /usr/local/bin/myspecialtool:। यदि आपका जवाब मायने रखता है, तो क्या यह गिनती भी ठीक नहीं है? (चिंता मत करो, मैं गंभीर नहीं हूँ।)
HVD

2
एक मानक खामियों की तरह लग रहा है, यानी मौजूदा कार्यक्रम के लिए समाधान।
वि।

10

बैश - के बारे में 50 संकलित भाषा प्रति 35 बाइट्स

ट्रिक बस संकलन करने के लिए है, तो आपको लापता पुस्तकालयों से त्रुटियों को जोड़ने के बारे में चिंता करने की ज़रूरत नहीं है, और यदि आपके पास कोड स्निपेट हैं तो यह अधिक क्षमा करने योग्य है।

छोटे रूपों के लिए शाहबाज को धन्यवाद!

gcc -c $1 && (echo C; exit 0)
g++ -c $1 && (echo C++; exit 0)
gpc -c $1 && (echo Pascal; exit 0)
gfortran -c $1 && (echo Fortran; exit 0)

आदि...


चूँकि आप प्रति संकलित भाषा में बाइट्स की संख्या का उल्लेख करते हैं, तो आपको लाइनों में रुचि हो सकती है जैसे:gcc -c $1 && (echo C; exit 0)
शहबाज़

धन्यवाद, मैं वास्तव में निचोड़ कोड पर बहुत अच्छा नहीं हूँ!

ज़रूर। &&और ||बैश में वास्तव में उपयोगी और मदद सफाई कोड एक बहुत हैं। वे किसी भी तरह से आपत्ति के लिए इस्तेमाल नहीं कर रहे हैं, इसलिए आप उन्हें जानने के लिए अच्छा करेंगे।
शाहबाज

2
आप -fsyntax-onlyकेवल सिंटैक्स की जांच करने और वास्तविक संकलन को छोड़ने के लिए भी पास कर सकते हैं ।
peppe

7

18 प्रोग्रामिंग भाषाएं, 1002 बाइट्स, सटीकता: खुद के लिए परीक्षण :)

(हाँ मुझे पता है कि यह कोड गोल्फ नहीं है, लेकिन इसके मज़े के लिए)

कार्यक्रम प्रतिष्ठित कोड स्निपेट के लिए खोज करता है, चेक को इस तरह से आदेश दिया जाता है कि सबसे स्पष्ट चेक शीर्ष पर हैं और अन्य प्रोग्रामिंग भाषाओं में एम्बेडेड प्रोग्रामिंग भाषाएं नीचे हैं (जैसे PHP में HTML)।

यह स्पष्ट रूप से जैसे कार्यक्रमों के लिए विफल रहता है System.out.println('<?php');

t = (p) ->
    h = (x) -> -1 != p.indexOf x
    s = (x) -> 0 == p.indexOf x

    if h "⍵" then "APL"
    else if h "<?php" then "PHP"
    else if h("<?xml") and h "<html" then "XHTML"
    else if h "<html" then "HTML"
    else if h "<?xml" then "XML"
    else if h("jQuery") or h "document.get" then "JavaScript"
    else if h "def __init__(self" then "Python"
    else if h "\\documentclass" then "TeX"
    else if h("java.") or h "public class" then "Java"
    else if s("SELE") or s("UPDATE") or s "DELE" then "SQL"
    else if /[-\+\.,\[\]\>\<]{9}/.test p then "Brainfuck"
    else if h "NSString" then "Objective-C"
    else if h "do |" then "Ruby"
    else if h("prototype") or h "$(" then "JavaScript"
    else if h "(defun" then "Common Lisp"
    else if /::\s*[a-z]+\s*->/i.test p then "Haskell"
    else if h "using System" then "C#"
    else if h "#include"
        if h("iostream") or h "using namespace" then "C++"
        else "C"
    else "???"

program = ""
process.stdin.on 'data', (chunk) -> program += chunk
process.stdin.on 'end', -> console.log t program

नोड पर उपयोग: coffee timwolla.coffee < Example.java

डेमो ( JSFiddle पर ऑनलाइन-डेमो ):

[timwolla@~/workspace/js]coffee puzzle.coffee < ../c/nginx/src/core/nginx.c 
C
[timwolla@~/workspace/js]coffee puzzle.coffee < ../ruby/github-services/lib/service.rb
Ruby
[timwolla@~/workspace/js]coffee puzzle.coffee < ../python/seafile/python/seaserv/api.py
Python

मेरे कंप्यूटर पर यह कुछ भी आउटपुट नहीं करता है, इनपुट पर भी नहीं जो स्पष्ट रूप से काम करना चाहिए। दी, मैं कुछ गलत कर सकता हूं क्योंकि मैंने पहले कभी कॉफ़ीस्क्रिप्ट का उपयोग नहीं किया है।
मारिनस

@marinus ध्यान दें कि जब मैन्युअल रूप से इनपुट कोड आपको निष्पादन को ट्रिगर करने के लिए एक EOF (STRG + D) भेजने की आवश्यकता होती है। आम तौर पर: डिटेक्टर को कम से कम तीन प्रश्न चिह्न लगाने चाहिए।
तिमुल्ला

नहीं, कुछ भी नहीं। क्या मुझे coffeeकोई तर्क पारित करने की आवश्यकता है ? मैंने इसमें केवल फाइलों को पुनर्निर्देशित करने की कोशिश की थी, लेकिन बस इसे चलाना और जाना ^Dकुछ भी नहीं करता है।
मारिनस

@marinus कोशिश करें: npm install coffee-script && node_modules/.bin/coffee timwolla.coffee < timwolla.coffeeएक अस्थायी फ़ोल्डर में, इसे बाहर थूकना चाहिए APL। (यह मानते हुए कि आपके पास हाल ही में नोड और एनपीएम का संस्करण स्थापित है)
तिमुल्ला

5
मैं अपने गैर-एपीएल कार्यक्रमों में लोअरकेस ओमेगा का अधिक उपयोग करना शुरू करूंगा।
जॉन ड्वोरक

4

यह उत्तर अवधारणा का प्रमाण है, इससे आपको स्वयं से अधिक कार्य प्राप्त होने की संभावना नहीं होगी।

यह कई मायनों में छोटा पड़ता है:

  • आउटपुट वास्तव में प्रश्न के अनुरोध के रूप में नहीं है, लेकिन पर्याप्त रूप से बंद है और आसानी से आवश्यक उत्पादन का उत्पादन करने के लिए संशोधित किया जा सकता है।
  • डेटा संरचनाओं का प्रतिनिधित्व करने के लिए कोड को बेहतर और / या बेहतर तरीके से करने के कई तरीके हैं।
  • और अधिक

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

अधिक भाषाओं को जोड़ने के लिए केवल एक चीज उनके "हस्ताक्षरों" को पहचानना और उन्हें मानचित्रण में जोड़ना है।

आप प्रति भाषा में अलग-अलग कीवर्ड के लिए अलग-अलग स्कोर भी दे सकते हैं। उदाहरण के लिए, यदि आपको लगता volatileहै कि सी की तुलना में जावा में अधिक उपयोग किया जाता है , तो volatileकीवर्ड के लिए स्कोर को जावा के लिए 2 और सी के लिए 1 सेट करें ।

public class SourceTest {

  public static void main(String[] args) {
    if (args.length < 1) {
      System.out.println("No file provided.");
      System.exit(0);
    }
    SourceTest sourceTest = new SourceTest();
    for (String fileName : args) {
      try {
        sourceTest.checkFile(fileName);
      } catch (FileNotFoundException e) {
        System.out.println(fileName + " : not found.");
      } catch (IOException e) {
        System.out.println(fileName + " : could not read");
      }
    }
    System.exit(0);
  }

  private Map<String, LanguagePoints> keyWordPoints;
  private Map<LANGUAGES, Integer> scores;

  private enum LANGUAGES {
    C, HTML, JAVA;
  }

  public SourceTest() {
    init();
  }

  public void checkFile(String fileName) throws FileNotFoundException, IOException {
    String fileContent = getFileContent(fileName);
    testFile(fileContent);
    printResults(fileName);
  }

  private void printResults(String fileName) {
    System.out.println(fileName);
    for (LANGUAGES lang : scores.keySet()) {
      System.out.println("\t" + lang + "\t" + scores.get(lang));
    }
  }

  private void testFile(String fileContent) {
    for (String key : keyWordPoints.keySet()) {
      if (fileContent.indexOf(key) != -1) {
        for (LANGUAGES lang : keyWordPoints.get(key).keySet()) {
          scores.put(lang, scores.get(lang) == null ? new Integer(1) : scores.get(lang) + 1);
        }
      }
    }
  }

  private String getFileContent(String fileName) throws FileNotFoundException, IOException {
    File file = new File(fileName);
    FileReader fr = new FileReader(file);// Using 1.6 so no Files
    BufferedReader br = new BufferedReader(fr);
    StringBuilder fileContent = new StringBuilder();
    String line = br.readLine();
    while (line != null) {
      fileContent.append(line);
      line = br.readLine();
    }
    return fileContent.toString();
  }

  private void init() {
    scores = new HashMap<LANGUAGES, Integer>();

    keyWordPoints = new HashMap<String, LanguagePoints>();
    keyWordPoints.put("public class", new LanguagePoints().add(LANGUAGES.JAVA, 1));
    keyWordPoints.put("public static void main", new LanguagePoints().add(LANGUAGES.JAVA, 1));
    keyWordPoints.put("<html", new LanguagePoints().add(LANGUAGES.HTML, 1));
    keyWordPoints.put("<body", new LanguagePoints().add(LANGUAGES.HTML, 1));
    keyWordPoints.put("cout", new LanguagePoints().add(LANGUAGES.C, 1));
    keyWordPoints.put("#include", new LanguagePoints().add(LANGUAGES.C, 1));
    keyWordPoints.put("volatile", new LanguagePoints().add(LANGUAGES.JAVA, 1).add(LANGUAGES.C, 1));
  }

  private class LanguagePoints extends HashMap<LANGUAGES, Integer> {
    public LanguagePoints add(LANGUAGES l, Integer i) {
      this.put(l, i);
      return this;
    }
  }
}

4

बस कुछ व्यापक सामान्यीकरण।

मुझे लगता है कि यह काफी सटीक है।

यह रूबी btw है। स्टड से इनपुट (बहुस्तरीय) इनपुट लेता है।

puts case $<.read
when /\)\)\)\)\)/
  "Lisp"
when /}\s+}\s+}\s+}/
  "Java"
when /<>/
  "Perl"
when /|\w+|/
  "Ruby"
when /\w+ :- \w+ \./
  "Prolog"
when /^[+-<>\[\],.]+$/
  "brainfuck"
when /\[\[.*\]\]/
  "Bash"
when /~]\.{,/
  "golfscript"
end

मुझे लगता है कि #include c के लिए एक बेहतर भविष्यवक्ता है। बैश / शेल स्क्रिप्ट के लिए #? / Bin / (ba)? Sh के बारे में क्या?
डिजिटल ट्रामा

@DigitalTrauma Yea, मुझे लगता है कि आप #include के बारे में सही हैं। कलात्मक कारणों से मैं सिर्फ हैश-बैंग नहीं पकड़ पा रहा हूँ जहाँ भाषा का नाम स्पष्ट रूप से थू-थू किया गया है।
दानिएरो

#include iniफाइलों में एक टिप्पणी है औरphp
इस्माइल मिगुएल

1
+1 को प्रोलॉग होने के लिए, लेकिन कोई सी :)
स्वस्तिक

1
मैं \$\w+PHP का पता लगाने के लिए पर्ल के बाद जोड़ूंगा। इसके अलावा (\w+)::~\1आम तौर पर एक C ++ विध्वंसक
SztupY

2

जावास्क्रिप्ट - 6 भाषाएँ - उच्च सटीकता

वर्तमान भाषाएँ: जावा, सी, एचटीएमएल, पीएचपी, सीएसएस, जावास्क्रिप्ट

मैं इस सिद्धांत पर काम करता हूं कि जब भी कोई इनपुट किसी मापदंड को पूरा करता है, तो उसे एक अंक दिया जाता है, और उस स्कोर के आधार पर परिणाम दिए जाते हैं।

विशेषताएं:

  • कोई अंतर्निहित कार्य जो भाषा प्रकार का उपयोग करता है, को निर्धारित करता है।
  • किसी xकीवर्ड को देखने पर इनपुट टेक्स्ट सीधे भाषा घोषित नहीं करता है ।
  • अन्य संभावित भाषाओं को भी प्रस्तुत करता है।

क्या आपको यह महसूस करना चाहिए कि आपके किसी भी कार्यक्रम के इनपुट (जो मैंने अब तक किए हैं) पकड़े नहीं गए हैं या अमान्य परिणाम प्राप्त हुए हैं, तो कृपया रिपोर्ट करें और मुझे उन्हें ठीक करने में खुशी होगी।

नमूना इनपुट 1:

class A{public static void main(String[]a){System.out.println("<?php");}}

नमूना आउटपुट 1:

My program thinks you have :
Java with a chance of 100%
Php with a chance of 25%
----------------

स्पष्टीकरण:

यह प्रोग्राम को विफल कर देना चाहिए था और मैंने प्रिंट किया होगा PHP, लेकिन चूंकि मेरा प्रोग्राम स्कोर के आधार पर काम करता है, इसलिए कुछ भी विफल नहीं होता है और यह आसानी से पहले स्थान पर जावा की पहचान करता है, इसके बाद अन्य संभावित परिणाम मिलते हैं।

नमूना इनपुट 2:

class A{public static void main(String[]a){System.out.println("HelloWorld!");}}

नमूना आउटपुट 2:

Java
----------------

नमूना इनपुट 3:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

नमूना आउटपुट 3:

Language not catched! Sorry.
----------------

कोड:

// Helper functions

String.prototype.m = function(condition){
  return this.match(condition);
};

String.prototype.capitalize = function(){
  return this[0].toUpperCase() + this.substr(1);
};

function getFuncName(func){
  var temp =  func.toString();
  temp = temp.substr( "function ".length);
  temp = temp.substr( 0, temp.indexOf("("));
  return temp.capitalize();
}

// Get input
var lang_input = prompt("Enter programming language");

// Max score of 4 per lang

function java(input){
  var score = 0;
  score += input.m(/class[\s\n]+[\w$]+[\s\n]*\{/) ? 1 : 0;
  score += input.m(/public[\s\n]+static[\s\n]+void[\s\n]+main[\s\n]*/) ? 1 : 0;
  score += input.m(/\}[\s\n]*\}[\s\n]*$/) ? 1 : 0;
  score += input.m(/System[\s\n]*[.][\s\n]*out/) ? 1 : 0;
  return score;
}

function c(input){
  var score = 0;
  // if java has passsed
  if(checks[0][1] >= 3)return 0;

  score += input.m(/^#include\s+<[\w.]+>\s*\n/) ? 1 : 0;
  score += input.m(/main[\s\n]*\([\s\n]*(void)?[\s\n]*\)[\s\n]*\{/) ? 1 : 0;
  score += input.m(/printf[\s\n]+\(/) || input.m(/%d/) ? 1 : 0;
  score += input.m(/#include\s+<[\w.]+>\s*\n/) || input.m(/(%c|%f|%s)/) ? 1 : 0;
  return score;
}

function PHP(input){
  var score = 0;
  score += input.m(/<\?php/) ? 1 : 0;
  score += input.m(/\?>/) ? 1 : 0;
  score += input.m(/echo/) ? 1 : 0;
  score += input.m(/$[\w]+\s*=\s*/) ? 1 : 0;
  return score;
}

function HTML(input){
  var score = 0;
  // if php has passed
  if(checks[2][1] >= 2) return 0;

  score += input.m(/<!DOCTYPE ["' \w:\/\/]*>/) ? 1 : 0;
  score += input.m(/<html>/) && input.m(/<\/html>/) ? 1 : 0;
  score += input.m(/<body>/) && input.m(/<\/body/) ? 1 :  0;
  score += input.m(/<head>/) && input.m(/<\/head>/) ? 1 : 0;
  return score;
}

function javascript(input){
  var score = 0;
  score += input.m(/console[\s\n]*[.][\s\n]*log[\s\n*]\(/) ? 1 : 0;
  score += input.m(/[\s\n]*var[\s\n]+/) ? 1 : 0;
  score += input.m(/[\s\n]*function[\s\n]+[\w]+[\s\n]+\(/) ? 1 : 0;
  score += input.m(/document[\s\n]*[.]/) || 
           ( input.m(/\/\*/) && input.m(/\*\//) ) ||
           ( input.m(/\/\/.*\n/) )? 1 : 0;
  return score;
}

function CSS(input){
  var score = 0;
  score += input.m(/[a-zA-Z]+[\s\n]*\{[\w\n]*[a-zA-Z\-]+[\s\n]*:/) ? 1 : 0;
  // since color is more common, I give it a separate place
  score += input.m(/color/) ? 1 : 0;          
  score += input.m(/height/) || input.m(/width/) ? 1 : 0;
  score += input.m(/#[a-zA-Z]+[\s\n]*\{[\w\n]*[a-zA-Z\-]+[\s\n]*:/) ||
           input.m(/[.][a-zA-Z]+[\s\n]*\{[\w\n]*[a-zA-Z\-]+[\s\n]*:/) ||
           ( input.m(/\/\*/) && input.m(/\*\//) ) ? 1 : 0;
  return score;
}

// [Langs to check, scores]
var checks = [[java, 0], [c, 0], [PHP, 0], [HTML, 0], [javascript, 0], [CSS, 0]];
//Their scores

// Assign scores
for(var i = 0; i < checks.length; i++){
  var func = checks[i][0];
  checks[i][1] = func(lang_input);
}

// Sort the scores
checks.sort(function(a,b){ return b[1] - a[1]; });

var all_zero = true;

function check_all_zero(index){
  if(checks[index][1] > 0){ all_zero = false; return 0; } // someone is above zero

  // check next index only if it defined, else return zero
  if(checks[index + 1])
    check_all_zero(index + 1);
}

check_all_zero(0);

if(all_zero){
  console.log("Language not catched! Sorry.");
}else {
  var new_arr = [];                   // temp

  checks.map(function(value, index){
    if(value[1] > 0){
      var temp = [getFuncName(value[0]), value[1]];
      new_arr.push(temp);
    }
  });

  checks = new_arr.slice(0);          // array copy, because of mutation

  if(checks.length === 1){
    console.log(checks[0][0]);
  }else{
    console.log("My program thinks you have :");
    checks.map(function(value){
      var prob = (value[1]/4 * 100);
      console.log(value[0] + " with a chance of " + prob + "%");
    });
  }

} // Main else block finish

console.log("----------------");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.