একটি স্নিপেট প্রোগ্রামিংয়ের ভাষা কী তা নির্ণয় করুন


23

আপনার চ্যালেঞ্জটি হ'ল ইনপুট হিসাবে কোনও উত্স কোড গ্রহণ করা এবং এটি কোন প্রোগ্রামিং ভাষায় লেখা আছে তা আউটপুট।

উদাহরণস্বরূপ, আপনি ইনপুট থাকতে পারে

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

এবং আউটপুট

Java

আপনার দুটি প্রধান লক্ষ্য হ'ল বৈচিত্র্য (আপনি কতগুলি প্রোগ্রামিং ভাষা সনাক্ত করতে পারেন) এবং যথার্থতা (আপনি এই ভাষাগুলি সনাক্ত করতে কতটা ভাল আছেন) are

বহুগ্লোটগুলির জন্য (একাধিক ভাষায় প্রোগ্রাম বৈধ), আপনি কী করবেন তা সিদ্ধান্ত নিতে পারেন। আপনার প্রোগ্রামটি যে ভাষা সম্ভবত বেশি বলে মনে হয় আপনি কেবল সেটিকেই আউটপুট করতে পারেন বা আপনি কোনও ত্রুটি আউটপুট করতে পারেন, বা আপনি সম্ভাব্য পছন্দগুলির একটি অ্যারে আউটপুট করতে পারেন (যা সম্ভবত একটি ত্রুটির চেয়ে আরও বেশি উত্স পেতে পারে!)।

এটি একটি , কারণ একটি ভিন্ন উদ্দেশ্য বিজয়ী মানদণ্ড নির্দিষ্ট করা খুব কঠিন হবে difficult ভোটারগণ, দয়া করে এটি কয়টি ভাষা সনাক্ত করতে পারে এবং কতটা নির্ভুল তা ভোট দিন।


এটি অসম্ভব, কারণটি 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

আমি এই কিছুটা স্মার্ট-উত্তর post উত্তর পোস্ট করতে সংকোচ করছি, তবে আমি এটি নিষিদ্ধ করার নিয়মগুলিতে কিছুই দেখতে পাচ্ছি না এবং 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বিকল্পটি আপনাকে ভিন্ন ভিন্ন ভাষার জন্য অ্যালগোরিদম কতটা ভাল তা ধারণা দেয়:

$ file -l | গ্রেপ শেল
অজানা, 0: সতর্কতা: নিয়মিত যাদু ফাইল `/ ইত্যাদি / যাদু 'ব্যবহার করে
শক্তি = 280: শেল সংরক্ষণাগার পাঠ্য [অ্যাপ্লিকেশন / অক্টেট স্ট্রিম]
শক্তি = 250: টেনেক্স সি শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 250: বোর্ন-অইন শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 240: পল ফলস্টাডের zsh স্ক্রিপ্টের পাঠ্য কার্যকরযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 240: নীল ব্রাউন এর অ্যাশ স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 230: নীল ব্রাউন এর স্ক্রিপ্টের পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 210: টেনেক্স সি শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 210: বোর্ন-অইন শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 190: টেনেক্স সি শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 190: বোর্ন-অইন শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 180: পল ফালস্টাদের zsh স্ক্রিপ্টের পাঠ্য কার্যকরযোগ্য [পাঠ্য / এক্স-শেলসক্রিপ্ট]
শক্তি = 150: টেনেক্স সি শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 150: বোর্ন-অইন শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 140: সি শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 140: কর্ন শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = ১৪০: পল ফালস্টাদের zsh স্ক্রিপ্টের পাঠ্য কার্যকরযোগ্য [পাঠ্য / এক্স-শেলসক্রিপ্ট]
শক্তি = ১৩০: পসিক্স শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য [পাঠ্য / এক্স শেলসক্রিপ্ট]
শক্তি = 130: পরিকল্পনা 9 টি আরসি শেল স্ক্রিপ্ট পাঠ্য সম্পাদনযোগ্য []
$ 

এটি file-5.09(উবুন্টু 12.04 এ)


- এটি আসলে একটি 16 ভাষা বহুভাষিক উপর প্রশংসনীয় ভাল আছে gist.github.com/riking/9088817
Riking

আপনি ভাল হিসাবে মধ্যম মানুষ কেটে এবং শেল শব্দটি এড়িয়ে পারে: ln -s /usr/bin/file /usr/local/bin/myspecialtool। যদি আপনার উত্তর গণনা করা হয়, তবে এই গণনাটি ঠিক তেমনি হয় না? (চিন্তা করবেন না, আমি সিরিয়াস নই।)
এইচডিভি

2
একটি স্ট্যান্ডার্ড লুফোলের মতো দেখায়, যেমন বিদ্যমান প্রোগ্রামটির সমাধান সমাধান করে।
vi।

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কেবল বাক্য গঠন পরীক্ষা করতে এবং প্রকৃত সংকলন এড়িয়ে যেতে পারেন।
পেপ্প

7

18 প্রোগ্রামিং ভাষা, 1002 বাইট, নির্ভুলতা: নিজের জন্য পরীক্ষা :)

(হ্যাঁ আমি জানি এটি কোড গল্ফ নয়, তবে এটি মজাদার জন্য)

প্রোগ্রামটি আইকনিক কোড স্নিপেটগুলি অনুসন্ধান করে, চেকগুলি এমনভাবে অর্ডার করা হয় যাতে সর্বাধিক স্পষ্ট চেকগুলি শীর্ষে থাকে এবং অন্যান্য প্রোগ্রামিং ভাষাগুলিতে এম্বেড হওয়া প্রোগ্রামিং ভাষা নীচে থাকে (যেমন পিএইচপিতে 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

ডেমো ( জেএসফিডেলে অনলাইন-ডেমো ):

[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

আমার কম্পিউটারে এটি কিছুই আউটপুট করে না, এমনকি ইনপুটটিতেও নয় যা স্পষ্টতই কাজ করে। মঞ্জুর, আমি সম্ভবত কিছু ভুল করছি কারণ আমি এর আগে কখনও কফি স্ক্রিপ্ট ব্যবহার করি নি।
মেরিনাস

@ মারিনাস নোট করুন যে ম্যানুয়ালি কোড ইনপুট দেওয়ার সময় এক্সিকিউশন ট্রিগার করতে আপনাকে একটি EOF (এসআরটি + ডি) প্রেরণ করতে হবে। সাধারণত: ডিটেক্টরের কমপক্ষে তিনটি প্রশ্ন চিহ্ন থুতু ফেলা উচিত।
টিমওয়ালা

না, কিছুই না। আমার coffeeকি কোনও যুক্তি পাস করার দরকার আছে ? আমি এটিতে ফাইলগুলি পুনর্নির্দেশের চেষ্টা করেছি, তবে এটি চালিয়ে যাচ্ছি এবং কিছুই ^Dকরে না।
মেরিনাস

@মারিনাস চেষ্টা করুন: 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

মাত্র কয়েকটি বিস্তৃত সাধারণীকরণ।

আমি মনে করি এটি মোটামুটি সঠিক।

এটি রুবি বিটিডব্লিউ। স্টিডিন থেকে ইনপুট নেয় (মাল্টলাইন)।

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

আমি মনে করি # অন্তর্ভুক্তি সি এর জন্য আরও ভাল ভবিষ্যদ্বাণী। বাশ / শেল স্ক্রিপ্টগুলির জন্য #! / বিন / (বা) কী?
ডিজিটাল ট্রমা

@ ডিজিটাল ট্রুমা হ্যাঁ, আমি মনে করি আপনি # অন্তর্ভুক্ত করার বিষয়ে ঠিক বলেছেন। শৈল্পিক কারণে আমি কেবল হ্যাশ-ব্যাং ধরতে যাচ্ছি না যেখানে ভাষার নামটি স্পষ্টভাবে বর্ণিত হয়েছে।
ডানিরো

# অন্তর্ভুক্তি iniফাইলগুলির একটি মন্তব্য এবংphp
ইসমাইল মিগুয়েল


1
আমি \$\w+পিএইচপি সনাক্ত করতে পার্লের পরে যুক্ত করব । এছাড়াও (\w+)::~\1সাধারণত একটি সি ++
ডিসস্ট্রাক্টর হয়

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("----------------");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.